如何解决VBA-使用嵌套的预声明变量声明和设置范围运行时错误'91':
第一次在这里查询!
我想在Excel工作表上定义数据框。但是,当我尝试设置范围时,出现运行时91错误。
Dim i As Long
Dim WSCount As Long
WSCount = Application.ActiveWorkbook.Worksheets.Count
For i = 1 To WSCount Step 1
Select Case Worksheets(i).Name
Case "Page1_1","Page2_2","Written","Waived","Earned"
Dim LR As Long
LR = Worksheets(i).Cells(Rows.Count,1).End(xlUp).Row + 1
Dim LC As Long
LC = Worksheets(i).Cells(1,Columns.Count).End(xlToLeft).Column
Dim DataFrame As Range
**DataFrame = Worksheets(i).Range("A2").Resize(LR,LC)**
DataFrame.ClearContents
End Select
Next i
LR和LC都生成正确的答案。
但是,当我尝试将Dataframe声明为Range并按如下所示设置Dataframe时,出现错误,我无法弄清楚...
“运行时错误'91': 对象变量或未设置块变量”
有人知道这个问题是什么吗?
非常感谢!
亚瑟
解决方法
数据帧
-
要完全限定范围,您必须执行以下操作:
Set DataFrame = ThisWorkbook.Worksheets("Sheet1").Range(ThisWorkbook.Worksheets("Sheet1").Cells(2,1),ThisWorkbook.Worksheets("Sheet1").Cells(LR,LC))
-
要避免出现上述情况,可以使用
With
语句,该语句还使您可以轻松地在一个地方更改工作表。 -
请注意
Range
,Cells
,Rows
和Columns
前面的点(。)。
代码
Option Explicit
Sub df()
Dim LR As Long
Dim LC As Long
Dim Dataframe As Range
With ActiveWorkbook.ActiveSheet
LR = .Cells(.Rows.Count,1).End(xlUp).Row
LC = .Cells(1,.Columns.Count).End(xlToLeft).Column
' Explicitly: note the '2'.
Set Dataframe = .Range(.Cells(2,.Cells(LR,LC))
' Implicitly i.e. you have the full range incl. the headers:
' Define 'full' range.
'Dim rng As Range
'Set rng = .Range(.Cells(1,LC))
' Resize and offset to exclude the headers.
'Set Dataframe = rng.Resize(rng.Rows.Count - 1).Offset(1)
End With
Dataframe.Select
End Sub
编辑:
- 这就是我将使用
For Each Next
循环和Application.Match
以及一系列工作表名称来编写代码的方式。 - 与您的
Select Case
版本一样,它不区分大小写,因此我可以例如WriTTeN
,仍将找到工作表。 - 不需要
Dataframe
变量。 -
2
表示范围将从保留标题的第二行开始。
代码
Sub df2()
Dim wsNames As Variant
wsNames = Array("Page1_1","Page2_2","Written","Waived","Earned")
Dim ws As Worksheet
Dim LR As Long
Dim LC As Long
For Each ws In ActiveWorkbook.Worksheets
If Not IsError(Application.Match(ws.Name,wsNames,0)) Then
LR = ws.Cells(ws.Rows.Count,1).End(xlUp).Row
LC = ws.Cells(1,ws.Columns.Count).End(xlToLeft).Column
ws.Range(ws.Cells(2,ws.Cells(LR,LC)).ClearContents
End If
Next ws
End Sub
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。