コードネームでワークシートを参照するために、以下のコードを使用すると、 "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
今後の質問:このコードは既存のシートを取り出して名前を変更しています。私が気にするのは、ユーザーがCell I16のシートに名前を付けて名前を変更し、ボックスのチェックを外すかチェックすると、参照が貧弱なSummary Worksheetに行が表示されます。また、コードはコメントに& SHEETNAME &を回すように私は
Worksheets("SUMMARY").Cells(47, 6).Value = "="' & sheetName & '"!$H$69"
として
Worksheets("SUMMARY").Cells(47, 6).Value = "=" & sheetName & "!$H$69"
下のコードを入力することはできません。ワークシートがコード内で適切に参照されるように、これを修正するにはどうすればよいですか?コードネームワークシートを保持する必要がありますか?
名前変更の問題を防ぐ方法については、チェックボックスの値が正である限り名前付きセルを保護し、チェックボックスの値がfalseの場合にセルを編集できるようにしました。おそらく、セルが変更されているかどうかをチェックするコード行を追加し、ユーザーが変更したいセルであることを確認すると、既存のスプレッドシートのデータはクリアされますがフォーマットはクリアされます。
"Sheet34"の各インスタンスに対して開くファイルエクスプローラの意味が不明だが、割り当てには二重引用符つまり、 "" = ""&sheetName& "'!$ H $ 69" ' – Skippy
二重引用符について知っておくとよいでしょう。 ファイルエクスプローラが開くまでは、 Excelファイルを開くファイルエクスプローラは、行の各インスタンスに対して5回表示されます。 "="&sheetName& "!$ U $ 69" 私が推測できるのは、二重引用符は、それは別のブックに、おそらくシートがあると仮定しますか?私は、そのコードネームでシートを呼び出すことは、特に明記されていない限り、本書がアクティブワークブックに含まれていたと仮定していましたが、 –