Получить текущую ячейку в Excel VB - PullRequest
20 голосов
/ 04 февраля 2010

У меня есть небольшой скрипт в Excel / VB, который я пытаюсь заставить работать. Все, что я хочу сделать, это выбрать динамический диапазон данных для копирования, но я не могу найти какую-либо справку / код о том, как получить данные сетки (например, A11).

Вот код, который я имею из записи макроса, который выбирает диапазон данных:

Range("D291:D380").Select

Я надеялся, что смогу просто сделать Range(Current).Select или еще что-нибудь, но это не сработает.

Любая помощь приветствуется.

Ответы [ 6 ]

25 голосов
/ 04 февраля 2010

Вы пробовали:

Для одной ячейки:

ActiveCell.Select

Для нескольких выбранных ячеек:

Selection.Range

Например:

Dim rng As Range
Set rng = Range(Selection.Address)
2 голосов
/ 05 февраля 2010

Ключевое слово " Selection " уже является объектом диапазона vba, поэтому вы можете использовать его напрямую, и вам не нужно выделять ячейки для копирования, например, вы можете быть на Sheet1 и выполнять эти команды :

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

Привет

Thomas

2 голосов
/ 05 февраля 2010

Это может не помочь ответить на ваш вопрос напрямую, но я нашел что-то полезное при попытке работать с динамическими диапазонами, которые могут вам помочь.

Предположим, что в вашем рабочем листе есть цифры от 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 и обнаружил, что он наиболее полезен при работе с диапазонами размера dynmacial. Кроме того, он избегает необходимости жесткого кодирования диапазонов в вашем коде.

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

2 голосов
/ 05 февраля 2010

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

Range(firstcol & firstrow & ":" & secondcol & secondrow).Select
1 голос
/ 21 февраля 2017

Попробуйте это

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 :)
0 голосов
/ 29 января 2018

Я понимаю, что это не относится напрямую к названию вопроса, однако некоторые способы работы с диапазоном переменных могут заключаться в выборе диапазона при каждом запуске кода, особенно если вы заинтересованы в выбранном пользователем спектр. Если вы заинтересованы в этой опции, вы можете использовать Application.InputBox (официальная страница документации здесь ). Одной из необязательных переменных является тип. Если тип установлен равным 8, InputBox также имеет опцию выбора диапазона в стиле Excel. Пример того, как использовать его в коде:

Dim rng as Range
Set rng = Application.InputBox(Prompt:= "Please select a range", Type:=8)

Примечание:

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

Dim str as String
str = Application.InputBox(Prompt:= "Please select a range", Type:=8)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...