激活已关闭的工作簿,执行lRow VBA
我已经浏览了大量的论坛,但仍然不明白我错在哪里。我的第一次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"
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