2016-10-26 55 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

相关问题