首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >excel vba:运行时错误'438‘

excel vba:运行时错误'438‘
EN

Stack Overflow用户
提问于 2017-07-31 21:39:44
回答 1查看 516关注 0票数 0

使用电子表格专家的代码遍历文件夹中的文件并对其执行设定的任务,似乎工作正常。我可能犯了错误的地方是代码的set task部分。

使用Excel 2010。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2017-07-31 21:44:40

有很多错误,我将尝试帮助一些错误。

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

代码语言:javascript
复制
sourcewb = ActiveWookbook

至:

代码语言:javascript
复制
Set sourcewb = ActiveWookbook

(Set masterwb = ThisWorkbook也是如此)。

接下来,masterwb.Activate,您不需要对工作簿执行Activate操作,而且还可以更安全地设置对所需工作表的引用,您还可以添加With语句,并使用如下内容:

代码语言:javascript
复制
With masterwb.Worksheets("SheetName")
    lr = .ListObjects("DataTbl").ListRows.Count ' number of rows in "DataTbl" table

您还可以将对象设置为您的ListObjects

代码语言:javascript
复制
Dim DataTbl As ListObject
Set DataTbl = masterwb.Worksheets("SheetName").ListObjects("DataTbl")

所以以后,你可以更容易地访问它的属性(更“干净”)。

例如:

代码语言:javascript
复制
lr = DataTbl.ListRows.Count ' <-- get the rows count of the table

和:

代码语言:javascript
复制
If DataTbl.DataBodyRange(lr, 1).Value = "" Then

以此类推,你有太多的地方可以先Activate这两个工作簿,然后再使用ActiveSheetSelection

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45417562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档