0

列Aと列Bに次のような内容のExcelシート「b.xls」があります。

Column A  Column B
C1         F1
C2         F2
C3         Z3

「b.xls」ワークブックのシート「Sheet1」の場所 C1 、 C2 、および C3 のコンテンツを、ワークブック「a.xlsm」のシート「Sheet1」の場所 F1 、 F2 、 Z3 にコピーしたい 私は次のマクロを書きました。実行時に、GetData の行の srcAddress ポイントにタイプの不一致エラーが表示されます。助けてください

b.xlsを開かずにデータをコピーする必要があります。

Sub Update_Data()
Dim rngA As Range
Dim rngB As Range
Dim srcAddress As Range
Dim destAddress As Range
Dim r As Long   'row iterator
Dim MyPath As String

MyPath = ActiveWorkbook.Path
If Right(MyPath, 1) <> "\" Then
    MyPath = MyPath & "\"
End If
Set rngA = Range("A2", Range("A2").End(xlDown))
Set rngB = rngA.Offset(0, 1)

For r = 1 To rngA.Rows.Count
Set srcAddress = Range(rngA(r).Value)
Set destAddress = Workbooks("a.xlsm").Sheets("Test_data").Range(rngB(r).Value)
GetData MyPath & "b.xls", "Sheet1", srcAddress, destAddress, True, True
'destAddress.Value = srcAddress.Value
Next

End Sub
4

1 に答える 1

1

私は次のコードを書いたばかりですが、b.xlsを開くべきではないことを読んだので、それはあなたが求めているものではないかもしれません。ただし、b.xlsを開くことが許可されていない場合、b.xlsのマッピングにアクセスするにはどうすればよいですか?

とにかく、ここにコードがあります、多分あなたはそれの一部を使うことができます。画面の更新を防ぐため、ユーザーは別のファイルが開かれていることを確認できません。

Sub UpdateData()
    Dim rngSource As Range
    Dim wbTarget As Workbook
    Dim wsTarget As Worksheet

    Application.ScreenUpdating = False 'This will prevent the workbook to be displayed during execution
    On Error Resume Next
    Set wbTarget = Workbooks("a.xls")
    If Err.Number Then
        Err.Clear
        Set wbTarget = Workbooks.Open(YourPath & "a.xls")
    End If

    Set wsTarget = wbTarget.Worksheets("Sheet1")

    With Worksheets("Sheet1")
        For Each rngSource In .Range("A1").Resize(.Range("A" & .Rows.Count).End(xlUp).Row)
            wsTarget.Range(rngSource.Offset(, 1).Value) = .Range(rngSource.Value).Value
        Next
    End With
    wbTarget.Save
    wbTarget.Close

    Application.ScreenUpdating = True
End Sub
于 2013-02-16T22:25:37.037 に答える