Excel VBA: копирование и замена листов CodeName завершается неудачно, -SScript вне диапазона - PullRequest
0 голосов
/ 14 апреля 2019

В моей превосходной рабочей книге у меня есть 4 листа с именами вкладок:
Лист1
Sheet2
Sheet3
RandomName

CodeNames для
Лист1 Тест1А
Лист2 Тест2А
Лист3 Тест3А
RandomName is Sheet4

Я хочу, чтобы произошло следующее:

1) Скопируйте все листы, если название вкладки содержит "Лист"

2A) Переименуйте все имена вкладок для скопированных листов, чтобы Sheet1 стал ShA1, копия Листа 2 становится ША2 и т. д.

2B) Также переименуйте все CodeNames для скопированных листов так, чтобы CodeName для ShA1 становится CName1A, ShA2 становится CName2A и т. Д.

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

ошибка времени выполнения 9: индекс ниже диапазона.

Что может быть не так?

Для "Изменение части CodeName" VBAcode, который я пробовал с этим, который генерирует ошибку:

ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).Name = Replace(ActiveSheet.Name, "?", "?")

"?" = Я пробовал здесь другое дело

Когда я проверил вышеуказанный код VBA для CodeName, я поместил его после «части sh.copy» кода (см. Код ниже).

Вот код, который работает для переименования имен вкладок (задача переименования CodeNames не включена):

Sub FindSheets_and_replace_ShName()
  Const csSheet As String = "Sheet"
  Dim sh As Worksheet

  For Each sh In ActiveWorkbook.Sheets
    If InStr(1, sh.Name, csSheet) <> 0 Then
      sh.copy After:=Sheets(Sheets.Count)

      'ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).Name = Replace(ActiveSheet.Name, "?", "?")

      ActiveSheet.Name = Replace(sh.Name, "eet", "A")
    End If
  Next sh

End Sub
...