2017-07-31 707 views
0

使用电子表格专家中的代码循环浏览文件夹中的文件并对它们执行设置任务似乎工作正常。我可能犯了一个错误的地方是代码的设定任务部分。excel vba:运行时错误'438'

使用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

有超过了一些错误,我会尽力帮助一些。

您正在尝试设置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

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

+0

感谢您的帮助@ShaiRado!我给几个项目主管建立了一个数据表的文件,即“IntermediateTbl”,这些文件保存在一个文件夹中。从我的主文件中,我想打开线索文件复制IntermediateTbl并粘贴到我的DataTbl中。我用你的评论来编辑我的代码。现在我得到运行时错误'13':类型不匹配。 –

+0

类型不匹配来自行Set sourcewb = ActiveWookbook –