Excel VBA粘贴可见单元格选择错误

时间:2017-08-04 08:24:37

标签: excel vba excel-vba

我还是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不能用于选择)。

如何进行选择?

1 个答案:

答案 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设置在代码表的顶部。请记住,最好在过程开始时进行所有声明,如果您想再给我一条建议,请考虑将工作表函数的结果写入工作表而不是工作表函数。