#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
синтаксис. Это может быть то, что вы ищете. Вы можете немного почитать об этом.