我正在尝试为大量工作簿中三个给定工作表上的复选框重新分配所有链接单元格。
我拥有的宏在我打开的任何书上都能成功运行:
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
编辑 2:删除错误继续下一步
删除错误忽略的建议说明了以下内容:当宏运行错误时:
运行时错误 1004 未找到具有特定名称的项目。
调试此错误突出显示:
Sheet4.CheckBoxes("Check Box " & i).LinkedCell = "ChkBoxOutput!AA" & i
我相信我意识到这个问题是什么:我正在使用“在 1 到 400 之间”循环来确保我捕捉到每个页面上的所有复选框,但是这些实例中的每一个都没有一个复选框,(checkbox1 没有'例如,在所有页面上都不存在 - 特别是在第 4 页上不存在)
我现在记得这就是为什么我首先在那里有 On error resume next 的原因......但我需要“next”成为循环中的下一个“i”,而不是完全的下一个表达式。