2016-10-26 101 views
0

有沒有辦法不選擇工作簿來複制數據塊有效?將塊數據從csv粘貼到另一個excel文件

這就是我正在做的是正確的現在:

Set MyWB = ActiveWorkbook 
Set DataWS = MyWB.Worksheets("Data") 
Set TermDataRange = DataWS.Range("celltopaste") 

Workbooks("data.csv").Activate 
Range("A1").CurrentRegion.Copy 'selecting block data 
MyWB.Activate 
TermDataRange.Select 
Selection.PasteSpecial Paste:=xlPasteValues 

有沒有選擇MyWB,則該範圍的方法嗎?

另外,selection.paste感覺有點奇怪,我討厭拷貝數據到剪貼板。

我希望這樣的事情:

Workbooks("data.csv").Activate 
TermDataRange = Range("A1").CurrentRegion 

感謝您的幫助

+0

另一個選項可以是'數據'選項卡''從文本'和屬性中,您可以更改何時應該刷新數據。 – Slai

回答

3

直接選擇的範圍是作爲齧合的三條線一起作爲容易:

Set TermDataRange = ActiveWorkbook.Worksheets("Data").Range("celltopaste") 

編輯 - 我的錯誤 - 不是我想我會跳過一些步驟,實際上是冷凝三貴線,而不是兩個,成一種)

(說實話,我絕不會放棄正常除非我需要在後面的代碼中將其稱爲工作簿),否則不要使用複製/粘貼。關鍵是要確保你的源範圍和目標範圍是相同的大小和形狀 - 一旦這是真的,你可以簡單地使用代碼

RangeA.Value = RangeB.Value 

在你的情況,最好的辦法是測量的尺寸你的數據第一。例如

'give range("A1").current region a name just to make it less unwieldy 
CopyRange = Range("A1").CurrentRegion 
Datarows = CopyRange.Rows.Count 
Datacols = CopyRange.Columns.Count 
'set a range of same size starting from TermDataRange to move the values to 
set DestRange = Range(TermDataRange, TermDataRange(offset(Datarows -1, Datacolumns -1)) 
'move values directly rather than via copy-paste 
DestRange.Value = CopyRange.Value 
1

也許你正在尋找一些更「乾淨」的這樣嗎?

Option Explicit 

Sub CopyValueFromSheet() 

    Dim MyWB As Workbook 
    Dim DataWS As Worksheet 
    Dim TermDataRange As Range 
    Dim OtherWB As Workbook 

    ' To avoid screen flashing 
    Application.ScreenUpdating = False 

    Set MyWB = ThisWorkbook 
    Set DataWS = MyWB.Worksheets("Sheetname") 
    Set TermDataRange = DataWS.Range("DestinationCell") 

    Set OtherWB = Workbooks.Open("C:\Users\YourUsername\Desktop\CsvFileName.csv") 
    ' When opening a csv file there is only one worksheet with the same name as the csv file 
    OtherWB.Worksheets("CsvFileName").Range("SourceCell").Copy 
    TermDataRange.PasteSpecial Paste:=xlPasteValues 

    Application.ScreenUpdating = True 

End Sub 

編輯: 另一種可能的方式將導致存儲在VBA可變源小區的值,然後將其設置爲目的地小區,但是這將是幾乎相同的:

Dim VarValue As String 
    VarValue = OtherWB.Worksheets("CsvFileName").Range("SourceCell").Value 
    TermDataRange.Value = VarValue 

HTH)

+0

感謝絕對清潔!仍試圖停止使用剪貼板! :) –

+0

我不知道其他方式比使用'.Copy',如果你想獲得一個特定的單元格,然後複製它的價值。至少這樣你可以避免使用'.Activate'和'.Select' :) – RCaetano

+0

@StevenG,這種方式你不使用'.Copy',但它非常相似,並且會返回相同的結果。 – RCaetano

相關問題