启用编辑 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集合的第一个成员时(当w1时),第二个成员现在变成了第一个成员,什么是第三个成员现在变成第二个,等等。然后在你循环的下一次迭代中(当 w2 时)你的代码因此正在查看原始的第三个成员,完全忽略了查看原始的第二个成员.

解决这个问题最简单的方法是以相反的顺序遍历数组,即使用:

For w = wCount To 1 Step -1