2013-02-16 78 views
0

我有一個excel表「b.xls」,其中列A和列B具有這樣的內容:宏編譯錯誤

Column A Column B 
C1   F1 
C2   F2 
C3   Z3 

我要複製在位置C1內容,C2,和片材的C3 「b.xls」工作簿的「工作表1」到工作簿「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 
+2

什麼是'GetData'這裏,外部程序或任何? – 2013-02-16 17:47:29

回答

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