Миф excel как сделать ячейку активной

Здравствуйте. Googl меня не понимает, может вы подскажите?

Есть форма календарь, которая запускается кнопкой.

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

Можно в продцедуре календаря изменить

ActiveCell.Value = Calendar1.Value

например на

 = Calendar1.Value

но на листе несколько ячеек, в которые нужно вставлять разные даты.

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

Отображение формы запускается так

Private Sub CommandButton1_Click()
    frmCalendar.Show
End Sub

в этот макрос нужно добавить строку, которая будет активировать нужную ячейку.

Обращение к ячейке на листе Excel из кода VBA. Запись информации в ячейку. Чтение информации из ячейки. Очистка значения ячейки. Метод ClearContents объекта Range.

  1. Обращение к ячейке
  2. Запись информации в ячейку
  3. Чтение информации из ячейки
  4. Очистка значения ячейки

Обращение к ячейке

Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.

В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга1» прописывается полный путь:

  Workbooks("Книга2.xlsm").Sheets("Лист2").Range("C5")  Workbooks("Книга2.xlsm").Sheets("Лист2").Cells(5, 3)  

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

Теперь предположим, что  у нас в активной книге «Книга1» активны «Лист1» и ячейка на нем «A1». Тогда обращение к ячейке «A1» можно записать следующим образом:

  ActiveCell  Range("A1")  Cells(1, 1)  

Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере — это ячейка «A1».

Если мы обращаемся к ячейке на неактивном листе активной рабочей книги, тогда необходимо указать этот лист:

  Sheets("Лист3").Cells(2, 8)  

Кроме того к ячейке на рабочем листе можно обращаться по ее индексу (порядковому номеру), который считается по расположению ячейки на листе слева-направо и сверху-вниз. Например, индекс ячеек в первой строке равен номеру столбца. Индекс ячеек во второй строке равен количеству ячеек в первой строке (которое равно общему количеству столбцов на листе — зависит от версии Excel) плюс номер столбца. Индекс ячеек в третьей строке равен количеству ячеек в двух первых строках плюс номер столбца. И так далее. Для примера, Cells(4) та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel может быть разным количество столбцов и строк на рабочем листе.

Запись информации в ячейку

Содержание ячейки определяется ее свойством — «Value», которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания «=»:

  Cells(2, 4).Value = 15  Cells(2, 4) = 15  Range("A1") = "Этот текст записываем в ячейку"  ActiveCell = 28 + 10*36  

Вместе с числами и текстом можно использовать переменные. Примеры здесь и ниже приведены для активного листа. Для неактивных листов дополнительно необходимо указывать имя листа, как в разделе «Обращение к ячейке».

Чтение информации из ячейки

Считать информацию из ячейки в переменную можно также при помощи оператора присваивания «=»:

  Sub Test()  Dim a1 As Integer, a2 As Integer, a3 As Integer  Range("A3") = 6  Cells(2, 5) = 15  a1 = Range("A3")  a2 = Cells(2, 5)  a3 = a1 * a2  MsgBox a3  End Sub  

Точно также можно обмениваться информацией между ячейками:

  Cells(2, 2) = Range("A4")  

Очистка значения ячейки

Очищается ячейка от значения с помощью метода ClearContents. Кроме того, можно присвоить ячейке значение нуля или пустой строки:

  Cells(10, 2).ClearContents  Range("D23") = 0  ActiveCell = ""