Excel VBA通过清除表格初始化工作簿

Excel VBA通过清除表格初始化工作簿,excel,vba,Excel,Vba,我有一些VBA代码,我在另一个工作簿中使用这些代码将表的大小调整为1行,并删除数据表的内容以初始化工作簿。然后会打开一个文件提示,要求用户选择适当的文件进行处理。由于某种原因,我得到了一份工作 运行时错误“91”:未设置对象变量或带块变量 代码是另一个工作簿的复制和粘贴,我已经调整了变量、工作簿、工作表和表名的名称 该工作簿名为“IMD Processing.xlsm”,共有两张题为“IMD”和“Raw”的工作表。“原始”工作表有一个名为“tbl_Raw”的表,“IMD”工作表有一个名为“tbl

我有一些VBA代码,我在另一个工作簿中使用这些代码将表的大小调整为1行,并删除数据表的内容以初始化工作簿。然后会打开一个文件提示,要求用户选择适当的文件进行处理。由于某种原因,我得到了一份工作

运行时错误“91”:未设置对象变量或带块变量

代码是另一个工作簿的复制和粘贴,我已经调整了变量、工作簿、工作表和表名的名称

该工作簿名为“IMD Processing.xlsm”,共有两张题为“IMD”和“Raw”的工作表。“原始”工作表有一个名为“tbl_Raw”的表,“IMD”工作表有一个名为“tbl_IMD”的表

任何指导都将不胜感激

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不存在。我添加了一行数据,现在它正在工作!是的,我差不多在同一时间回答了,在写答案的时候看不到评论。