Ініціалізація змінних


0

Я працюю над проектом, який передбачає використання Excel VBA. На жаль, я новачок у VBA, і я думаю, що закінчився плутати себе під час кодування. Ось файл, з яким я працюю.

Коли я намагався випробувати форму, у ній з’являється вікно із повідомленням

Run-time error '9': Subscript out of range

І коли я натискаю "Налагодити", він виділив рядок

If wantsBYO = Worksheets("Sheet2").Cells(x + 1, 8) Or wantsBYO = "Unsure" Then

Я здогадуюсь це тому, що я зробив щось не так із ініціалізацією змінної, але не знаю, як це виправити. Будь ласка, дайте мені знати, як це зробити.


2
Перевірте значення х, коли воно потрапить до рядка.
jcbermu

@jcbermu - Є 52 рядки. Мені потрібно лише рядки 2 - 52, і індекс працює від 1 до 51, тому я зробив це x + 1 замість x. Це неправильно?
2012ssohn

Відповіді:


1

Ви перейменували всі робочі таблиці у своїй робочій книжці на щось інше, ніж "Лист2", так

Worksheets("Sheet2")

Це призведе до помилки. Змініть "Sheet2" на будь-яке ім'я робочого листа, яке вам потрібно у своєму коді, і воно не повинно давати цю помилку.


0

Є дві основні можливі причини відмови:

  • Робочого листа з назвою "Sheet2" не існує
  • x < 0або x > 1,048,575(або 65 555, якщо ви працюєте зі старшим файлом формату)

Швидше за все, проблема пов’язана з назвою вашого аркуша, як уже згадувалося @CoRrRan. Взагалі я намагаюся використовувати CodeName робочих таблиць замість їх Імені. CodeName - це те, що відображається в Project Viewer в редакторі VBA (структура дерева, що показує всі об'єкти в проекті, які за замовчуванням стикуються в лівій частині екрана). CodeName, ймовірно, не буде змінено типовим користувачем і, отже, є більш надійним. Насправді робочий аркуш, швидше за все, ще називається Sheet2 як CodeName. У цьому випадку ви зміните рядок на:

If wantsBYO = Sheet2.Cells(x + 1, 8) Or wantsBYO = "Unsure" The
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.