2012-10-23 142 views
0

目前我正試圖寫一個子程序,將複製單元格,例如A1的問題:從一個工作表A10;到具有特定單元格(如A1,A2,B1,B2,B3,B5,C1,C2,C4,C5)的另一個工作表。問題是我無法在工作表名稱和範圍值中讀取的當前子集。下面是代碼如何將單元格數據複製到另一個表單中的單個單元格到特定單元格的範圍內?

'User will be able to copy cell data from one to another. 
Public Sub CopyCell(ByVal pv_worksheet_source As Worksheet, _ 
        ByVal pv_range_source_cells As Range, _ 
        ByVal pv_worksheet_destination As Worksheet, _ 
        ByVal pv_range_destination_cells As Range, _ 
        ByRef pr_str_error_message As String) 

'first the cells are compared for the data that is in them. 
If pv_range_source_cells.Cells.Count <> pv_range_destination_cells.Cells.Count Then 
    pr_str_error_message = pr_str_error_message & "The cell count " & pv_range_source_cells.Cells.Count & " and " & _ 
     pv_range_destination_cells.Cells.Count & " do not match. The cells of Initial Optics Input and Output cannot be copied!" 
    Exit Sub 
End If 


Dim source_cells As Range 
Dim i As Integer 
Dim ArrOut() As String 
Dim str_source_worksheet_name As String 
Dim str_destination_worksheet_name As String 



ArrOut() = Split(pv_range_destination_cells.Address, ",") 

i = 0 


For Each source_cells In pv_worksheet_source 
    pv_worksheet_destination.Range(ArrOut(i)).Value = source_cells.Value 
    i = i + 1 
Next 
End Sub 

正如你所看到的代碼是假設在源和目標表名稱看,他們的單元格的範圍進行復印。有類型不匹配,再加上我不知道如何在VBA中複製數據。該子文件必須保存在模塊格式中,因爲它將在整個工作簿中被其他工作表調用。下面是在源工作表上調用它的一個示例....

Private Sub CopyButton_Click() 
'User gets data copied over to specific cells 
    Dim str_error_message As String 
    Call CopyCell(Sheet1, _ 
        "A1:A10", _ 
        Sheet2, _ 
        "B1,B2,B3,C1,C2,C3,C4,D1,D2,D3", _ 
        pr_str_error_message:=str_error_message) 


End Sub 

這是錯誤從單擊按鈕時開始的位置。請幫忙,因爲我一直在處理這個問題好幾天了!我真的會認真對待它! :)

+1

你有沒有嘗試將你選擇的數據輸入到一個數組中然後將它們吐出到新的表格上? –

+0

當調用子,你是路過的範圍爲String通過將「A1:A10」,通過這是一個範圍,如表(「工作表Sheet1」)的範圍。(「A1:A10」),它會工作得很好。回到[答案] 我早前提供給你的以這種方式瞭解它的簡單性。 –

回答

2

阿爾魯應該是一個陣列,而不是字符串。

更改

Dim ArrOut as String 

Dim Arrout as Variant 

然後設置數組這樣的:

ArrOut = Split(pv_range_destination_cells, ",") 

然後調用 「粘貼」

For Each source_cells In pv_worksheet_source 
     for i = lbound(arrout) to ubound(arrout) 
      pv_worksheet_destination.Range(ArrOut(i)).Value = source_cells.Value 
     next i 
    Next 

編輯:你也設置pv_destination_cells如在複製按鈕點擊呼叫一個字符串,但它聲明爲在子範圍。你應該把它設置爲在原來的子字符串,如果你要在你的例子稱作爲一個字符串等,然後離開了從數組聲明「地址」因爲我已經反映在我上面的代碼

+0

+1,我的想法正好 –

+0

的陣列被適當地分類爲字符串寫入,因爲Range.Address屬性傳遞給它。如果代碼將字符串傳入範圍,代碼將按照寫入的方式工作,而不是字符串。 –

相關問題