【发布时间】:2019-11-04 11:48:03
【问题描述】:
我在 VBA 中运行此代码,但我不知道我的错误在哪里。我不断收到错误消息
“运行时错误 '438':对象不支持此属性或方法”。
我在互联网上搜索了解决方案,但找不到任何解决我问题的方法。
Sub FinalCleanUp()
Dim wkbk As Workbook
Dim wksht As Worksheet
Dim DataSheet As Worksheet
Dim sheetName As String
sheetName = "Data"
Set wkbk = ActiveWorkbook
'Delete consolidated data sheet if it already exists
For Each wksht In wkbk.Sheets
If wksht.Name = sheetName Then
wkbk.Sheets(sheetName).Delete
Exit For
End If
Next wksht
'Create new sheet for consolidated data
wkbk.Sheets.Add Before:=wkbk.Sheets(1)
Set DataSheet = ActiveSheet
ActiveSheet.Name = sheetName
'Step through each sheet and copy data to consolidated data sheet
'ERROR IS SOMEWHERE BELOW HERE
For Each wksht In wkbk.Sheets
If wksht.Name <> sheetName Then
wksht.Activate
Range(Cells(1, 1), Cells(ActiveSheet.UsedRange.Rows.Count, ActiveSheet.UsedRange.Columns.Count)).Copy
If wksht = wkbk.Sheets(2) Then
DataSheet.Activate
Cells(ActiveSheet.UsedRange.Rows.Count, 1).Select
Else
DataSheet.Activate
Cells(ActiveSheet.UsedRange.Rows.Count + 1, 1).Select
End If
ActiveSheet.Paste
End If
Next wksht
End Sub
此代码应该从多个工作表中获取数据并将其合并到一个工作表中。如前所述,我在运行宏时收到运行时错误并且没有输出。
【问题讨论】:
-
你想用
If wksht = wkbk.Sheets(2) Then做什么? -
你在哪一行得到错误?
-
尝试 'wksht.Name = wkbk.Sheets(2).Name' 而不是 If wksht = wkbk.Sheets(2)'
-
@AmieBeckwith 对于 VBA,您可以通过按 F8 键在 VBA 编辑器中单步执行您的代码。如果您大致了解代码在哪里中断,但不知道具体是哪一行,您可以找出以下两种方法之一:在打开 VBA 编辑器窗口的情况下运行它(它将在引发错误的行停止),或者在您知道抛出错误的部分之前的某个位置放置一个断点(单击代码左侧的灰色列添加一个红点),然后从顶部运行整个事情。一旦代码在断点处暂停,按 F8 进入代码,一步一步。
-
@TylerH 你也可以使用 F9 切换断点
标签: excel vba runtime-error