我还是VBA的新手,但我试图将从不同工作簿中复制的行和列选择粘贴到当前工作簿。我的问题是,当我尝试粘贴时,它会出错,因为选择大于目标选择。下面的部分代码(我知道,可怕和选择):
dim i as long
Workbooks.Open Filename:="C:\Users\...\File1.xls"
Range("A15").Select
For i = 1 To n
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[1],RC[2])"
ActiveCell.Offset(1, 0).Select
Next i
Range("Q15").Select
For i = 1 To n
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-16] ,'[file2.xlsm]DST'!C1:C18,1,0)"
ActiveCell.Offset(1, 0).Select
Next i
ActiveSheet.Range("$A$14:$Q$103").AutoFilter Field:=17, Criteria1:="#N/A"
Range("A1").End(xlDown).SpecialCells(xlCellTypeVisible).Copy
Windows("File2.xlsm").Activate
ThisWorkbook.Worksheets("sheet2").Activate
Range("B1").End(xlDown).Offset(1, -1).Select
'moves the active cell to the data end of column A
Debug.Print "Active cell is " & ActiveCell.Address(False, False)
'it puts the cursor correctly here, but it errors out after in the selection
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
基本上,这是在系统导出文件(1)中添加新列的代码的一部分,其中稍后在VLOOKUP公式中使用由第二列和第三列组成的唯一搜索键来检查是否存在任何缺失的产品,如果存在,那些将被添加到报告文件(2)中,在那里的数据的末尾。列B用作列A的公式(另一个CONCATENATE
不能用于选择)。
如何进行选择?
答案 0 :(得分:0)
以下代码不是解决方案,但它包含它。
Dim WbTarget As Workbook
Dim WsT As Worksheet
Dim Rng As Range
Set WbTarget = Workbooks("File2.xlsm") ' must be open
Set WsT = WbTarget.Worksheets("Sheet2")
Set Rng = WsT.Range("B1").End(xlDown).Offset(1, -1)
With ActiveSheet
.Range("$A$14:$Q$103").AutoFilter Field:=17, Criteria1:="#N/A"
.Range("A1").End(xlDown).SpecialCells(xlCellTypeVisible).Copy Destination:=Rng
End With
基本上,它避免了PasteSpecial
方法,它需要源和目标范围大小相同。
它的一大缺陷是它对ActiveSheet
的引用。这里有代码来声明和设置工作簿,工作表和范围。永远不会选择或激活目标工作簿,工作表和范围。我建议你以同样的方式对待来源。
将Option Explicit
设置在代码表的顶部。请记住,最好在过程开始时进行所有声明,如果您想再给我一条建议,请考虑将工作表函数的结果写入工作表而不是工作表函数。