Я бы настоятельно рекомендовал выполнить ваш код через Проверки Rubberduck (это бесплатно и с открытым исходным кодом; я управляю проектом), поскольку оно объясняет не только конкретную ошибку, о которой вы спрашиваете, но также можетне позволяют вам вступить во множество обычных ловушек для новичков.
Проблема в том, что Backlog
является Workbook
объектом, а Workbook
не имеет Range
члена:
Участник не найден
Вызов доступа к элементу сделан для расширенного интерфейса, который Rubberduckне удалось разрешить, или член не найден.Если VBA не может разрешить тип во время выполнения, возникает ошибка 438.[...]
Вам необходим Worksheet
для доступа к Range
, Workbook
не будет работать.
Обратите внимание, что последующие TSS.Range
вызов так же незаконен; -)
Возьми это:
Set Backlog = ActiveWorkbook
И избавься от опоры на стороне-эффект открытия рабочей книги путем захвата объекта Workbook
, возвращаемого Workbooks.Open
:
Set Backlog = Workbooks.OpenText(Filename:="C:\lwuser6\BACKLOG.DAT", Origin:=437, _
StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(7, _
1), Array(68, 1), Array(78, 1), Array(86, 1), Array(126, 1), Array(150, 1)), _
TrailingMinusNumbers:=True)
Nevermind, Workbooks.OpenText
не возвращает ссылку на объект Workbook
.
Затем возьмите это:
Backlog.Worksheets("BACKLOG")
И перетащите его в локальную переменную:
Dim backlogSheet As Worksheet
Set backlogSheet = Backlog.Worksheets("BACKLOG")
Теперь вы можете использовать еговезде, где вам нужен этот конкретный лист:
With backlogSheet
Set SearchRange = .Range(.Cells(1, 1), .Cells(.Rows.End(xlDown).Row, 1))
End With
.. и это должно работать, хотя IMO, поставляющий Range
объекты в свойство Worksheet.Range
, чувствует себя несколько неправильно (и выдает ошибку 1004, если Sample
диапазон не указан в backlogSheet
):
backlogSheet.Range(Sample(1, 1), Sample(1, 3)).Copy
Не уверен, какой конкретный лист в книге TSS
вы хотите вставить, но применяется тот же принцип.Тем не менее, вам, вероятно, даже не нужно подключать буфер обмена:
tssSheet.Range("G" & count & ":I" & count).Value = _
backlogSheet.Range(Sample(1, 1), Sample(1, 3)).Value