2017-08-04 116 views
0

我對VBA仍然很陌生,但我試圖將從不同工作簿複製的行和列的選擇粘貼到當前工作簿。我的問題是,當我嘗試粘貼時出現錯誤,因爲選擇大於目標選擇。下面的代碼的一部分(我知道,可怕的,與選擇):從可見單元格選擇錯誤Excel 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

下面的代碼不是解決方案,但它包含它。

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。請記住,最好的做法是在過程開始時進行所有聲明,如果您想允許我提供更多的建議,請考慮將工作表函數的結果寫入工作表而不是工作表函數。