Excel Выберите против Активировать - PullRequest
24 голосов
/ 24 августа 2011

В чем разница между кодом VBA wb.Sheets(1).Cells.Select и wb.Sheets(1).Activate?

Ответы [ 6 ]

43 голосов
/ 25 августа 2011

Разница между выбором заключается в том, что вы можете выбрать несколько объектов одновременно. Выбранные объекты также помещаются в объект Selection, для которого можно использовать методы. Если вы не выбираете несколько объектов, выбор (скажем, ячейки) активирует объект.

Активировать просто делает объект активным объектом. Лучший способ думать об этом - "можно выбрать много ячеек, но только одна может быть активной ячейкой в ​​любой момент времени ."

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

8 голосов
/ 24 августа 2011

Вот объяснение от MSDN

Ваш первый пример wb.Sheets(1).Cells.Select позволяет выбрать несколько ячеек

Второй wb.Sheets(1).Activate делает лист активным.

Существует множество ресурсов, которые помогут с Excel VBA.

http://www.excel -vba.com / index.htm # Учебник% 20on% 20Excel% 20Macros

http://www.excel -vba-easy.com /

http://www.functionx.com/vbaexcel/

6 голосов
/ 24 августа 2011

Первый выбирает все ячейки на первом листе wb рабочей книги.Он потерпит неудачу, если лист не активен.

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

1 голос
/ 20 декабря 2017

Я нашел этот вопрос во время поиска, у меня был тот же вопрос. Вот что я заметил:

 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

Я обнаружил, что я ХАД , чтобы поместить worksheet.activate (или выбрать), или код будет сталкиваться с:


Ошибка времени выполнения: «1004» Ошибка приложения или объекта


1 голос
/ 25 августа 2011

Select - «Выбирает» ячейки (я)

Activate - «Активирует» лист (вроде как сказать, чтобы сфокусироваться на листе)

Иногда вам нужнов частности ACTIVATE лист, чтобы сделать SELECT

0 голосов
/ 20 октября 2015

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

Выберите, хотя это может быть использовано для нескольких ячеек, например. Диапазон (A1: B3). Выберите, чтобы выбрать несколько ячеек, что невозможно при активации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...