Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将数据从一个工作表拉到另一个工作表_Excel_Excel 2010_Vba - Fatal编程技术网

Excel 将数据从一个工作表拉到另一个工作表

Excel 将数据从一个工作表拉到另一个工作表,excel,excel-2010,vba,Excel,Excel 2010,Vba,我希望有人能帮助我,因为我尝试了许多其他网站的建议,但找不到解决办法 我有两本作业本。其中一个包含要复制到另一个的字段列表。到目前为止看起来非常简单,但当我尝试将工作表名称指定给变量时,它不会存储它,因此我以后无法返回该工作表 我给你举个例子 Function getActiveWBName() getActiveWBName = ActiveWorkbook.NAME End Function Dim homeWB Sub pull_data() Set homeWB =

我希望有人能帮助我,因为我尝试了许多其他网站的建议,但找不到解决办法

我有两本作业本。其中一个包含要复制到另一个的字段列表。到目前为止看起来非常简单,但当我尝试将工作表名称指定给变量时,它不会存储它,因此我以后无法返回该工作表

我给你举个例子

Function getActiveWBName()
    getActiveWBName = ActiveWorkbook.NAME
End Function

Dim homeWB

Sub pull_data()
    Set homeWB = Workbooks(getActiveWBName)
    homeWB.Activate
    Call Update_List
End Sub

Sub Update_List()
    Workbooks.Open Filename:=FullFilePath, UpdateLinks:=3

    Sheets("List").Activate
    Cells.Select
    Selection.Copy
    ActiveWorkbook.Close

    homeWB.Activate
    Sheets("List").Activate
    Range("A1").Select
    Selection.Paste
End Sub
进入
homeWB后,在
子更新列表中激活
,它返回
运行时错误424-需要对象。

我做错了什么

我希望保留返回活动工作表名称的函数


有人能帮我吗?

你不必走那条路:)我不确定你指的是哪个网站,但你应该避免使用
。选择
。激活
。看

您的代码可以重新编写为(根据需要进行更改)


由于
homeWB
未声明为公共变量,也未将其传递到
Update\u List
子例程,因此出现了一个需要对象的错误

您可以通过将变量
homeWB
传递到
Update\u列表
子例程来修复此问题:

Sub pull_data()
Set homeWB = Workbooks(getActiveWBName)
homeWB.Activate
Call Update_List(homeWB)

End Sub

Sub Update_List(homeWB as Workbook)
Workbooks.Open Filename:=FullFilePath, UpdateLinks:=3

Sheets("List").Activate
Cells.Select
Selection.Copy
ActiveWorkbook.Close

homeWB.Activate
Sheets("List").Activate
Range("A1").Select
Selection.Paste
End Sub
但是,我会听从Siddhart Rout上面关于使用
Activate
Select
的建议,这应该避免99%的时间。

尝试下面的代码

Dim homeWB As Workbook
Const FullFilePath = "C:\Users\Santosh\Desktop\ssss.xlsx" ' specify your path here

Sub pull_data()
    Set homeWB = ThisWorkbook
    Call Update_List
End Sub

Sub Update_List()

    Dim wkb As Workbook
    Set wkb = Workbooks.Open(Filename:=FullFilePath, UpdateLinks:=xlUpdateLinksAlways)
    wkb.Sheets("List").Cells.Copy homeWB.Sheets("List").Range("A1")

    wkb.Close
End Sub

桑托什。这是你第二次发布类似于我的答案:)我相信这篇文章也会被删除。祝meNo好运一个正在删除此帖子:)只是想告诉你,再次发布相同的答案(或其变体)是没有意义的;)homeWB必须是公共的吗?如果您显式地将变量作为
Update\u List
函数的必需参数传递,则为否。如果您不希望在子例程之间传递变量值,则为是,您必须声明为公共变量。我对
Update\u List
sub的调用方式进行了修改。在诸如
调用更新列表(homeWB)
之类的子例程之间传递对象变量时没有错误。
Dim homeWB As Workbook
Const FullFilePath = "C:\Users\Santosh\Desktop\ssss.xlsx" ' specify your path here

Sub pull_data()
    Set homeWB = ThisWorkbook
    Call Update_List
End Sub

Sub Update_List()

    Dim wkb As Workbook
    Set wkb = Workbooks.Open(Filename:=FullFilePath, UpdateLinks:=xlUpdateLinksAlways)
    wkb.Sheets("List").Cells.Copy homeWB.Sheets("List").Range("A1")

    wkb.Close
End Sub