Беговые листы VBA - PullRequest
       1

Беговые листы VBA

0 голосов
/ 13 октября 2019

Я создал много листов (около 30) в одной книге. Я пытаюсь запрограммировать с VBA, где значение будет отображаться в указанной ячейке кратных всем по одному, но есть проблема "Ошибка времени выполнения 9, нижний индекс вне диапазона".

Sub Invoice()
     For i = 5 To 11
       With Sheets("Sheet" & i)
           .Range("J2") = "a"

       End With
      Next i

End Sub

Как показано в коде, значение «а» должно появляться в ячейке J2 на каждом листе от листа 5 до листа 11. Видимо, что-то есть, но я просто не знаю, что пошло не так?

Ниже я попытался провести тестирование только с 3 листами, но все равно выдает ту же ошибку. Как вы видите на картинке, что название каждого листа написано правильно? Я пытался переписать имена, но это также не работает ...

enter image description here

Ответы [ 2 ]

2 голосов
/ 13 октября 2019

Судя по картинке, которую вы добавили в свое сообщение, вы хотите сослаться на кодовое имя листа, а не на имя листа.

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

Sub Invoice()

    Dim wks As Worksheet
    Dim i As Long

    For Each wks In ThisWorkbook.Worksheets
        For i = 5 To 11
            If wks.CodeName = "Sheet" & i Then
                wks.Range("J2") = "c"
            End If
        Next i
    Next wks

End Sub

В качестве дополнения примечание Ошибка времени выполнения 9 Подстрочный индексдиапазона при использовании рабочих таблиц в таких случаях всегда вызвано одной из следующих причин:

  • Имя рабочего листа, присвоенное рабочим листам, написано неправильно.
  • Имя рабочего листа имеетизменено.
  • Рабочий лист был удален.
  • Индекс был слишком большим, например, Вы использовали Рабочие таблицы (5), но имеется только четыре рабочих листа
  • Используется неправильная рабочая книга, напримерРабочие книги («book1.xlsx»). Рабочие листы («Sheet1») вместо
    Рабочие книги («book3.xlsx»). Рабочие листы («Sheet1»).
0 голосов
/ 13 октября 2019

«Ошибка времени выполнения 9, индекс вне диапазона» в этом контексте означает, что вы пытались получить доступ к элементу в коллекции (коллекции WorkSheets), указав несуществующий индекс.

* Sheets(index) accessor принимает 2 типа индексов:

  1. Число, соответствующее порядку их появления в вашей рабочей книге (на основе 1), или
  2. строка, соответствующая точному названиюрабочий лист. Итак, чтобы избежать ошибки 9, убедитесь, что вы указали правильное значение индекса, передавая число:
Private Sub Invoice()
    For i = 5 To 11
        Sheets(i).Range("J2") = "a"
    Next i
End Sub

или указав точно имена рабочих листов, которые вы хотите применитьизменяется на.

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