2017-12-25 13 views
0

아래 코드를 사용하여 코드 이름별로 워크 시트를 참조 할 때 "Sheet34"인스턴스마다 파일 탐색기가 열립니다. 이 문제를 어떻게 방지 할 수 있습니까?워크 시트 코드 이름 오류

Private Sub CheckBox4_Click() 
Application.ScreenUpdating = False 

Dim ws As Worksheet 
Dim sheetName As String 


If CheckBox4.Value = True Then 
    ActiveWorkbook.Unprotect 
    Worksheets("SUMMARY").Unprotect 
    sheetName = Sheets("Control").Cells(16, "I") 
    If sheetName = "" Then 
     MsgBox "You must enter a valid Allowance descriptor. No entry was detected." 
     CheckBox4.Value = False 
     Exit Sub 
    End If 
    If Len(sheetName) > 31 Then 
     MsgBox "Worksheet tab names cannot be greater than 31 characters in length." 
     Application.EnableEvents = False 
     Sheets("Control").Cells(16, "I").ClearContents 
     Application.EnableEvents = True 
     CheckBox4.Value = False 
     Exit Sub 
    End If 
    Dim IllegalCharacter(1 To 7) As String, i As Integer 
    IllegalCharacter(1) = "/" 
    IllegalCharacter(2) = "\" 
    IllegalCharacter(3) = "[" 
    IllegalCharacter(4) = "]" 
    IllegalCharacter(5) = "*" 
    IllegalCharacter(6) = "?" 
    IllegalCharacter(7) = ":" 
    For i = 1 To 7 
     If InStr(sheetName, (IllegalCharacter(i))) > 0 Then 
      MsgBox "You used a character that violates sheet naming rules. Please refrain from the following characters:/\ [ ] * ? : " 
      Application.EnableEvents = False 
      Sheets("Control").Cells(16, "I").ClearContents 
      Application.EnableEvents = True 
      CheckBox4.Value = False 
      Exit Sub 
     End If 

    Next i 
    If Sheets("Control").Range("I16") = Sheets("Control").Range("I17") Then 
     MsgBox "There is already an Allowance with this name. Please choose a different name." 
     Application.EnableEvents = False 
      Sheets("Control").Cells(16, "I").ClearContents 
      Application.EnableEvents = True 
      CheckBox4.Value = False 
      Exit Sub 
     End If 
     If Sheets("Control").Range("I16") = Sheets("Control").Range("I18") Then 
     MsgBox "There is already an Allowance with this name. Please choose a different name." 
     Application.EnableEvents = False 
      Sheets("Control").Cells(16, "I").ClearContents 
      Application.EnableEvents = True 
      CheckBox4.Value = False 
      Exit Sub 
     End If 
     If Sheets("Control").Range("I16") = Sheets("Control").Range("I21") Then 
     MsgBox "There is already an Other Item with this name. Please choose a different name." 
     Application.EnableEvents = False 
      Sheets("Control").Cells(16, "I").ClearContents 
      Application.EnableEvents = True 
      CheckBox4.Value = False 
      Exit Sub 
     End If 
     If Sheets("Control").Range("I16") = Sheets("Control").Range("I22") Then 
     MsgBox "There is already an Other Item with this name. Please choose a different name." 
     Application.EnableEvents = False 
      Sheets("Control").Cells(16, "I").ClearContents 
      Application.EnableEvents = True 
      CheckBox4.Value = False 
      Exit Sub 
     End If 
     If Sheets("Control").Range("I16") = Sheets("Control").Range("I23") Then 
     MsgBox "There is already an Other Item with this name. Please choose a different name." 
     Application.EnableEvents = False 
      Sheets("Control").Cells(16, "I").ClearContents 
      Application.EnableEvents = True 
      CheckBox4.Value = False 
      Exit Sub 
     End If 
    If WorksheetExists(sheetName) Then 
     Worksheets(sheetName).Visible = -1 
     Worksheets("SUMMARY").Rows("47").EntireRow.Hidden = False 
     Worksheets("SUMMARY").Cells(47, 2).Value = "ALL 1:" 
     Worksheets("SUMMARY").Cells(47, 3).Value = "='Control'!I16" 
     Worksheets("SUMMARY").Cells(47, 3).NumberFormat = "General" 
     Worksheets("SUMMARY").Cells(47, 4).Value = "='Control'!K16" 
     Worksheets("SUMMARY").Cells(47, 5).Value = "='Control'!L16" 
     Worksheets("SUMMARY").Cells(47, 6).Value = "=" & sheetName & "!$H$69" 
     Worksheets("SUMMARY").Cells(47, 7).Value = "=" & sheetName & "!$J$69" 
     Worksheets("SUMMARY").Cells(47, 8).Value = "=" & sheetName & "!$N$69" 
     Worksheets("SUMMARY").Cells(47, 9).Value = "=" & sheetName & "!$P$69" 
     Worksheets("SUMMARY").Cells(47, 10).Value = "=SUM(F47:I47)/D47" 
     Worksheets("SUMMARY").Cells(47, 11).Value = "=L47/F3" 
     Worksheets("SUMMARY").Cells(47, 12).Value = "=" & sheetName & "!$U$69" 
     Worksheets("SUMMARY").Cells(47, 13).Value = "=L47/$K$57" 
     ActiveWorkbook.Protect 
     Sheets(sheetName).Protect 
     Sheets("SUMMARY").Protect 
     Exit Sub 
    Else 
     Set ws = ActiveWorkbook.Sheet34 
     ws.Name = sheetName 
     ws.Protect 
     ws.EnableSelection = xlUnlockedCells 
     Application.CutCopyMode = False 

     Worksheets("SUMMARY").Rows("47").EntireRow.Hidden = False 
     Worksheets("SUMMARY").Cells(47, 2).Value = "ALL 1:" 
     Worksheets("SUMMARY").Cells(47, 3).Value = "='Control'!I16" 
     Worksheets("SUMMARY").Cells(47, 3).NumberFormat = "General" 
     Worksheets("SUMMARY").Cells(47, 4).Value = "='Control'!K16" 
     Worksheets("SUMMARY").Cells(47, 5).Value = "='Control'!L16" 
     Worksheets("SUMMARY").Cells(47, 6).Value = "=" & ws.Name & "!$H$69" 
     Worksheets("SUMMARY").Cells(47, 7).Value = "=" & ws.Name & "!$J$69" 
     Worksheets("SUMMARY").Cells(47, 8).Value = "=" & ws.Name & "!$N$69" 
     Worksheets("SUMMARY").Cells(47, 9).Value = "=" & ws.Name & "!$P$69" 
     Worksheets("SUMMARY").Cells(47, 10).Value = "=SUM(F47:I47)/D47" 
     Worksheets("SUMMARY").Cells(47, 11).Value = "=L47/F3" 
     Worksheets("SUMMARY").Cells(47, 12).Value = "=" & ws.Name & "!$U$69" 
     Worksheets("SUMMARY").Cells(47, 13).Value = "=L47/$K$57" 

     ActiveWorkbook.Protect 
     Sheets(sheetName).Protect 
     Sheets("SUMMARY").Protect 
     Worksheets("Control").Activate 

    End If 

End If 
If CheckBox4.Value = False Then 
    ActiveWorkbook.Unprotect 
    Worksheets("SUMMARY").Unprotect 
    sheetName = Sheets("Control").Cells(16, "I") 

    If WorksheetExists(sheetName) Then 
     Worksheets(sheetName).Visible = 2 
     Worksheets("SUMMARY").Rows("47").EntireRow.ClearContents 
     Worksheets("SUMMARY").Rows("47").EntireRow.Hidden = True 
     ActiveWorkbook.Protect 
     Sheets(sheetName).Protect 
     Sheets("SUMMARY").Protect 
    End If 

    End If 
    Application.ScreenUpdating = True 
End Sub 

다음 코드는 기존 시트를 가져 와서 이름을 바꿉니다. 내가 가진 관심사는 사용자가 셀 I16에서 시트의 이름을 지정한 다음 이름을 바꾸고 상자를 선택 취소하거나 체크 표시를하면 불량한 참조가있는 요약 워크 시트에 행이 표시됩니다. 또한, 코드는 코멘트에 & SHEETNAME & 변으로 나를

Worksheets("SUMMARY").Cells(47, 6).Value = "="' & sheetName & '"!$H$69" 

Worksheets("SUMMARY").Cells(47, 6).Value = "=" & sheetName & "!$H$69" 

아래의 코드를 입력 할 수 없습니다. 워크 시트가 코드에서 제대로 참조되도록 수정하려면 어떻게해야합니까? 코드 명 워크 시트를 가지고 있어야합니까?

이름 바꾸기 문제를 방지하는 방법에 대한 내 생각은 확인란의 값이 양수인 경우 명명 된 셀을 보호하고 확인란 값이 false 인 경우 셀을 편집 할 수있게하는 것입니다. 셀 변경 여부를 확인하는 코드 줄을 추가하고 기존 스프레드 시트의 서식을 제외하고 데이터를 지울 수정하려는 셀이 맞는지 사용자에게 묻습니다.

+1

"Sheet34"의 각 인스턴스에 대해 파일 탐색기를 열어 본 내용이 확실하지 않지만 할당에 이중 인용 부호가 있어야합니다. le quotes, 즉' "= '"& sheetName & "'! $ H $ 69"' – Skippy

+0

이중 따옴표에 대해 알아두면 좋습니다. 파일 탐색기가 열린 상태에서. Excel 파일을 여는 파일 탐색기는 각 줄의 인스턴스에 대해 5 번 표시됩니다. "="& sheetName & "! $ U $ 69" 내가 가정 할 수있는 유일한 것은 단일 및 큰 따옴표를 사용하면 시트가 다른 통합 문서에 있다고 가정 할 수 있습니까? 필자는 코드 명으로 시트를 호출하는 것이 본질적으로 달리 명시되지 않는 한 활성 통합 문서에 있다고 가정하고 있지만? –

답변

0

다음과 같은 사용 해보세요 ... 공식으로 셀의 값을 설정하려고 :

  1. 이 같은 통합 문서
  2. 열기 다른 내에서 다른 시트의 셀에 대한 직접 링크를 생성 학습장.
  3. 은 다른 통합 문서에서 시트의 셀에 대한 직접 링크를 생성

당신은 발견 할 것이다 그 워크 시트 참조의 올바른 사용 될 다음 A의 아래

Worksheets("SUMMARY").Cells(47, 6).Formula = "='" & sheetName & "'!$H$69" 

그리고 통합 문서 참조 :

Worksheets("SUMMARY").Cells(47, 6).Formula = "='[" & Worboookpath & "] & sheetName & "'!$H$69"