В чем разница между кодом VBA wb.Sheets(1).Cells.Select
и wb.Sheets(1).Activate
?
Excel Select vs Активировать
Ответ 1
Разница между выбором заключается в том, что вы можете сразу выбрать несколько объектов. Выбранные объекты также помещаются в объект Selection, в который вы можете использовать методы. Если вы не выбираете несколько объектов, выбор (например, ячейки) активирует объект.
Активировать просто делает объект активным. Лучший способ подумать об этом - "можно выбрать многие ячейки, но только одна из них может быть активной ячейкой в любой момент времени.
Примечание. У них обоих есть одна общая черта - они редко когда-либо нужны, и обычно они ничего не делают, кроме как замедляют ваш код. Вы можете работать непосредственно с объектом, не выбирая или не активируя его, и лучше всего использовать их, если это необходимо.
Ответ 2
Вот объяснение из MSDN
В первом примере wb.Sheets(1).Cells.Select
вы можете выбрать несколько ячеек
Второй wb.Sheets(1).Activate
делает лист активным.
В Excel VBA есть много ресурсов для помощи.
http://www.excel-vba.com/index.htm#Tutorial%20on%20Excel%20Macros
Ответ 3
Первый выбирает все ячейки на первом листе книги wb. Он не сработает, если лист не активен.
Второй просто активирует первый лист книги wb. Он не изменяет выбор или activecell на этом листе, и в некоторых случаях может не быть выбранного диапазона или activecell (например, если есть объект на выбранном в данный момент листе).
Ответ 4
Select
- "Выбирает" ячейку
Activate
- "Активирует" лист (вроде как говорить, чтобы сосредоточиться на листе)
Иногда вам нужно специально Activate
листа, чтобы сделать Select
Ответ 5
Я нашел этот вопрос во время поиска, у меня был тот же вопрос. Вот что я заметил:
Sub Transfer(x As Long)
Dim Rng, ID as Range
Dim i, j, n As Long
Worksheets(5).Activate
n = Worksheets(5).Range(Range("I88"), Range("I88").End(xlToRight)).Count
Worksheets(x).Select
Set Rng = Worksheets(3).UsedRange.Find("Element", LookIn:=xlValues).Offset(1, 1)
Set ElemID = Range(ElemRng.Offset(0, -1), ElemRng.Offset(0, -1).End(xlDown))
Set ElemRng = Worksheets(3).Range(ElemRng, ElemRng.End(xlToRight))
End Sub
Я обнаружил, что я должен положить рабочий лист. активировать (или выбрать) или код будет запущен:
Ошибка времени выполнения: '1004' Определенная пользователем или объектная ошибка
Ответ 6
Активация часто используется для листов для примера. Активный лист будет отображаться на экране... поэтому может быть только один активный лист
Выберите, хотя он может использоваться для нескольких ячеек для примера. Диапазон (A1: B3).Выбор выберет несколько ячеек, которые не могут быть активированы