复制从csv粘贴块数据到另一个excel文件

有没有办法不select工作簿来复制一个数据块有效?

这就是我现在正在做的事情:

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 

有没有selectMyWB的方式,那么范围?

另外,selection.paste感觉有点奇怪,我讨厌拷贝数据到剪贴板。

我希望有这样的东西:

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

谢谢你的帮助

直接select范围就像将三条线一起啮合一样简单:

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

编辑 – 我的错误 – 我跳过了比我想象的更多的步骤,实际上是凝结你的三个线,而不是两个,一个:)

(说实话,我永远不会给ActiveWorkbook本身一个单独的名称,除非我需要在代码中稍后将它作为工作簿)

避免复制/粘贴非常容易。 诀窍是确保您的源范围和目标范围是相同的大小和形状 – 一旦这是真的,你可以简单地使用代码

 RangeA.Value = RangeB.Value 

在你的情况下,你最好的select是先测量你的数据的大小。 例如

 '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 

也许你正在寻找更像这样的“干净”的东西?

 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 

编辑:另一种可能的方式将导致源单元格的值存储在一个VBAvariables,然后将其设置到目标单元格,但它将几乎相同:

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

HTH;)