2013-04-16 110 views
0

我希望有人能夠幫助我,因爲我嘗試了很多來自其他站點的建議,但無法找到解決方案。將數據從一個工作表拖到另一個工作表

我有2個工作簿。一個包含要複製到另一個的字段列表。到目前爲止看起來非常容易,但是當我嘗試將表格名稱分配給變量時,它不存儲它,因此我無法稍後返回該表格。

我給你舉個例子

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.activate在它返回runtime error 424 - Object required.

我在做什麼錯sub Update_List後?

我想保留返回活動工作表名稱的功能。

任何人都可以幫助我嗎?

回答

1

你不必走那條路:)我不確定你指的是哪個網站,但你應該避免使用.Select.Activate。見this

您的代碼可以被重新寫爲(變化如適用)

Sub Sample() 
    Dim wbInput As Workbook, wbOutput As Workbook 
    Dim wsInput As Worksheet, wsOutput As Worksheet 

    '~~> From where you want to copy 
    Set wbInput = ThisWorkbook 
    '~~> This is the sheet which has the fields you want to copy 
    Set wsInput = wbInput.Sheets("List") 

    '~~> Destination workbook 
    Set wbOutput = Workbooks.Open("C:\Sample.xlsx") 
    '~~> Destination sheet 
    Set wsOutput = wbOutput.Sheets("List") 

    '~~> Copy the relevant range 
    wsInput.Range("A1:A10").Copy wsOutput.Range("A1") 
End Sub 
0

因爲homeWB不爲公用變量聲明你越來越對象所需的錯誤,也不是傳遞中Update_List子程序。

您可以修復,通過傳遞變量homeWBUpdate_List子程序:

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潰敗的建議,關於使用ActivateSelect應避免的99%時間。

+0

homeWB是否需要公開? – Santosh

+0

如果您明確傳遞變量作爲'Update_List'函數的必需參數,則不會。如果你不想在子程序之間傳遞變量值,那麼是的,你必須聲明爲公共變量。 –

+0

嘗試不聲明爲公共並查看是否有任何錯誤 – Santosh

0

請嘗試以下代碼。

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 
+0

Santosh。這是你第二次發佈類似於我的答案:) –

+0

我確信這篇文章也會被刪除。祝我好運 – Santosh

+0

沒有人會刪除這篇文章:)只是想告訴你,發佈相同的答案(或其變體)沒有意義;) –

相關問題