Ошибка 1004 - «Не удалось выбрать метод класса рабочего листа» при выборе рабочего листа - PullRequest
0 голосов
/ 09 октября 2018

Привет, у меня проблема с моим кодом, который получает следующую ошибку прямо в последней его части:

Ошибка 1004 - «метод выбора класса листа не выполнен»

Код - это в основном повторение того же самого кода, который делает вещи на 3 разных вкладках, проблема возникает на самой последней вкладке (sheet21), и я не могу понять почему, поскольку он работает для 2 других вкладокбез проблем.

Таким образом, код для каждой вкладки выглядит одинаково с различиями в формулах Excel, которые заполняются только в таблице. Проблема возникает при выборе листа, sheet9, sheet11 и sheet21, последний - где я получаюошибка, предыдущие вкладки выполняются без каких-либо проблем в соответствующих вкладках (листах).

enter image description here

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

 Sub AddColumns()
'Inserts Four Columns at L:O - Q3 Week High tab

Worksheets(21).Range("L:O").EntireColumn.Insert
'Format colour

Worksheets(21).Select        '-------1004 ERROR HERE 
Range("L4:N55").Select
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With

худшая часть в том, что точно такая же конструкция кода работает для Worksheets (9) и Worksheets (11)), которые выполняются раньше за один раз, но как только я достигаю Рабочего листа (21), я получаю сообщение об ошибке 1004, и процесс останавливается.

Я пробовал:

 If Worksheets(21).Visible = False Then Sheets(21).Visible = True
Sheets(21).Select

, но затем код выполнялся в какой-то совершенно другой вкладке Worksheet (19) по какой-то причине, и я не понимаю, почему.

Я использую соглашение об именах «Рабочий лист (#)», так как вкладки меняют имена на регулярной основе, и использование этого формата, казалось, работало хорошо, прежде чем я добавил Рабочий лист (21).

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

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

Вкладка с именем Sheet21, вероятно, указывается индексом как Sheets(16) или Workheets(16).Я не могу быть уверен, так как не вижу порядка ваших вкладок, а здесь 16 относится к 16-й вкладке, отображаемой на панели вкладок (включая скрытые и т. Д.) в порядке .

Следующее должно работать независимо от видимости вкладки при запуске.

Sub AddColumns()
  'Inserts Four Columns at L:O - Q3 Week High tab

  Sheet21.Range("L:O").EntireColumn.Insert
  'Format colour

  With Sheet21.Range("L4:N55").Interior
      .Pattern = xlNone
      .TintAndShade = 0
      .PatternTintAndShade = 0
  End With

Если вы хотите, чтобы она была видимой, просто используйте:

Sheet21.Visible = xlVisible
0 голосов
/ 09 октября 2018

Name, Index и CodeName - это три свойства рабочего листа, которые весьма различны.В коде из скриншота Sheet21 является CodeName и, вероятно, соответствует Worksheets(17).

Чтобы увидеть разницу, запустите приведенный ниже код и посмотрите в ближайшее окно:

Sub TestMe()
    Dim i As Long
    For i = 1 To Worksheets.Count
        Debug.Print Worksheets(i).Name
        Debug.Print Worksheets(i).Index
        Debug.Print Worksheets(i).CodeName
        Debug.Print "-----------------------"
    Next i
End Sub

True и false не помогут в If Worksheets(21).Visible = False, если лист равен xlVeryHidden.xlVeryHidden оценивается как 2, и это оценивается как True.

Короче говоря:

Напишите Worksheets(21).Visible = xlVisible в строке перед выбором.Или Sheet21.Visible = xlVisible, поскольку Worksheets(21) не существует в ваших данных.

И вообще:

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