ワークブックの大規模なコレクション内の 3 つの特定のワークシートで、リンクされたすべてのセルをチェックボックスに再割り当てしようとしています。
私が持っているマクロは、開いているすべての本で正常に機能します。
Sub CheckBoxesControl()
On Error Resume Next
Dim i As Long
For i = 1 To 400
Sheet4.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AA" & i
Sheet21.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AB" & i
Sheet22.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AC" & i
Next i
End Sub
ただし、これを多数のシートで実行したいので、次のことを試しました。
Sub CheckBoxesControl()
On Error Resume Next
Dim path As String
Dim file As String
Dim wkbk As Workbook
Dim i As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
path = "C:\file\path\"
file = Dir(path)
Do While Not file = ""
Workbooks.Open (path & file)
Set wkbk = ActiveWorkbook
For i = 1 To 400
Sheet4.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AA" & i
Sheet21.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AB" & i
Sheet22.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AC" & i
Next i
wkbk.Save
wkbk.Close
file = Dir
Loop
End Sub
マクロは確かに各ファイルを開いたり閉じたりし、エラーなしで実行されますが、望ましい効果はありません。
マクロを実行したシートのチェックボックスのみを変更します(明らかに保存を開いて他のすべてを閉じているにもかかわらず)。
アクティブなワークブックを正しく設定できていませんか?
編集 1: 修正案 (失敗)
コメントで提案された方法(失敗したことが判明):
Sub CheckBoxesControl()
On Error Resume Next
Dim path As String
Dim file As String
Dim wkbk As Workbook
Dim i As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
path = "C:\file\path\"
file = Dir(path)
Do While Not file = ""
Set wkbk = Workbooks.Open(path & file)
For i = 1 To 400
wkbk.Sheet4.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AA" & i
wkbk.Sheet21.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AB" & i
wkbk.Sheet22.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AC" & i
If Err.Number <> 0 Then
End If
Next i
wkbk.Save
wkbk.Close
file = Dir
Loop
End Sub
EDIT 2: RESUME NEXT のエラーでの削除
無視するエラーを削除するための提案は、次のことを示しています: マクロがエラーを実行したとき:
実行時エラー 1004 特定の名前のアイテムが見つかりませんでした。
このエラーをデバッグすると、次の点が強調されます。
Sheet4.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AA" & i
この問題が何であるかを理解していると思います:「1 から 400 の間で移動」ループを使用して、各ページのすべてのチェックボックスを確実にキャッチしていますが、それらのインスタンスのそれぞれにチェックボックスがありません (checkbox1 はたとえば、すべてのページに存在しません - 特にシート 4 には存在しません)
これが、最初に On error resume next を持っていた理由であることを今覚えています...しかし、完全に次の式ではなく、ループ内の次の「i」であるためには「next」が必要です。