Dim wkbkdestination As Workbook
Dim destsheet As Worksheet
For Each ThisWorkSheet In wkbkorigin.Worksheets
'this throws subscript out of range if there is not a sheet in the destination
'workbook that has the same name as the current sheet in the origin workbook.
Set destsheet = wkbkdestination.Worksheets(ThisWorkSheet.Name)
Next
기본적으로 원본 통합 문서의 모든 시트를 반복 한 다음 destsheet
대상 통합 문서에서 원본 통합 문서 의 현재 반복 된 시트와 동일한 이름을 가진 시트로 설정합니다.
해당 시트가 있는지 어떻게 테스트 할 수 있습니까? 다음과 같은 것 :
If wkbkdestination.Worksheets(ThisWorkSheet.Name) Then
답변
일부 사람들은 오류 처리의 “부적절한”사용으로 인해이 접근 방식을 싫어하지만 VBA에서는 허용되는 것으로 간주됩니다. 대체 접근 방식은 일치하는 항목을 찾을 때까지 모든 시트를 반복하는 것입니다.
Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
Dim sht As Worksheet
If wb Is Nothing Then Set wb = ThisWorkbook
On Error Resume Next
Set sht = wb.Sheets(shtName)
On Error GoTo 0
WorksheetExists = Not sht Is Nothing
End Function
답변
특별히 워크 시트에만 관심이있는 경우 간단한 Evaluate 호출을 사용할 수 있습니다.
Function WorksheetExists(sName As String) As Boolean
WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
답변
이를 수행하기 위해 오류 처리가 필요하지 않습니다. 모든 워크 시트를 반복하고 지정된 이름이 있는지 확인하기 만하면됩니다.
For i = 1 To Worksheets.Count
If Worksheets(i).Name = "MySheet" Then
exists = True
End If
Next i
If Not exists Then
Worksheets.Add.Name = "MySheet"
End If
답변
컬렉션의 구성원을 확인하는 것이 일반적인 문제이므로 다음은 Tim의 답변을 추상화 한 버전입니다.
함수 Contains (objCollection As Object, strName as String) As Boolean 개체로 Dim o 오류시 다음 재개 o = objCollection (strName) 설정 포함 = (Err.Number = 0) Err. Clear 끝 기능
이 기능 (오브젝트와 같은 모음으로 사용될 수있는 Shapes
, Range
, Names
, Workbooks
, 등).
시트의 존재를 확인하려면 If Contains(Sheets, "SheetName") ...
답변
수정 됨 :
오류 처리 없음 :
Function CheckIfSheetExists(SheetName As String) As Boolean
CheckIfSheetExists = False
For Each WS In Worksheets
If SheetName = WS.name Then
CheckIfSheetExists = True
Exit Function
End If
Next WS
End Function
답변
누구나 VBA를 피하고 워크 시트가 순수하게 셀 수식 내에 존재하는지 테스트하려는 경우 ISREF
및 INDIRECT
함수를 사용할 수 있습니다.
=ISREF(INDIRECT("SheetName!A1"))
이 반환됩니다 TRUE
통합 문서라는 시트가 포함되어있는 경우 SheetName
와 FALSE
그렇지.
답변
나는 이것을 썼다.
Function sheetExist(sSheet As String) As Boolean
On Error Resume Next
sheetExist = (ActiveWorkbook.Sheets(sSheet).Index > 0)
End Function
