Ответ 1
Вы пробовали:
Для одной ячейки:
ActiveCell.Select
Для нескольких выбранных ячеек:
Selection.Range
Например:
Dim rng As Range
Set rng = Range(Selection.Address)
У меня есть небольшой script в Excel/VB, который я пытаюсь получить. Все, что я хочу сделать, это выбрать динамический диапазон данных для копирования, но я не могу найти какую-либо помощь/код о том, как получить данные сетки (например, A11).
Вот код, который у меня есть из макрозаписей, который выбирает диапазон данных:
Range("D291:D380").Select
Я надеялся, что могу просто сделать Range(Current).Select
или что-то, но это не сработает.
Любая помощь приветствуется.
Вы пробовали:
Для одной ячейки:
ActiveCell.Select
Для нескольких выбранных ячеек:
Selection.Range
Например:
Dim rng As Range
Set rng = Range(Selection.Address)
Если вы пытаетесь захватить диапазон с динамически сгенерированной строкой, вам просто нужно построить строку следующим образом:
Range(firstcol & firstrow & ":" & secondcol & secondrow).Select
Это может не помочь ответить на ваш вопрос напрямую, но это то, что я нашел полезным при попытке работать с динамическими диапазонами, которые могут вам помочь.
Предположим, что на вашем листе у вас есть номера от 100 до 108 в ячейках A1: C3:
A B C
1 100 101 102
2 103 104 105
3 106 107 108
Затем, чтобы выбрать все ячейки, вы можете использовать свойство CurrentRegion
:
Sub SelectRange()
Dim dynamicRange As Range
Set dynamicRange = Range("A1").CurrentRegion
End Sub
Преимущество этого заключается в том, что если вы добавите новые строки или столбцы в свой блок чисел (например, 109, 110, 111), то CurrentRegion всегда будет ссылаться на увеличенный диапазон (в данном случае A1: C4).
Я использовал CurrentRegion совсем немного в своем коде VBA и считаю, что он наиболее полезен при работе с диапазонами с динамическим размером. Также он избегает наличия жестких кодовых диапазонов в вашем коде.
Как последнее замечание, в моем коде вы увидите, что я использовал A1 в качестве эталонной ячейки для CurrentRegion. Он также будет работать независимо от того, какую ячейку вы ссылаетесь (попробуйте: вместо А1 заменить B2). Причина заключается в том, что CurrentRegion будут выбраны все смежные ячейки на основе эталонной ячейки.
Ключевое слово " Выбор" уже является объектом диапазона VBA, поэтому вы можете использовать его напрямую, и вам не нужно выбирать ячейки для копирования, например, вы можете быть на Листе 1 и выпускать эти команды:
ThisWorkbook.worksheets("sheet2").Range("namedRange_or_address").Copy
ThisWorkbook.worksheets("sheet1").Range("namedRange_or_address").Paste
Если это множественный выбор, вы должны использовать объект Area в цикле for:
Dim a as Range
For Each a in ActiveSheet.Selection.Areas
a.Copy
ThisWorkbook.worksheets("sheet2").Range("A1").Paste
Next
Привет
Томас
Попробуйте это
Dim app As Excel.Application = Nothing
Dim Active_Cell As Excel.Range = Nothing
Try
app = CType(Marshal.GetActiveObject("Excel.Application"), Excel.Application)
Active_Cell = app.ActiveCell
Catch ex As Exception
MsgBox(ex.Message)
Exit Sub
End Try
' .address will return the cell reference :)