[/vba] есть ячейка со 2-ой строкой и 3-м столбцом, НО при условии, что вместо первой ячейки "A1", ячейка "F4", т.е. здесь Range("F4") - это начало новой системы координат.
пример: [vba]
Code
Range("F10").Range("B4").Select
[/vba]
с рэнджем (сэллсом) вообще все не тривиально...
мне кажется с концепции событий изучать язык не совсем правильно - это Вадим тебе.
чтобы прочувствовать ситуацию, вставь этот обработчик и измени какую-нибудь ячейку (подальше от A1): [vba]
Code
Option Explicit Dim bNotFirst As Boolean
Private Sub Worksheet_Change(ByVal Target As Range) If Not bNotFirst Then Application.EnableEvents = False Cells.Clear Application.EnableEvents = True bNotFirst = True End If
If Target.Count > 1 Then Exit Sub
Static n As Integer
n = n + 1 Application.Wait Now + TimeSerial(0, 0, 1) Application.StatusBar = "Событие инициировано " & n & "-ый раз" 'If n = 100 Then End
On Error GoTo errHandle Randomize Dim r As Integer, c As Integer r = CInt(Rnd * 10 - 5) c = CInt(Rnd * 10 - 5)
Dim col As Integer: col = 256 - 3 * n If col < 0 Then End Target.Interior.Color = RGB(col, col, col)
With Target.Item(r, c) .Select .Value = n & " (" & r & ", " & c & ")" End With
errHandle: MsgBox "Попытка прыгнуть из ячейки " & Target.Address(0, 0) & _ " в ячейку (" & r & ", " & c & ")" End End Sub
[/vba]
эта строка [vba]
Code
Range("F4")(2,3)
[/vba] ≡[vba]
Code
Range("F4").Item(2,3)
[/vba] есть ячейка со 2-ой строкой и 3-м столбцом, НО при условии, что вместо первой ячейки "A1", ячейка "F4", т.е. здесь Range("F4") - это начало новой системы координат.
пример: [vba]
Code
Range("F10").Range("B4").Select
[/vba]
с рэнджем (сэллсом) вообще все не тривиально...
мне кажется с концепции событий изучать язык не совсем правильно - это Вадим тебе.
чтобы прочувствовать ситуацию, вставь этот обработчик и измени какую-нибудь ячейку (подальше от A1): [vba]
Code
Option Explicit Dim bNotFirst As Boolean
Private Sub Worksheet_Change(ByVal Target As Range) If Not bNotFirst Then Application.EnableEvents = False Cells.Clear Application.EnableEvents = True bNotFirst = True End If
If Target.Count > 1 Then Exit Sub
Static n As Integer
n = n + 1 Application.Wait Now + TimeSerial(0, 0, 1) Application.StatusBar = "Событие инициировано " & n & "-ый раз" 'If n = 100 Then End
On Error GoTo errHandle Randomize Dim r As Integer, c As Integer r = CInt(Rnd * 10 - 5) c = CInt(Rnd * 10 - 5)
Dim col As Integer: col = 256 - 3 * n If col < 0 Then End Target.Interior.Color = RGB(col, col, col)
With Target.Item(r, c) .Select .Value = n & " (" & r & ", " & c & ")" End With
errHandle: MsgBox "Попытка прыгнуть из ячейки " & Target.Address(0, 0) & _ " в ячейку (" & r & ", " & c & ")" End End Sub
мне кажется с концепции событий изучать язык не совсем правильно
Саш, да я не изучаю. Просто я понял, что используя макрорекордер проще вникнуть или дописать макрос Например, тот код, с которого я начал эту тему изначально выглядел так: [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A1:A100")) Is Nothing Then With Target(1, 5) .Value = Now .EntireColumn.AutoFit End With End If End Sub
[/vba] Я чуток поковырялся и налепил своих хотелок. А про те строки, что мне были не понятны, решил получить разъяснения тут. Пусть со скрипом, но что-то уже начало проясняться. За это всем спасибо
Quote (Саня)
мне кажется с концепции событий изучать язык не совсем правильно
Саш, да я не изучаю. Просто я понял, что используя макрорекордер проще вникнуть или дописать макрос Например, тот код, с которого я начал эту тему изначально выглядел так: [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A1:A100")) Is Nothing Then With Target(1, 5) .Value = Now .EntireColumn.AutoFit End With End If End Sub
[/vba] Я чуток поковырялся и налепил своих хотелок. А про те строки, что мне были не понятны, решил получить разъяснения тут. Пусть со скрипом, но что-то уже начало проясняться. За это всем спасибо light26
очень смутно представил себе принцип работы этого кода. некоторые строки отлично понял как работают, некоторые не понял совсем. но что самое хреновое - не понял смысла этого кода
Quote (Саня)
чтобы прочувствовать ситуацию
очень смутно представил себе принцип работы этого кода. некоторые строки отлично понял как работают, некоторые не понял совсем. но что самое хреновое - не понял смысла этого кода light26
то-есть строка With Target(1, 6) подразумевает, что все записи ниже будут относиться к шестому столбцу, то-есть к столбцу F. до тех пор, пока выполнение процедуры не дойдет до End With. А каждая новая строка должна начинаться с точки. Я правильно понял?
Тут один из моих постов без ответа остался. Видать затерялся в куче сообщений
то-есть строка With Target(1, 6) подразумевает, что все записи ниже будут относиться к шестому столбцу, то-есть к столбцу F. до тех пор, пока выполнение процедуры не дойдет до End With. А каждая новая строка должна начинаться с точки. Я правильно понял?
смысл в том, что изменение одной ячейки приводит к потоку событий - часть кода обработчика события инициирует самое (вроде это слово так пишется ) себя, получается бесконечный цикл
смысл в том, что изменение одной ячейки приводит к потоку событий - часть кода обработчика события инициирует самое (вроде это слово так пишется ) себя, получается бесконечный циклСаня
Тут один из моих постов без ответа остался. Видать затерялся в куче сообщений smile Цитата, light26 писал(а): Цитата, shanemac51 писал(а): 'Columns("f:f") '''не нужна
то-есть строка With Target(1, 6) подразумевает, что все записи ниже будут относиться к шестому столбцу, то-есть к столбцу F. до тех пор, пока выполнение процедуры не дойдет до End With. А каждая новая строка должна начинаться с точки. Я правильно понял?
[vba]
Code
with a .metod1 .metod2 .metod3 b=.svoystvo1 end with
[/vba] равно [vba]
Code
a.metod1 a.metod2 a.metod3 b=a.svoystvo1
[/vba]
ничего более
Quote (light26)
Тут один из моих постов без ответа остался. Видать затерялся в куче сообщений smile Цитата, light26 писал(а): Цитата, shanemac51 писал(а): 'Columns("f:f") '''не нужна
то-есть строка With Target(1, 6) подразумевает, что все записи ниже будут относиться к шестому столбцу, то-есть к столбцу F. до тех пор, пока выполнение процедуры не дойдет до End With. А каждая новая строка должна начинаться с точки. Я правильно понял?
[vba]
Code
with a .metod1 .metod2 .metod3 b=.svoystvo1 end with
Саш, у массива/словаря/коллекции тоже есть свойства Item А попробуй-ка ты обратись к Item, номер которого больше чем есть в объекте? Ошибочка будет! Что в общем-то вполне логично. Вот и с диапазоном, я был уверен и даже проверять не стал пока здесь не наткнулся... Если задаётся Range("A1:B2"), то это должно быть как массив 2х2 ячейки. И обращение к элементу за пределами объекта должно было вызвать ошибку!
Саш, у массива/словаря/коллекции тоже есть свойства Item А попробуй-ка ты обратись к Item, номер которого больше чем есть в объекте? Ошибочка будет! Что в общем-то вполне логично. Вот и с диапазоном, я был уверен и даже проверять не стал пока здесь не наткнулся... Если задаётся Range("A1:B2"), то это должно быть как массив 2х2 ячейки. И обращение к элементу за пределами объекта должно было вызвать ошибку!Alex_ST