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

#vba

#vba

Вопрос:

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

Не слишком сложно, но проблема, с которой я сталкиваюсь, заключается в том, что рабочие листы, из которых я пытаюсь извлечь информацию, имеют одно из двух имен. Они либо Sheet1 , либо T Points to Measure .

Текущее исправление, которое я пытаюсь использовать (возможно, не самое лучшее), заключается в проверке, имеет ли рабочий лист это имя T Points to Measure . Если это так, то я хочу изменить его на Sheet1 , чтобы все рабочие листы имели одинаковое имя.

Мой текущий код, который я пытаюсь использовать, выглядит следующим образом:

 Let Copyrange = "T - ATKB000" amp; serialno amp; " Ply Count Request"
Set wb2 = Workbooks(Copyrange)
wb2.Activate
If wb2.Worksheet.Name = "T Points to Measure" Then
    wb2.Worksheet.Name = "Sheet1"
End If
Set ws2 = wb2.Sheets("Sheet1")
  

Однако я получаю сообщение об ошибке:

 Run-time error '438':
Object doesn't support this property or method
  

Ответ №1:

Ваша ошибка возникает в этой строке кода:

 If wb2.Worksheet.Name = "T Points to Measure" Then
  

в частности, в wb2.Worksheet . Это недопустимый синтаксис vba, поскольку у Worksheet объекта нет Workbook метода или свойства.

Существует Worksheets свойство, которое вам нужно. Чтобы получить доступ к отдельному рабочему листу, вам нужно использовать Worksheets синтаксис с индексом или выполнить цикл по каждому рабочему листу в рабочей книге и проверить имена по отдельности. Приведенная ниже инструкция if будет выполняться без ошибок, но она отчасти избыточна.

 If wb2.Worksheets("T Points to Measure").Name = "T Points to Measure" Then
  

Комментарии:

1. Что, если рабочий лист действительно имеет имя `Sheet1′? Не приведет ли это к ошибке?

2. Да, там вы тоже получите ошибку, но ваша ошибка ‘438’ вызвана неправильным синтаксисом, описанным выше.

3. У VBA старый OnError - Resume синтаксис. Это может быть то, что вы ищете. Вы можете немного почитать об этом.