Excel VBA通过清除表格初始化工作簿
我有一些VBA代码,我在另一个工作簿中使用这些代码将表的大小调整为1行,并删除数据表的内容以初始化工作簿。然后会打开一个文件提示,要求用户选择适当的文件进行处理。由于某种原因,我得到了一份工作 运行时错误“91”:未设置对象变量或带块变量 代码是另一个工作簿的复制和粘贴,我已经调整了变量、工作簿、工作表和表名的名称 该工作簿名为“IMD Processing.xlsm”,共有两张题为“IMD”和“Raw”的工作表。“原始”工作表有一个名为“tbl_Raw”的表,“IMD”工作表有一个名为“tbl_IMD”的表 任何指导都将不胜感激Excel VBA通过清除表格初始化工作簿,excel,vba,Excel,Vba,我有一些VBA代码,我在另一个工作簿中使用这些代码将表的大小调整为1行,并删除数据表的内容以初始化工作簿。然后会打开一个文件提示,要求用户选择适当的文件进行处理。由于某种原因,我得到了一份工作 运行时错误“91”:未设置对象变量或带块变量 代码是另一个工作簿的复制和粘贴,我已经调整了变量、工作簿、工作表和表名的名称 该工作簿名为“IMD Processing.xlsm”,共有两张题为“IMD”和“Raw”的工作表。“原始”工作表有一个名为“tbl_Raw”的表,“IMD”工作表有一个名为“tbl
Option Explicit
Sub IMDAutomation()
Dim fileName As String 'Filename string
Dim wb_macro As Workbook 'Macro workbook
Dim ws_macro_imd As Worksheet 'Macro worksheet
Dim ws_macro_raw As Worksheet 'Macro raw worksheet
Dim wb_imd As Workbook 'IMD Workbook for processing
Dim ws_imd As Worksheet 'IMD Worksheet for processing
Dim objTable As ListObject 'Table of raw data
Dim tbl_raw As ListObject 'Raw table in macro workbook
Dim tbl_imd As ListObject 'IMD table in macro workbook
Dim vals As Variant 'Array to store values
Dim lrow As Long 'Variable used to determine number of rows in data table
Set wb_macro = ThisWorkbook
Set ws_macro_imd = Sheets("IMD")
Set ws_macro_raw = Sheets("Raw")
'============ Initialize macro workbook - clearing data ============'
'Clear the raw data in the macro workbook
Set tbl_raw = ws_macro_raw.ListObjects("tbl_raw")
With tbl_raw.DataBodyRange
If .Rows.Count > 1 Then
.Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Rows.Delete
End If
End With
tbl_raw.DataBodyRange.Rows(1).ClearContents
'Clear the IMD data in the macro workbook
Set tbl_imd = ws_macro_imd.ListObjects("tbl_imd")
With tbl_imd.DataBodyRange
If .Rows.Count > 1 Then
.Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Rows.Delete
End If
End With
'============ Locate Raw Data File ============'
'Open file dialog to locate the Workforce Review raw data workbook exported from system
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Select the IMD file"
.Filters.Clear
.Filters.Add "Custom Excel Files", "*.xlsx, *xls, *csv"
.Show
fileName = .SelectedItems.Item(1)
End With
If InStr(fileName, ".xlsx") = 0 Then
Exit Sub
End If
Workbooks.Open fileName
'Set the Workforce Review raw workbook
Set wb_imd = ActiveWorkbook
'Set the worksheet
Set ws_imd = wb_imd.ActiveSheet
lrow = ws_imd.Cells(ws_imd.Rows.Count, 2).End(xlUp).Row
vals = ws_imd.Range("A2:CU" & lrow)
Application.CutCopyMode = False
Application.CutCopyMode = True
End Sub
用溶液浸泡
感谢@Variatus提供的解决方案。
我的表中没有数据行,所以我创建了一个数据行,现在它可以工作了。
这应该适用于处理表中没有行的情况
如果tbl_raw.DataBodyRange为空,则插入rowRange Else(清除表格的代码)
可能是由Set tbl_raw=ws_macro_raw.ListObjects(“tbl_raw”)搜索的对象
在新工作簿中不存在,因此通过使用tbl_raw引用
返回此错误您在哪一行得到该错误?当我使用“步进”时,当黄色箭头打开If.Rows.Count>1,则会发生此错误
。当我再次点击“步进”时,错误就会跳出来。我不确定这是否意味着它在那一行或下一行。数据源范围不存在。必须至少有一行。如果Tbl_raw.DataBodyRange为Nothing,我相信您可以使用进行测试。相反,表的InsertRowRange
只存在于DataBodyRange为空的情况下。啊,我还以为其中有一行数据呢!这就是原因。那么您认为解决方案是:如果tbl_raw.DataBodyRange为空,那么InsertRowRange Else(清除表的代码)
?另外,我可以使用“Is Nothing”吗?或者你是说作为逻辑?Is Nothing
是合法的。@Variatus是正确的,因为DataBodyRange不存在。我添加了一行数据,现在它正在工作!是的,我差不多在同一时间回答了,在写答案的时候看不到评论。