Return to VBA Code Examples
This article will demonstrate the use of VBA Target.Address.
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.
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.
Событие 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
Пример разработчика
Замечательный пример дан на сайте разработчика:
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 сработает.
Automatically Run Excel Macros When a Cell Changes
VBA Change to a Single Cell
In Excel a Worksheet Change Event is a trigger for a macro when a cell or group of cells change. I will start out by showing how a change to a single cell can trigger an action. The following will colour cell B2 Red whenever the cell changes. The following uses the(ByVal Target As Range) line which uses the Variable named Target. The Target is the Range which will trigger an action. You assign the Range within the code itself.
The following YouTube video takes you the cell change event, both a single cell and multiple cells. The following Excel file goes with the video.
Change Cell.xlsm
Before you fill your boots with the following it is worth mentioning that when you employ the use of the VBA change events you lose the ability to undo in Excel. Normally Excel keeps a record of a number of actions.
The VBA code to perform this action needs to go in the sheet object you want to perform the event. If you wanted to put the code in Sheet1 then you would double click on the sheet you wish to run the code from.
The following is an example of Excel VBA coding you could put in Sheet1 or any of the other sheet objects.
In the example above you need to keep the $ (absolute sign) or the code will not work. So when referencing a single cell the range reference needs to be absolute.
«$B$2”
The following VBA performs the same action as the above example. It is a little more flexible if you wish to add to the range. Once Inside the Worksheet Change Event, if the Target falls within the defined Range and the cell contents change, it will trigger an action inside VBA.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range) ‘Excel VBA with more cells in the range.
If Not Intersect(Target, Range(«B2»)) Is Nothing Then
Target.EntireRow.Interior.ColorIndex=15
End If
End Sub
Disable Events
Occasionally one of the things you may wish to do with the cell that is changing is delete, copy, cut or some other action which triggers a circular loop. For example, if you wanted to move a line to another sheet which met a condition, when the condition was met you would trigger the Change Event and when you deleted the row you would start another change event. This second change event would cause a debug error. To get around this you can turn Events off at the start of the procedure and turn them back on at the end of the procedure.
The line of code is;
Application.EnableEvents=False
and the following is an example of how it might be used.
Private Sub Worksheet_Change(ByVal Target As Range) ‘Excel VBA change event test for close.
If Not Intersect(Target, Range(«A2», Range(«A» & Rows.Count).End(xlUp))) Is Nothing Then
Application.EnableEvents=False
If Target=»Closed» Then
Target.EntireRow.Copy Sheet2.Range(«A1»).End(xlDown)(2)
Target.EntireRow.Delete
End If
End If
Application.EnableEvents=True
End Sub
The VBA macro will copy the entire row from one sheet to another and delete the row which was just copied. The example is shown in the file below.
VBA Worksheet Change Event Multiple Cells
When we want to perform an action when more than one cell is changed we can use the following VBA code to change a larger range. It focuses on shifting the range within the Target. The following is an example of a change event where if the cells from A2:A10 change the procedure will trigger an action.
Option Explicit ‘Excel worksheet change event Range A1 to A10
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range(«A2:A10»)) Is Nothing Then
Target.EntireRow.Interior.ColorIndex=15
End If
End Sub
VBA Double Click Event
A double click event in Excel VBA is self explanatory. It will occur on double click of a cell in the Target range. So if you have a range between C13 and O26 where you want to perform an action on Double click, the following should help.
‘Excel worksheet double click change event Range C13 to O26
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range(«C13:O26»)) Is Nothing Then
Target.Value=ActiveCell.Offset(19, 0).Value
End If
End Sub
VBA Before Save Event
This event is triggered as the name suggests before each Save. So as the save Excel file icon is clicked the code which is associated with this event will trigger.
The before Save event needs to go into the ThisWorkbook Object in order for it to run.
The following Excel VBA macro will put the word False in Cell A1 before the file is saved.
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheet1.Cells(1, 1)=False
End Sub
13 / 13 / 0 Регистрация: 24.10.2015 Сообщений: 267 |
|
1 |
|
объясните самоучке26.01.2016, 20:52. Показов 23188. Ответов 28
Люди добрые, подскажите плиз как обращаться с этим зверем: «Private Sub Worksheet_Change(ByVal Target As Range)»
0 |
es geht mir gut 11264 / 4746 / 1183 Регистрация: 27.07.2011 Сообщений: 11,437 |
|
26.01.2016, 20:57 |
2 |
Но я понять не могу как обозначить Target Что значит «обозначить» ?
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
26.01.2016, 21:00 |
3 |
|||
teplovdl, сделайте поиск по этому разделу по фразе Worksheet_Change — примеров полно.
Код необходимо вставить в модуль листа (правый клик по ярлычку листа — Исходный текст).
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 |
|||
чтобы процедура срабатывала для ячеек определенного столбца …можно написать так:
В обработчик события 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 |
Заблокирован |
|
26.01.2016, 21:40 |
7 |
в качестве Target нужно всегда диапазон указывать? Ничего не надо указывать — он уже указан Excel`ем. Пример Казанского выдал адрес измененного диапазона, пример Аксимы — адрес ячеек, измененных в столбце [B:B].
0 |
13 / 13 / 0 Регистрация: 24.10.2015 Сообщений: 267 |
|
26.01.2016, 21:43 [ТС] |
8 |
Ничего не надо указывать зачем тогда в теле процедуры нужно обязательно писать Target иначе она и работать не будет.
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
26.01.2016, 22:00 |
9 |
зачем тогда в теле процедуры нужно обязательно писать Target Можете не писать
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
26.01.2016, 22:07 |
10 |
|||
зачем тогда в теле процедуры нужно обязательно писать Target В теле процедуры Вы можете не использовать Target. Например, по событию изменения листа Вы хотите просто увеличить какую-то переменную на 1.
, но «ByVal» и «As Range» должно присутствовать обязательно, т.к. диспетчер событий приложения вызывает процедуру в расчете на такой способ передачи и тип аргумента.
1 |
13 / 13 / 0 Регистрация: 24.10.2015 Сообщений: 267 |
|
26.01.2016, 22:12 [ТС] |
11 |
Но в чём тогда смысл кода? Просто сообщить что что-то на листе изменилось? Тоже вариант… хотя обычно это и так изменившему известно. Я понимаю ваше юмористическое настроение. Попробовал бы я объяснять ребенку зачем яблоко кусать, ведь можно просто глотать…
0 |
es geht mir gut 11264 / 4746 / 1183 Регистрация: 27.07.2011 Сообщений: 11,437 |
|
26.01.2016, 22:15 |
12 |
А тут нет,нужно 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 |
|||
Не обязательно впихивать
3 |
13 / 13 / 0 Регистрация: 24.10.2015 Сообщений: 267 |
|
26.01.2016, 22:23 [ТС] |
15 |
Visual Basic Т.е. если я хочу, чтобы процедура сработала для столбца 2 при изменении строк с 1 по 10, то я просто вместо (ByVal vasya As Range) пишу (ByVal i As Range), а потом в цикле указываю For i=1 to 10? Добавлено через 4 минуты
Private Sub Worksheet_Change(ByVal Target As Range) Извиняюсь, пишем друг другу одновременно, поэтому мои глупые вопросы отстают от Ваших пояснений. Но вообще становится уже понятнее. Хотя где то читал, что 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 |
|||
что target нужно обязательно указывать target или vasya Вам нужны.
Т.е. если я хочу, чтобы процедура сработала для столбца 2 при изменении строк с 1 по 10, то я просто вместо (ByVal vasya As Range) пишу (ByVal i As Range), а потом в цикле указываю For i=1 to 10? Можно сделать, например так. Но это не единственный вариант.
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 |
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Понятно… А что если в условии привычные нам i или j? Добавлено через 3 минуты
И ещё нужно учитывать, что часто изменяются сразу одновременно много ячеек — что будете делать в этом случае? Я уже понял, что 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 |
Лучше использовать пересечение диапазонов как выше написал Аксима. Согласен , я старался сделать пример попроще для понимания.
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
26.01.2016, 22:46 |
20 |