Эта функция возвращает TRUE
или FALSE
, указывая, существует ли в рабочей книге лист, названный в string wsName
object
Function wsExists(wb As Workbook, wsName As String) As Boolean
Dim ws: For Each ws In wb.Sheets
wsExists = (wsName = ws.Name): If wsExists Then Exit For
Next ws
End Function
UsIF
оператор для пропуска применимого кода, если лист не существует.
Редактировать:
Я могу сказать, что вы вложили много работы в свой код, которыйкруто, так что не принимайте это неправильно, когда я говорю, что это вызывает у меня беспокойство, поэтому мне пришлось упростить это.... есть много ненужных шагов.
Я верю, что «правильный путь» - это «любой способ, который работает», так что кудо в этом далеко.В программировании есть крутая кривая обучения, поэтому я решил предложить альтернативный блок кода вместо вашего.(Option Explicit
идет в самом верху модуля и «вынуждает» вас правильно объявлять / обрабатывать переменные, объекты и т. Д.)
Не видя ваших данных, я не могу гарантировать, что это будет работать- на самом деле, очень вероятно, что ссылка на ячейку где-то неверна, что вам придется попытаться выяснить - если вы решите использовать ее вообще.
Option Explicit
Sub ImportData()
Const SheetName = "Data" 'destination sheet name
Const sourceFile = "_20171231.xlsx" 'source filename for some reason
Dim wbSrc As Workbook, wbDest As Workbook, sht As Variant
Dim stPath As String, arrSourceSht() As Variant, inRow As Long
Set wbDest = ThisWorkbook 'dest wb object
stPath = Worksheets("Input").Range("C6").Value 'source wb stPath
'create array of source sheet names "146-150":
arrSourceSht = Array("F(AE)", "F(AL)", "F(AM)", "F(AR)", "F(AT)", "F(AU)")
Set wbSrc = Workbooks.Open(stPath & sourceFile) 'open source wb
With wbSrc
'VLookup to identify the correct data point
inRow = 5 'current input row
For Each sht In arrSourceSht
If wsExists(wbSrc, CStr(sht)) Then
wbDest.Sheets(sht).Range("AW" & inRow) = Application._
WorksheetFunction.VLookup("010", Range(.Sheets(sht).Range("N" & _
20 + inRow).Offset(-10), .Sheets(sht).Range("N" & 20 + inRow).Offset(-7)), 2, False)
End If
inRow = inRow + 1 'new input row
Next sht
wbDest.Save 'save dest
.Close savechanges:=False 'don't save source
End With
MsgBox "Data: imported!"
End Sub
Function wsExists(wb As Workbook, wsName As String) As Boolean
Dim ws: For Each ws In wb.Sheets
wsExists = (wsName = ws.Name): If wsExists Then Exit For
Next ws
End Function
Дайте мне знать, если у вас есть какие-либо вопросы, яможет рассказать вам, как это работает, если хотите.(Я здесь по крайней мере один раз в день.)