Target vba excel описание

Событие Worksheet.SelectionChange, используемое в VBA Excel для запуска процедур при выборе диапазона на рабочем листе, в том числе отдельной ячейки.

Синтаксис процедуры, выполнение которой инициируется событием Worksheet.SelectionChange:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

‘Операторы процедуры

End Sub

Эта процедура VBA Excel запускается при смене на рабочем листе выделенного диапазона (SelectionChange). Она должна быть размещена в модуле рабочего листа Excel, смена выбранного диапазона ячеек которого будет инициировать ее запуск.

Аргумент Target — это новый выбранный диапазон на рабочем листе.

Шаблон процедуры можно скопировать и вставить в модуль рабочего листа, но не обязательно. Если открыть модуль нужного листа, выбрать в левом верхнем поле объект Worksheet, шаблон процедуры будет добавлен автоматически:

Выбор события Worksheet.SelectionChange в модуле рабочего листа

У объекта Worksheet есть и другие события, которые можно выбрать в правом верхнем поле модуля рабочего листа. Процедура с событием SelectionChange добавляется по умолчанию.

Примеры кода с Worksheet.SelectionChange

Пример разработчика

Замечательный пример дан на сайте разработчика:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

   With ActiveWindow

      .ScrollRow = Target.Row

      .ScrollColumn = Target.Column

   End With

End Sub

При выборе на листе любого диапазона, в том числе отдельной ячейки, лист автоматически прокручивается по горизонтали и вертикали, пока выделенный диапазон не окажется в верхнем левом углу экрана.

Эта процедура работает и при выборе ячейки через адресную строку (слева над обозначениями столбцов), и при выборе из кода VBA Excel, например:

Выбор одной отдельной ячейки

Инициируем выполнение основных операторов процедуры с событием Worksheet.SelectionChange выбором одной отдельной ячейки:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Address = «$E$5» Then

        MsgBox «Выбрана ячейка E5»

    End If

End Sub

Основной оператор MsgBox "Выбрана ячейка E5" будет выполнен при выборе ячейки E5.

Примечание:
В условии примера используется свойство Address переменной Target, так как в прямом выражении Target = Range("E5") по умолчанию сравниваются значения диапазонов. В результате этого, при выборе другой ячейки со значением, совпадающим со значением ячейки E5, равенство будет истинным и основные операторы будут выполнены, а при выборе более одной ячейки, будет сгенерирована ошибка.

Выбор диапазона с заданной ячейкой

Выполнение основных операторов процедуры при вхождении заданной ячейки в выбранный диапазон:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Intersect(Target, Range(«B3»)) Is Nothing Then

        MsgBox «Ячейка B3 входит в выбранный диапазон»

    End If

End Sub

Основной оператор MsgBox "Ячейка B3 входит в выбранный диапазон" будет выполнен при выделении диапазона, в который входит ячейка B3, в том числе и при выделении одной этой ячейки.

Выбор ячейки в заданной строке

Инициируем выполнение основных операторов процедуры с событием Worksheet.SelectionChange выбором любой отдельной ячейки во второй строке:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Count > 1 Then Exit Sub

        If Target.Row = 2 Then

            MsgBox «Выбрана ячейка во второй строке»

        End If

End Sub

Дополнительный оператор If Target.Count > 1 Then Exit Sub необходим для выхода из процедуры при выделении более одной ячейки. Причина: при выделении произвольного диапазона, ограниченного сверху второй строкой, выражение Target.Row = 2 будет возвращать значение True, и операторы в блоке If ... End If будут выполнены.

Ввод даты в ячейку первого столбца

Автоматическое добавление текущей даты в выбранную ячейку первого столбца при условии, что предыдущая ячейка сверху не пустая, а ячейка снизу – пустая:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Count > 1 Or Target.Row = 1 Or Target.Row = ActiveSheet.Rows.Count Then Exit Sub

        If Target.Column = 1 And Target.Offset(1, 0) <> «» And Target.Offset(1, 0) = «» Then

            Target = Format(Now, «DD.MM.YYYY»)

        End If

End Sub

Этот код VBA может быть полезен при ведении реестра, базы данных на листе Excel с записью текущей даты в первой колонке.

Условие If Target.Count > 1 Or Target.Row = 1 Or Target.Row = ActiveSheet.Rows.Count Then Exit Sub завершает процедуру при выборе более одной ячейки, при выборе ячейки A1 и при выборе последней ячейки первого столбца.

Выбор ячейки A1 приводит к ошибке при проверке условия Target.Offset(-1, 0) <> "", так как происходит выход за границы диапазона рабочего листа.

Ошибка выхода за пределы рабочего листа происходит и при проверке условия Target.Offset(1, 0) = "", если выбрать последнюю ячейку первой колонки.

Примечание:
Текущая дата будет введена в следующую пустую ячейку первого столбца при переходе к ней от заполненной в том числе нажатием клавиши «Enter».

Пример без отслеживания Target

Если необходимо, чтобы процедура запускалась при любой смене выделенного диапазона, аргумент Target можно не отслеживать:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If [B1] > 100 Then

        [A1].Interior.Color = vbGreen

    Else

        [A1].Interior.Color = vbBlue

    End If

End Sub

После ввода значения в ячейку B1, можно нажать Enter или кликнуть по любой другой ячейке рабочего листа, и событие Worksheet.SelectionChange сработает.


Return to VBA Code Examples

This article will demonstrate the use of VBA Target.Address.

vba target address selection change event

Target.Address

Target is the given name of the Range object variable that is contained in the argument of Worksheet Object Events, such as Worksheet_SelectionChange.

This event is triggered when you move from one cell to another in your worksheet.

To create a Worksheet Event, on the VBE Editor, select the appropriate worksheet and then, in the Object drop down box, select Worksheet.

vba target address worksheet

Consider the following code:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Address = "$F$2" Then
    Range(Target.Address).Font.Bold = True
  End If
End Sub

Whenever you move your cursor this event will run and the IF Statement will test if the selected cell is F2. If it is, the cell will be set to Bold.

NOTE: The Target.Address is an absolute ($F$2), so when checking to see if you are on the appropriate cell, you must use $ signs in your string (“$F$2”).

The Target Range (and therefore the Target.Address method) is also avaialable with the Worksheet_Change; Worksheet_BeforeDoubleClick and Worksheet_BeforeRightClick event procedures in your Worksheet object.

You may want to run your macro/VBA snippet when a cell changes its value, when a double click happens, when a sheet is selected, etc. In all these cases we use Worksheet Event Handler.  The Event Handler helps us run VBA code whenever a certain event occurs.

In this article, we will learn briefly about each Worksheet Event Handler.

What is a Worksheets Event Handler?

A worksheet event handler is a subroutine that is local to a worksheet module.

Where to write Worksheet Event Handler Code?

The worksheet Events are written in sheets objects only. If you write a worksheet event in some module or class module, there will be no error but they will just won’t work.

To write in the sheet object. Double click on it or right-click and click on view code. The code writing area will be shown.

How to write code for a specific event on the worksheet?

Now when you are in the editing mode, in the top-left corner dropdown menu you will see general. Click on the drop-down and select worksheet. Now in the top-right corner dropdown, all events will show. Choose whichever you need and a skeletal code for that event will be written for you.

Each event has a fixed procedure name. These are the reserved subroutine names. You can’t use them for other subroutines on a sheet. In a module, they will work as a normal subroutine.

Important: Each subroutine from that list will run on the specified event.
One type of worksheet event procedure can be written only once on one sheet. If you write two same event handling procedures on one sheet, it will result in an error and none of them will be executed. Of course, the error will be ambiguous subroutines.

Let’s learn briefly about each of the events.

1. The Worksheet_Change (ByVal Target As Range) Event

This event triggers when we make any change to containing worksheets (formatting excluded). If you want to do something if any change made in the entire sheet then the code will be:

Private Sub Worksheet_Change(ByVal Target As Range)
  'do somehting 
  Msgbox "done something"
End Sub

The «Target» is the Active cell always.

Another example: You may want to put date and time in Cell B1 if A1 changes. In that case, we use the worksheet_change event. The code would look like this:

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$A$1" Then
  Range("B1").Value2 = Format(Now(), "hh:mm:ss")
 End If
End Sub

This will target only the cell A1.

If you want to target a range then use the below example:

Run Macro If Any Change Made on Sheet in Specified Range

2. The Worksheet_SelectionChange(ByVal Target As Range) Event

As the name suggests, this event triggers when the selection changes. In other words, if your cursor is in Cell A1 and it moves to some other cell, the code in this subroutine will run.

The below code will change the active cells color if whenever it changes and if it is an even row.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Target.Row Mod 2 = 0 Then
    Target.Interior.ColorIndex = 22
 End If
End Sub

Now, whenever my cursor will move on even row, it will be colored. Odd row cells will be spared.

Another Example of the Worksheet_SelectionChange event:

Simplest VBA Code to Highlight Current Row and Column Using

3. The Worksheet_Activate() Event

This event is triggered when the event code containing sheet activates. The skeletal code for this event is:

Private Sub Worksheet_Activate()

End Sub

A simple example is showing the sheet name when it gets selected.

Private Sub Worksheet_Activate()

  MsgBox "You are on " & ActiveSheet.Name

End Sub

As soon as you will come on the sheet that contains this code, the event will run and will be shown a message that «You are on sheet name» (sheet2 is in my case).

4. The Worksheet_Deactivate() Event

This event triggers when leaving the code containing sheet. In other words, if you want to do something, like hiding rows or anything when you leave the sheet, use this VBA event. The syntax is:

Private Sub Worksheet_Deactivate()
'your code
'
End Sub

The below example Worksheet_Deativate event will simply pop up a message that you have left the master sheet, when you will leave this sheet.

Private Sub Worksheet_Deactivate()
  MsgBox "You Left The Master Sheet"
End Sub


5. The Worksheet_BeforeDelete() Event

This event triggers when you confirm the deletion of the VBA event containing sheet. The syntax is simple:

Private Sub Worksheet_BeforeDelete()

End Sub

The below code will ask you if you want to copy the content of the about-to-delete sheet.

Private Sub Worksheet_BeforeDelete()
    ans = MsgBox("Do you want to copy the content of this sheet to a new sheet?", vbYesNo)
    If ans = True Then
    'code to copy
 End If
End Sub

6. The Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Event

This event triggers when you double click on the targeted cell. The syntax of this VBA Worksheet Event is:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

End Sub

If you don’t set the target cell or range, it will fire on every double click on the sheet.
The Cancel variable is a boolean variable. If you set it True, the default action won’t happen. It means if you double click on the cell it won’t get into editing mode.
The below code will make the cell fill with a color if you double click on any cell.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Cancel = True
Target.Interior.ColorIndex = 7

End Sub

The below code targets the cell A1. If it is already filled with the specified color then it will vanish the color. It is much like a like button or check box.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   If Target.Address = "$A$1" Then
   
   Cancel = True
    If Target.Interior.ColorIndex = 4 Then
        Target.Interior.ColorIndex = xlColorIndexNone
    Else
        Target.Interior.ColorIndex = 4
    End If
    
   End If
   
End Sub

7. The Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Event

This event triggers when you Right-Click on the targeted cell. The syntax of this VBA Worksheet Event is:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
   Cancel = True
   '
   'your code
   '
End Sub

The below code will fill the cell with value 1 if you right-click on it. It won’t show the default right-click options since we have set the «Cancel» Operator to True.

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
   Cancel = True
   Target.Value = 1
End Sub

8. The Worksheet_Calculate() Event

If you want something to happen when a excel calculates a sheet, use this event. It will trigger whenever excel calculates a sheet. The syntax is simple:

Private Sub Worksheet_Calculate()
  '
   'your code
   '  
End Sub

6. The Worksheet_FollowHyperlink(ByVal Target As Hyperlink) Event

This procedure will run when you click on a hyperlink on the sheet.  The basic syntax of this event handler is:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    '
   'your code
   ' 

End Sub

You can set the target hyperlink if you want. If you don’t set the target hyperlink, it will get executed if you click on any hyperlink on the code containing sheet.

So yeah guys, these were some basic worksheet events that will be handy if you know about them. Below are some related articles that you may like to read.

If you have any doubts regarding this article or any other excel/VBA related article, let us know in the comments section below.

Related Articles:

Using Worksheet Change Event To Run Macro When any Change is Made | So to run your macro whenever the sheet updates, we use the Worksheet Events of VBA.

Run Macro If Any Change Made on Sheet in Specified Range | To run your macro code when the value in a specified range changes, use this VBA code. It detects any change made in the specified range and will fire the event.

Simplest VBA Code to Highlight Current Row and Column Using | Use this small VBA snippet to highlight the current row and column of the sheet.

Popular Articles:

50 Excel Shortcuts to Increase Your Productivity | Get faster at your task. These 50 shortcuts will make your work even faster on Excel.

The VLOOKUP Function in Excel | This is one of the most used and popular functions of excel that is used to lookup value from different ranges and sheets. 

COUNTIF in Excel 2016 | Count values with conditions using this amazing function. You don’t need to filter your data to count specific value. Countif function is essential to prepare your dashboard.

How to Use SUMIF Function in Excel | This is another dashboard essential function. This helps you sum up values on specific conditions.

In this tutorial, we’ll discuss the Change and ChangeSelection worksheet events. The Worksheet_Change event-handler procedure executes whenever any cell in the worksheet is changed and Worksheet_SelectionChange event-handler procedure executes when the selection on the worksheet is changed.

The worksheet event-handler procedures must be in the code module for that worksheet. Put them somewhere else, and they won’t work. You can quickly access that code window by right-clicking the worksheet’s tab and selecting the View Code:

Worksheet view code window

Worksheet_Change event procedure

The Change event triggers whenever any cell in the worksheet is changed. Excel uses the Worksheet_Change event-handler procedure to trap the Change event. The Worksheet_Change procedure accepts Target (the Range object) as the parameter which represents the cell that was changed. The following example displays a message box that shows the address of the Target range:

Private Sub Worksheet_Change(ByVal Target As Range)
 MsgBox Target.Address
End Sub

Try making some changing in cells, every time you make changes, a message box displays the address of the cell that changed.

Monitor changes made to specific cell or range

The Worksheet_Chnage procedure receives the Target as Range object which represents the changed cell(s). In this example, we compare the Target with the given cell range A1:A10 using Intersect method:

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim MyRange As Range
 Set MyRange = Range("A1:A10")
 If Not Intersect(Target, MyRange) Is Nothing Then
  MsgBox ("You've changed the " & Target.Address)
 End If
End Sub

A popup message box appears when a change made in the given cell range:

Worksheet_Change Vs. Worksheet_Calculate

The Worksheet_Change event procedure is not executed by a calculation change, for example, when a formula returning a different value. You must use the Worksheet_Calculate event procedure to capture the changes to values in cells that contain formulas.

Worksheet_SelectionChange event procedure

The Worksheet_SelectionChange event procedure executes when a cell is selected. The following code highlights the active cell with a red color every time a different cell is selected:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Cells.Interior.ColorIndex = 0
 Target.Interior.ColorIndex = 3
End Sub

The first statement removes the background color for all cells in the worksheet. Next, the the active cell is shaded with red color.

Take some action when specific cells or ranges selected

In many cases, you need to execute a piece of code when certain cells or ranges selected. To accomplish this, we use the Intersect method on the Target (selected cell or range) and the range containing the specific cell to verify the Target is one of the specific cells or ranges. If the Target is in the range containing the specific cells, you can execute the code.

The following code highlights the active cell with a red color every time a different cell is selected:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Cells.Interior.ColorIndex = 0
 Dim MyRange As Range
 Set MyRange = Range("A1:A10")
 If Not Intersect(Target, MyRange) Is Nothing Then
  Target.Interior.ColorIndex = 3
 End If
End Sub

by updated Apr 05, 2020

13 / 13 / 0

Регистрация: 24.10.2015

Сообщений: 267

1

объясните самоучке

26.01.2016, 20:52. Показов 23145. Ответов 28


Студворк — интернет-сервис помощи студентам

Люди добрые, подскажите плиз как обращаться с этим зверем: «Private Sub Worksheet_Change(ByVal Target As Range)»
В литературе типа VBA для чайников и прочей написано кратко: Хочешь, чтобы макрос срабатывал при изменении ячейки, применяй Private Sub Worksheet_Change(ByVal Target As Range). Но я понять не могу как обозначить Target. Чего не делаю — или ошибки вылезают или просто не работает. Выкручиваюсь назначением кнопки на запуск макроса, но хотелось бы освоить сию возможность.
Не прошу разжевать (хотя, если у кого хватит терпения, готов внимать пояснения), подскажите где посмотреть. Свою задачу выкладывать тоже бессмысленно, т.к. не хочу, чтобы ее решили, хочу решить самостоятельно (хватит уже на Вашей шее сидеть)
Спасибо.



0



es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

26.01.2016, 20:57

2

Цитата
Сообщение от teplovdl
Посмотреть сообщение

Но я понять не могу как обозначить Target

Что значит «обозначить» ?



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

26.01.2016, 21:00

3

teplovdl, сделайте поиск по этому разделу по фразе Worksheet_Change — примеров полно.
Если кратко — это процедура обработки события. Если пользователь (или макрос, или другая программа) меняет содержимое какого-то диапазона — происходит вызов этой процедуры, и Target содержит ссылку на измененный диапазон. Попробуйте для начала

Visual Basic
1
2
3
Private Sub Worksheet_Change(ByVal Target As Range)
  MsgBox Target.Address
End Sub

Код необходимо вставить в модуль листа (правый клик по ярлычку листа — Исходный текст).



1



13 / 13 / 0

Регистрация: 24.10.2015

Сообщений: 267

26.01.2016, 21:05

 [ТС]

4

Может не правильно выразился, хотел сказать следующее. В теле данной процедуры как я понял необходимо определить что есть target, например target.cell или что-то в этом роде. Например есть желание, чтобы процедура срабатывала для ячеек определенного столбца, значит я должен это обозначить (назначить target). Может есть какой-нибудь синтаксис данной процедуры… но что-то мне не встречался.



0



Аксима

6076 / 1320 / 195

Регистрация: 12.12.2012

Сообщений: 1,023

26.01.2016, 21:12

5

Цитата
Сообщение от teplovdl
Посмотреть сообщение

чтобы процедура срабатывала для ячеек определенного столбца

…можно написать так:

Visual Basic
1
2
3
4
5
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target,Range("B:B")) Is Nothing Then
        MsgBox "Вы изменили ячейку(ки) столбца B: " & Intersect(Target,Range("B:B")).Address
    End If
End Sub

В обработчик события Worksheet_Change всегда передается ссылка на измененный диапазон.

С уважением,

Аксима



1



13 / 13 / 0

Регистрация: 24.10.2015

Сообщений: 267

26.01.2016, 21:22

 [ТС]

6

а как быть, если на одном листе нужно несколько Target обозначить. Например, столбец и закрашенные ячейки, можно это все в одну процедуру запихать или нужно еще одну писать (но как тогда быть, ведь процедура стандартная, значит имя ее будет повторяться).

Добавлено через 3 минуты

Цитата
Сообщение от Аксима
Посмотреть сообщение

Последний раз редактировалось Аксима; Сегодня в 23:16. Причина: Поправка — не ячейка, а диапазон.

А почему так, потому что (ByVal Target As Range)? и в качестве Target нужно всегда диапазон указывать? Тогда как быть с примером Казанский, где просто на адрес ссылаются?



0



Shersh

Заблокирован

26.01.2016, 21:40

7

Цитата
Сообщение от teplovdl
Посмотреть сообщение

в качестве Target нужно всегда диапазон указывать?

Ничего не надо указывать — он уже указан Excel`ем. Пример Казанского выдал адрес измененного диапазона, пример Аксимы — адрес ячеек, измененных в столбце [B:B].



0



13 / 13 / 0

Регистрация: 24.10.2015

Сообщений: 267

26.01.2016, 21:43

 [ТС]

8

Цитата
Сообщение от Shersh
Посмотреть сообщение

Ничего не надо указывать

зачем тогда в теле процедуры нужно обязательно писать Target иначе она и работать не будет.



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

26.01.2016, 22:00

9

Цитата
Сообщение от teplovdl
Посмотреть сообщение

зачем тогда в теле процедуры нужно обязательно писать Target

Можете не писать
Но в чём тогда смысл кода? Просто сообщить что что-то на листе изменилось? Тоже вариант… хотя обычно это и так изменившему известно.



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

26.01.2016, 22:07

10

Цитата
Сообщение от teplovdl
Посмотреть сообщение

зачем тогда в теле процедуры нужно обязательно писать Target

В теле процедуры Вы можете не использовать Target. Например, по событию изменения листа Вы хотите просто увеличить какую-то переменную на 1.
Вы не обязаны называть переменную именно Target. Процедура может быть не «Private».

Visual Basic
1
2
3
Sub Worksheet_Change(ByVal vasya As Range)
  MsgBox vasya.Address
End Sub

, но «ByVal» и «As Range» должно присутствовать обязательно, т.к. диспетчер событий приложения вызывает процедуру в расчете на такой способ передачи и тип аргумента.



1



13 / 13 / 0

Регистрация: 24.10.2015

Сообщений: 267

26.01.2016, 22:12

 [ТС]

11

Цитата
Сообщение от Hugo121
Посмотреть сообщение

Но в чём тогда смысл кода? Просто сообщить что что-то на листе изменилось? Тоже вариант… хотя обычно это и так изменившему известно.

Я понимаю ваше юмористическое настроение. Попробовал бы я объяснять ребенку зачем яблоко кусать, ведь можно просто глотать…
Теперь теме. По мне так написал Private Sub Worksheet_Change(ByVal Target As Range) и она понимает, что если что-то на листе изменилось, то запускай процедуру. А тут нет,нужно Target куда то впихать. Книжек то или статей по этому поводу что ли нет? Понятно, что людям, которые эти проги уже спинным мозгом пишут практически на уровне рефлексов все понимают, трудно простому чайнику объяснить как ноги переставлять, чтобы пойти.



0



es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

26.01.2016, 22:15

12

Цитата
Сообщение от teplovdl
Посмотреть сообщение

А тут нет,нужно Target куда то впихать.

Не обязательно впихивать



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

26.01.2016, 22:15

13

Никуда ничего в данном случае впихивать не нужно — таргет или как его назовёте наполняет сам эксель, это будет изменившийся диапазон. Если он Вам интересен — обрабатывайте эту переменную как хотите. Если безразлично — можете ничего не делать.
Что вообще хотите сделать?



0



SoftIce

es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

26.01.2016, 22:16

14

Цитата
Сообщение от SoftIce
Посмотреть сообщение

Не обязательно впихивать

Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Worksheet_Change(ByVal Target As Range)
   'здесь вызываете нужный макрос, но он будет вызываться каждый раз при изменении любой ячейки.
 
 
   ' чтобы этого не происходило поставьте какое-нибудь условие, например
   if target.column=1 then ' при изменении ячейки в столбце А
      'вызов макроса
   end if
End Sub



3



13 / 13 / 0

Регистрация: 24.10.2015

Сообщений: 267

26.01.2016, 22:23

 [ТС]

15

Цитата
Сообщение от Казанский
Посмотреть сообщение

Visual Basic
1
2
3
Sub Worksheet_Change(ByVal vasya As Range)
* MsgBox vasya.Address
End Sub

Т.е. если я хочу, чтобы процедура сработала для столбца 2 при изменении строк с 1 по 10, то я просто вместо (ByVal vasya As Range) пишу (ByVal i As Range), а потом в цикле указываю For i=1 to 10?

Добавлено через 4 минуты

Цитата
Сообщение от SoftIce
Посмотреть сообщение

Private Sub Worksheet_Change(ByVal Target As Range)
* *’здесь вызываете нужный макрос, но он будет вызываться каждый раз при изменении любой ячейки.
‘ чтобы этого не происходило поставьте какое-нибудь условие, например
* if target.column=1 then ‘ при изменении ячейки в столбце А
* * *’вызов макроса
* end if
End Sub

Извиняюсь, пишем друг другу одновременно, поэтому мои глупые вопросы отстают от Ваших пояснений. Но вообще становится уже понятнее. Хотя где то читал, что target нужно обязательно указывать. Может там и имелось ввиду, что (ByVal vasya As Range) обязательно должно быть, правда эта часть процедуры вроде сама подтягивается…



0



SoftIce

es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

26.01.2016, 22:31

16

Цитата
Сообщение от teplovdl
Посмотреть сообщение

что target нужно обязательно указывать

target или vasya Вам нужны.

Цитата
Сообщение от teplovdl
Посмотреть сообщение

Т.е. если я хочу, чтобы процедура сработала для столбца 2 при изменении строк с 1 по 10, то я просто вместо (ByVal vasya As Range) пишу (ByVal i As Range), а потом в цикле указываю For i=1 to 10?

Можно сделать, например так. Но это не единственный вариант.

Visual Basic
1
2
3
4
5
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Target.Column = 2 And Target.Row <= 10 Then
         MsgBox Target.Address
   End If
End Sub



1



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

26.01.2016, 22:37

17

Лучше использовать пересечение диапазонов как выше написал Аксима.
И ещё нужно учитывать, что часто изменяются сразу одновременно много ячеек — что будете делать в этом случае?



1



13 / 13 / 0

Регистрация: 24.10.2015

Сообщений: 267

26.01.2016, 22:41

 [ТС]

18

Цитата
Сообщение от SoftIce
Посмотреть сообщение

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
* *If Target.Column = 2 And Target.Row <= 10 Then
* * * * *MsgBox Target.Address
* *End If
End Sub

Понятно… А что если в условии привычные нам i или j?

Добавлено через 3 минуты

Цитата
Сообщение от Hugo121
Посмотреть сообщение

И ещё нужно учитывать, что часто изменяются сразу одновременно много ячеек — что будете делать в этом случае?

Я уже понял, что Target нужно использовать для сокращения так сказать поля зрения процедуры. Скорее всего это единственное ее назначение. Если например пользователю открыт один столбец для внесения изменений, то вообще Target можно не использовать. Так?



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

26.01.2016, 22:44

19

В столбце бывает миллион ячеек… Конечно если не важно какая изменилась — можно не использовать.
И можно не использовать если открыта только одна ячейка листа — но всё равно как параметр эта переменная должна быть, выше ведь уже говорили.



0



es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

26.01.2016, 22:46

20

Цитата
Сообщение от Hugo121
Посмотреть сообщение

Лучше использовать пересечение диапазонов как выше написал Аксима.

Согласен , я старался сделать пример попроще для понимания.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

26.01.2016, 22:46

20

Понравилась статья? Поделить с друзьями:
  • Synonyms of word eat
  • Target offset vba excel
  • Synonyms of word design
  • Synonyms of word delight
  • Sign language for the word more