启用编辑 vba
Enable editing vba
我在 Excel 2016 年工作。我目前创建了一个宏,它将遍历所有打开的工作簿并在它们以单词 "report" 开头时获取其中的数据。我现在要解决的问题是如何启用编辑。如果用户在下载所有要合并的报告后启用编辑,则宏没有问题。如果他们错过了那个按钮,他们 运行 会遇到宏无法获取数据的问题。
虽然他们没有那么多工作簿,但我正在努力让他们更轻松。我发布的代码将执行前 3 个工作簿,然后继续遍历其余 5 个,但不会 "Enable Edit"。
Sub EnableEdit()
Dim bk As Workbook
Dim w As Long, wCount As Long
wCount = Application.ProtectedViewWindows.Count
Set wsh = ThisWorkbook.Worksheets("Data")
On Error Resume Next
If wCount > 0 Then
For w = 1 To wCount
Application.ProtectedViewWindows(w).Activate
Application.ProtectedViewWindows(w).Edit
If Left(ActiveWorkbook.Name, 6) = "report" Then
ActiveWorkbook.Worksheets(1).Range("A1:Z1").Copy _
Destination:=wsh.Range("A1")
nrow = wsh.Cells(Rows.Count, 1).End(xlUp).Row + 1
ActiveWorkbook.Worksheets(1).Range("A2:Z500").Copy _
Destination:=wsh.Range("A" & nrow)
ActiveWorkbook.Close
End If
Next w
End If
On Error GoTo 0
End Sub
Application.ProtectedViewWindows
似乎是所有受保护视图 windows 的集合。一旦在其中一个受保护视图 windows 上执行 .Edit
方法,它就不再处于受保护视图模式,因此会从集合中删除。
这意味着当你Edit
集合的第一个成员时(当w
是1
时),第二个成员现在变成了第一个成员,什么是第三个成员现在变成第二个,等等。然后在你循环的下一次迭代中(当 w
是 2
时)你的代码因此正在查看原始的第三个成员,完全忽略了查看原始的第二个成员.
解决这个问题最简单的方法是以相反的顺序遍历数组,即使用:
For w = wCount To 1 Step -1
我在 Excel 2016 年工作。我目前创建了一个宏,它将遍历所有打开的工作簿并在它们以单词 "report" 开头时获取其中的数据。我现在要解决的问题是如何启用编辑。如果用户在下载所有要合并的报告后启用编辑,则宏没有问题。如果他们错过了那个按钮,他们 运行 会遇到宏无法获取数据的问题。
虽然他们没有那么多工作簿,但我正在努力让他们更轻松。我发布的代码将执行前 3 个工作簿,然后继续遍历其余 5 个,但不会 "Enable Edit"。
Sub EnableEdit()
Dim bk As Workbook
Dim w As Long, wCount As Long
wCount = Application.ProtectedViewWindows.Count
Set wsh = ThisWorkbook.Worksheets("Data")
On Error Resume Next
If wCount > 0 Then
For w = 1 To wCount
Application.ProtectedViewWindows(w).Activate
Application.ProtectedViewWindows(w).Edit
If Left(ActiveWorkbook.Name, 6) = "report" Then
ActiveWorkbook.Worksheets(1).Range("A1:Z1").Copy _
Destination:=wsh.Range("A1")
nrow = wsh.Cells(Rows.Count, 1).End(xlUp).Row + 1
ActiveWorkbook.Worksheets(1).Range("A2:Z500").Copy _
Destination:=wsh.Range("A" & nrow)
ActiveWorkbook.Close
End If
Next w
End If
On Error GoTo 0
End Sub
Application.ProtectedViewWindows
似乎是所有受保护视图 windows 的集合。一旦在其中一个受保护视图 windows 上执行 .Edit
方法,它就不再处于受保护视图模式,因此会从集合中删除。
这意味着当你Edit
集合的第一个成员时(当w
是1
时),第二个成员现在变成了第一个成员,什么是第三个成员现在变成第二个,等等。然后在你循环的下一次迭代中(当 w
是 2
时)你的代码因此正在查看原始的第三个成员,完全忽略了查看原始的第二个成员.
解决这个问题最简单的方法是以相反的顺序遍历数组,即使用:
For w = wCount To 1 Step -1