复制从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;)