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.activatesub Update_Listそれは戻りますruntime error 424 - Object required.

私は何を間違っていますか?

アクティブなシート名を返す関数を保持したいと思います。

誰でもこれで私を助けてもらえますか?

4

3 に答える 3

1

その道をたどる必要はありません :) どのサイトを参照したかはわかりませんが、.Selectとの使用は避けるべき.Activateです。これを見る

コードは次のように書き直すことができます (必要に応じて変更)

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
于 2013-04-16T18:33:46.903 に答える
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
于 2013-04-16T18:59:10.127 に答える