0

我有一个 Excel 表“b.xls”,其中 A 列和 B 列的内容如下:

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 回答