激活已关闭的工作簿,执行lRow VBA

激活已关闭的工作簿,执行lRow VBA,vba,excel,Vba,Excel,我已经浏览了大量的论坛,但仍然不明白我错在哪里。我的第一次VBA代码尝试之一 Private Sub Refresh_Click() Dim ws As Long Dim lRow As Variant Dim wb As Workbook Dim Arr() As Variant Dim DHSWMP As String Dim Dams As String Dim PotR As String DHSWMP = "E:\Copy of PWC DHSWMP WorkSheets.xlsm"

我已经浏览了大量的论坛,但仍然不明白我错在哪里。我的第一次VBA代码尝试之一

Private Sub Refresh_Click()
Dim ws As Long
Dim lRow As Variant
Dim wb As Workbook
Dim Arr() As Variant
Dim DHSWMP As String
Dim Dams As String
Dim PotR As String

DHSWMP = "E:\Copy of PWC DHSWMP WorkSheets.xlsm"
'Dams = "x"
'PotR = "x"

Application.ScreenUpdating = False

 Set wb = Workbooks.Open(DHSWMP, True, False)
 wb.Activate

 ws = Worksheets.Count

    Do While ws > 0

        wb.Sheets(ws).Activate
        lRow = Cells(Rows.Count, 2).End(xlUp).Row

        MsgBox (lRow)
代码成功了,但是它在运行宏的“母版”上执行lRow,而不是在打开的工作簿上执行lRow。有一点让我感到困惑,那就是代码确实在打开的工作簿上执行了worksheets.count


干杯

您的代码对我来说运行正常。这是一个完美的例子,说明了为什么你应该完全限定你的推荐人

要测试正在发生的情况,请执行以下操作:

  • 不要关闭
    屏幕更新
  • 改进您的
    MsgBox
  • 使用F8单步执行代码
  • 使用
    即时窗口
    进行附加测试
  • Cells.Parent.Name:返回工作表的名称
  • Cells.Parent.Name:返回工作簿的名称

迭代时应避免使用
Do
循环;如果你知道开始和结束<代码>用于
用于每个
循环

这里有两种编写代码的不同方法。注意,
语句和限定引用一起使用。例如,
单元格和
行都符合
工作表中的
单元格(.Rows.Count,2).End(xlUp).Row
。这对于避免混淆代码的实际目标非常重要

Private Sub Refresh_Click()
    Application.ScreenUpdating = False
    Dim ws As Worksheet, wbDHSWMP As Workbook
    Dim lRow As Variant
    Dim Arr() As Variant
    Dim DHSWMP As String, Dams As String, PotR As String

    DHSWMP = "C:\Copy of PWC DHSWMP WorkSheets.xlsm"
    Set wbDHSWMP = Workbooks.Open(DHSWMP, True, False)

    For Each ws In wbDHSWMP.Worksheets
        With ws
            lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
            MsgBox (lRow)
        End With
    Next
    Application.ScreenUpdating = True
End Sub

Private Sub Refresh_Click()
    Application.ScreenUpdating = False
    Dim wbDHSWMP As Workbook
    Dim lRow As Variant, n As Long
    Dim Arr() As Variant
    Dim DHSWMP As String, Dams As String, PotR As String

    DHSWMP = "C:\Copy of PWC DHSWMP WorkSheets.xlsm"
    Set wbDHSWMP = Workbooks.Open(DHSWMP, True, False)

    For n = wbDHSWMP.Worksheets.Count To 1 Step -1
        With wbDHSWMP.Worksheets(n)
            lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
            MsgBox (lRow)
        End With
    Next
    Application.ScreenUpdating = True
End Sub

这个代码在哪里(在通用模块或工作表模块中)?哦,哇,我甚至不知道中间窗口。我现在明白我的错误了。非常感谢您的全面回复。您应该关注。谢谢你接受我的回答
Private Sub Refresh_Click()
    Application.ScreenUpdating = False
    Dim ws As Worksheet, wbDHSWMP As Workbook
    Dim lRow As Variant
    Dim Arr() As Variant
    Dim DHSWMP As String, Dams As String, PotR As String

    DHSWMP = "C:\Copy of PWC DHSWMP WorkSheets.xlsm"
    Set wbDHSWMP = Workbooks.Open(DHSWMP, True, False)

    For Each ws In wbDHSWMP.Worksheets
        With ws
            lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
            MsgBox (lRow)
        End With
    Next
    Application.ScreenUpdating = True
End Sub

Private Sub Refresh_Click()
    Application.ScreenUpdating = False
    Dim wbDHSWMP As Workbook
    Dim lRow As Variant, n As Long
    Dim Arr() As Variant
    Dim DHSWMP As String, Dams As String, PotR As String

    DHSWMP = "C:\Copy of PWC DHSWMP WorkSheets.xlsm"
    Set wbDHSWMP = Workbooks.Open(DHSWMP, True, False)

    For n = wbDHSWMP.Worksheets.Count To 1 Step -1
        With wbDHSWMP.Worksheets(n)
            lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
            MsgBox (lRow)
        End With
    Next
    Application.ScreenUpdating = True
End Sub