2017-12-15 1 views
0

확인란을 기반으로 새 워크 시트를 만드는 코드를 디자인했으며이 이름은 사용자 정의 변수에서 파생되었습니다. 그러나 누군가가 상자를 선택 취소하고 검사하면 코드를 다시 실행하고 이름이 같은 여러 워크 시트로 인해 오류가 발생합니다. 이 코드는 정상적으로 동작하는 코드라는 것을 알고 있지만 코드가 존재하는지 확인하기 위해 IF : THEN 문을 생성하려고합니다. 시트가 있으면 코드 자체가 멈 춥니 다. 시트가 없으면 정상적으로 실행됩니다.확인란 및 중복 시트 오류

어떻게하면됩니까?

아래 코드.

Private Sub CheckBox4_Click() 

Application.ScreenUpdating = False 
Dim ws As Worksheet 
Dim Protocol As Range 

If CheckBox4.Value = True Then 

ActiveWorkbook.Unprotect 

Set ws = Sheets.Add(After:=Sheets(Sheets.Count)) 
ws.Name = Sheets("Control").Cells(16, "I") 
Set Protocol = Sheets("The Hidden Works").Columns("W:AQ").EntireColumn 
Protocol.Copy 
ws.Paste 
ws.Protect 
ws.EnableSelection = xlUnlockedCells 
Application.CutCopyMode = False 

     Worksheets("SUMMARY").Rows("44").EntireRow.Hidden = False 
     Worksheets("SUMMARY").Cells(44, 3).Value = "='Control'!I16" 
     Worksheets("SUMMARY").Cells(44, 3).NumberFormat = "General" 
     Worksheets("SUMMARY").Cells(44, 4).Value = "='Control'!K16" 
     Worksheets("SUMMARY").Cells(44, 5).Value = "='Control'!L16" 
     Worksheets("SUMMARY").Cells(44, 6).Value = "=" & ws.Name & "!$H$69" 
     Worksheets("SUMMARY").Cells(44, 7).Value = "=" & ws.Name & "!$J$69" 
     Worksheets("SUMMARY").Cells(44, 8).Value = "=" & ws.Name & "!$N$69" 
     Worksheets("SUMMARY").Cells(44, 9).Value = "=" & ws.Name & "!$P$69" 
     Worksheets("SUMMARY").Cells(44, 10).Value = "=SUM(F44:I44)/D44" 
     Worksheets("SUMMARY").Cells(44, 11).Value = "=M44/F3" 
     Worksheets("SUMMARY").Cells(44, 12).Value = "=" & ws.Name & "!$U$69" 
     Worksheets("SUMMARY").Cells(44, 13).Value = "=M44/$K$57" 

Worksheets("Control").Activate 

End If 
    Application.ScreenUpdating = True 
End Sub 

답변

0

당신은 시트가 존재하는지 확인하기 위해 아래의 기능을 사용할 수 있습니다 :

Private Sub CheckBox4_Click() 

Application.ScreenUpdating = False 
Dim ws As Worksheet 
Dim Protocol As Range 
Dim sheetName As String 

If CheckBox4.Value = True Then 
    ActiveWorkbook.Unprotect 
    sheetName = Sheets("Control").Cells(16, "I") 
    If WorksheetExists(sheetName) Then 
     Exit Sub 
    Else 
     Set ws = Sheets.Add(After:=Sheets(Sheets.Count)) 
     ws.Name = sheetName 
     Set Protocol = Sheets("The Hidden Works").Columns("W:AQ").EntireColumn 
     Protocol.Copy 
     ws.Paste 
     ws.Protect 
     ws.EnableSelection = xlUnlockedCells 
     Application.CutCopyMode = False 

     Worksheets("SUMMARY").Rows("44").EntireRow.Hidden = False 
     Worksheets("SUMMARY").Cells(44, 3).Value = "='Control'!I16" 
     Worksheets("SUMMARY").Cells(44, 3).NumberFormat = "General" 
     Worksheets("SUMMARY").Cells(44, 4).Value = "='Control'!K16" 
     Worksheets("SUMMARY").Cells(44, 5).Value = "='Control'!L16" 
     Worksheets("SUMMARY").Cells(44, 6).Value = "=" & ws.Name & "!$H$69" 
     Worksheets("SUMMARY").Cells(44, 7).Value = "=" & ws.Name & "!$J$69" 
     Worksheets("SUMMARY").Cells(44, 8).Value = "=" & ws.Name & "!$N$69" 
     Worksheets("SUMMARY").Cells(44, 9).Value = "=" & ws.Name & "!$P$69" 
     Worksheets("SUMMARY").Cells(44, 10).Value = "=SUM(F44:I44)/D44" 
     Worksheets("SUMMARY").Cells(44, 11).Value = "=M44/F3" 
     Worksheets("SUMMARY").Cells(44, 12).Value = "=" & ws.Name & "!$U$69" 
     Worksheets("SUMMARY").Cells(44, 13).Value = "=M44/$K$57" 

     Worksheets("Control").Activate 
    End If 
End If 
    Application.ScreenUpdating = True 
End Sub 

Function WorksheetExists(sheetName As String) As Boolean 
    WorksheetExists = Evaluate("ISREF('" & sheetName & "'!A1)") 
End Function 
:

Function WorksheetExists(sheetName As String) As Boolean 
    WorksheetExists = Evaluate("ISREF('" & sheetName & "'!A1)") 
End Function 

그것을 사용 등이

If WorksheetExists("Sheet10") Then 
    Exit Sub 
Else 
    'Your Code 
End If 

코드는이 솔루션을 사용하도록

+0

을 나는이 아이디어를 좋아하지만, 어떻게 내가 당신의 예를 사용할 수 있습니다 경우 종료 하위 그렇지 '코드 끝 에 만약 WorksheetExists ("Sheet10") 사용자 정의 이름을 찾으십니까? –

+0

@TomStone, 편집을 확인하십시오. – Arul

+0

감사! 매력처럼 작동합니다! –

0

셀이 특히 체크 시트 이름 :

Application.DisplayAlerts = False 
If IsError(Evaluate("SHEETNAME!A1")) Then Sheets.Add(After:=Sheets(Sheets.Count)).Name = "SHEETNAME" 
Application.DisplayAlerts = True 
+0

죄송합니다. VBA에 대해 오히려 경험이 없습니다. 이 코드가 어떻게 작동하는지 설명해 주시겠습니까? –

+0

@TomStone 시트를 생성하는 곳은 세 줄의 코드로 Set ws = Sheets.Add (After : = Sheets (Sheets.Count))와 같이 바뀝니다. 추가 될 때 생성되는 시트의 이름을 지정합니다 (약간의 효율성). 이 코드의 목적은 시트에서 셀 A1에 액세스 할 때 오류가 있는지 확인하는 것입니다. 오류가 발생하면 (시트가 존재하지 않고 찾을 수 없음), 시트가 작성됩니다. 오류가 없으면 아무 작업도 수행하지 않고 다음 행으로 이동합니다. 확인 중에 경고가 비활성화되었습니다. – Cyril

+0

@TomStone 이렇게하면 새 시트가 생성되는 것을 멈추고 나머지 코드는 의도 한대로 실행됩니다. – Cyril