Destination1:=Worksheets(Sheet1).Range(N & "A")
@ QHarr правильно идентифицировал проблему с Range(N & "A")
и предложил исправление для ошибки несоответствия типов, которую вы получаете при Worksheets(Sheet1)
.
Я просто хотел объяснить, что происходит, более подробно, чем можно уместить в небольшом поле для комментариев.
Sheet1
- это неявно объявленная объектная переменная типа Worksheet
, чей идентификатор времени компиляции определенпо свойству (Name)
рабочего листа:
![Sheet1 properties toolwindow showing the (Name) property](https://i.stack.imgur.com/rq4i7.png)
Если вы измените значение этого свойства, скажем, на SummarySheet
, то Sheet1
больше не будет действительным идентификатором,и SummarySheet
становится единым целым - и это является частью того, почему важно указывать Option Explicit
в верхней части каждого модуля, потому что без него VBA будет успешно компилироваться и запускаться, за исключением того, что теперь Sheet1
является недопустимым, теперь оно не определеноVariant/Empty
значение, которое может случайно передаваться случайно, что может усложнить отладку (то же самое относится к любой необъявленной переменной, а не только кодовым именам таблицы).
Итак Sheet1
является Worksheet
ссылкой на объект.Если бы Worksheet
имел член по умолчанию , который возвратил значение его свойства Name
, ваш код работал бы.
Но Worksheet
не имеет члена по умолчанию, поэтому Worksheets(Sheet1)
передает ссылку на объект Worksheet
в качестве аргумента индексатору Worksheets.Item
(неявно - поскольку Worksheets
class имеет элемент по умолчанию, его Item
свойство), которое ожидает Variant
, содержащее либо имя листа (Variant/String
), либо числовой индекс (Variant/Integer
или Variant/Long
).
Передача объекта Worksheet
вWorksheets.Item
- это то, что вызывает ошибку несоответствия типов .
Поэтому, если предположить, что лист Sheet1
является предполагаемым местом назначения, это исправит это (делая абстракцию ошибки параметра Range
определено ранее QHarr):
wbData.ActiveSheet.Paste Destination:=Sheet1.Range(...)
Нет необходимости извлекать рабочий лист, который существует во время компиляции в ThisWorkbook
, из коллекции Worksheets
.
Обратите внимание, чтов исходном коде:
Destination1:=Worksheets(Sheet1).Range(N & "A")
, поскольку Worksheets
не квалифицированоWorkbook
, к которому он принадлежит, неоднозначно: если этот код записан в ThisWorkbook
, то Worksheets
является вызовом члена против Me
, то есть ThisWorkbook.Worksheets
.В противном случае, это «удобно» неявно ссылается на независимо от того, какая книга активна в данный момент , и это часто является рискованным предположением для кода.