excel vba:运行时错误'438'

时间:2017-07-31 13:39:44

标签: excel-vba vba excel

使用电子表格专家中的代码循环浏览文件夹中的文件并对其执行设置任务,似乎工作正常。我可能犯错的地方是代码的设置任务部分。

使用Excel 2010.

sourcewb = ActiveWookbook
sourcefn = ActiveWorkbook.Name
masterwb = ThisWorkbook

masterwb.Activate
lr = ActiveSheet.ListObjects("DataTbl").ListRows.Count

If ActiveSheet.ListObjects("DataTbl").DataBodyRange(lr, 1).Value = "" Then
    sourcewb.Activate
    ActiveSheet.ListObjects("IntermidateTbl").DataBodyRange.Copy
    masterwb.Activate
    ActiveSheet.ListObjects("DataTbl").DataBodyRange(lr, 1).Select
    Selection.Paste
    newlr = ActiveSheet.ListObjects("DataTbl").ListRows.Count
    Range(ActiveSheet.ListObjects("DataTbl").DataBodyRange(lr, 8), _
    ActiveSheet.ListObjects("DataTbl").DataBodyRange(newlr, 8)) = "" & sourcefn & ""
Else
    ActiveSheet.ListObjects("DataTbl").ListRows.Add AlwaysInsert:=True
    sourcewb.Activate
    ActiveSheet.ListObjects("IntermidateTbl").DataBodyRange.Copy
    masterwb.Activate
    ActiveSheet.ListObjects("DataTbl").DataBodyRange(lr + 1, 1).Select
    Selection.Paste
    newlr = ActiveSheet.ListObjects("DataTbl").ListRows.Count
    Range(ActiveSheet.ListObjects("DataTbl").DataBodyRange(lr + 1, 8), _
    ActiveSheet.ListObjects("DataTbl").DataBodyRange(newlr, 8)) = "" & sourcefn & ""
End If

1 个答案:

答案 0 :(得分:1)

有一些错误,我会尝试帮助一些。

您正在尝试设置sourcewb,这是Workbook个对象,因此您需要更改:

sourcewb = ActiveWookbook

致:

Set sourcewb = ActiveWookbook

(同样适用于Set masterwb = ThisWorkbook)。

接下来,masterwb.Activate,您不需要Activate工作簿,并且设置对所需工作表的引用也更安全,您还可以添加With语句,并使用类似的东西:

With masterwb.Worksheets("SheetName")
    lr = .ListObjects("DataTbl").ListRows.Count ' number of rows in "DataTbl" table

您还可以将对象设置为ListObjects

Dim DataTbl As ListObject
Set DataTbl = masterwb.Worksheets("SheetName").ListObjects("DataTbl")

稍后,您可以更轻松地访问它的属性(并且“更干净”)。

例如:

lr = DataTbl.ListRows.Count ' <-- get the rows count of the table

If DataTbl.DataBodyRange(lr, 1).Value = "" Then

依此类推,你有太多地方Activate 2个工作簿,后来使用ActiveSheetSelection

如果您更好地描述了您想要实现的目标,我们可以帮助您以更可靠的方式实现目标。