Excel Получить Список Листов в Книге Excel Vba • Sheets cells

Объявление переменной рабочей книги/Рабочего листа vba

Я знаю, что это может возникнуть как тривиальный вопрос, но я не могу объявить workbook или worksheet как переменную в VBA . У меня есть следующий код, но я не могу понять, что я делаю неправильно, это должно быть прямо. Обычно у меня нет проблем с объявлением переменных, таких как Dim i As Integer и т.д.

Когда я запускаю вышеуказанный код, я получаю ошибку type missmatch .

ОТВЕТЫ

Ответ 1

Используйте Листы, а не Лист и последовательно активируйте их:

Ответ 2

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

Вы можете установить кодовое имя на все, что вам нужно (до тех пор, пока оно является действительным идентификатором VBA), независимо от его «имени вкладки» (которое пользователь может изменить в любое время), изменив свойство (Name) в Окно свойств (F4):

Sheet1 properties

Свойство Name ссылается на «имя вкладки», которое пользователь может изменить по прихоти; свойство (Name) относится к кодовому имени рабочего листа, и пользователь не может его изменить, не обращаясь к редактору Visual Basic.

VBA использует это кодовое имя для автоматического объявления объектной переменной global-scope Worksheet , которую ваш код будет использовать в любом месте, чтобы ссылаться на этот лист, бесплатно.

Другими словами, если лист существует в ThisWorkbook во время компиляции, нет необходимости объявлять для него переменную — переменная уже существует!

Если рабочий лист создается во время выполнения (внутри ThisWorkbook или нет), вам необходимо объявить и назначить для него переменную Worksheet .

Используйте свойство Worksheets объекта Workbook для его получения:

Важные примечания.

Использование коллекции Sheets содержит объекты Worksheet , но также может содержать экземпляры Chart и полдюжины более старых типов листов, которые не являются листами. Присвоение ссылки Worksheet из любого Sheets(nameOrIndex) возвращает, рискует выбросить ошибку времени несовпадения типа по этой причине.

Не квалифицировать коллекцию Worksheets — это неявная ссылка ActiveWorkbook, то есть коллекция Worksheets вытягивается из любой рабочей книги, которая активна в момент выполнения команды. Такие неявные ссылки делают код слабым и подверженным ошибкам, особенно если пользователь может перемещаться и взаимодействовать с пользовательским интерфейсом Excel во время работы кода.

Если вы не хотите активировать определенный лист, вам не нужно вызывать ws.Activate , чтобы сделать 99% того, что вы хотите сделать с листом. Просто используйте вместо этого переменную ws .

Ответ 3

Третье решение: Я бы установил ws на лист книги wb , так как использование Sheet(«name») всегда относится к активной книге, которая может измениться по мере развития вашего кода.

Ответ 4

Попробуйте изменить имя переменной, поскольку иногда она сталкивается с другими модулями /subs

Ответ 5

У меня была такая же проблема. Я использовал Worksheet вместо Worksheets , и он был разрешен. Не уверен, какая разница между ними.

Ответ 6

при объявлении рабочего листа в качестве рабочего листа вместо ojbect У меня возникли проблемы с работой с OptionButtons (Active X) на этом листе (я думаю, это будет и с любым элементом Active-X. Когда объявлено как объект, все работает нормально.

Ответ 7

ваша первая (возможно, случайная) ошибка, так как мы все упомянули «Лист». должны быть «Листы»

Этот блок полезен, потому что если вы установите значение wb на что-либо, кроме текущей книги, оно правильно выполнит

Ответ 8

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

Удалите все остальное и наслаждайтесь. Но зачем выбирать лист? выбор листов теперь старомодный для расчета и манипуляции. Просто добавьте формулу, подобную этой

Ответ 9

пожалуйста помоги. У меня есть пользовательские формы в моих двух книгах. сделать передачу данных. но не позволяйте пользовательской форме на пути к месту. книга должна быть открытой или закрытой. как ты будешь благодарен

x.Sheets(«PERSONEL_KAYIT»). Диапазон («A» & listesatiripersonel, «N» & listesatiripersonel). Выберите Selection.Copy

[expert_bq id=»1570″]Проблема с формулой, которая говорит только о том, чтобы идти на n-й лист, это то, что если вы хотите добавить больше листов в свой файл excel, а первый горячий лист для применения вашего макроса больше не будет вашим 4-м или 5-м. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq] Ну вот, зная координаты теперь мы точно знаем какая ячейка у нас будет обрабатываться. Теперь можно написать макрос, который нам будет сообщать о том, в какой ячейке произошли изменения. Выглядеть это будет, например, так:
Нажмите, чтобы узнать подробности

Как сделать активной книгу excel vba?

Дополнительные сведения об инструкции If…Then см. в справочном руководстве по языку VBA. (Полное название раздела — «If…Then…Else statement» (Инструкция If…Then…Else), где Else — это необязательный компонент.)

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: