2016-12-31 23 views
0

我想弄清楚如何根據列「F」中第一個空白單元格的位置粘貼一列「L」列中的單元格區域。這是我迄今爲止」PasteValues到與測試列相鄰的下一個空白單元

With Sheets("Sheet1") 

     .Range("H4:I" & .Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy  'January 
     Workbooks("2017 Plan.xlsx").Sheets("Consolidated").Range("L" & Cells(Rows.Count, "F").End(xlUp).Row).Offset(1, 0).PasteSpecial Paste:=xlPasteValues  'paste to 1+ rows paste last row used 

End With 

第一部分工作正常,但是當我試圖找到其中列的第一個空白‘F L’的分配值列開始‘’拋出一個錯誤。數據將被粘貼至是在表內的任何見解將不勝感激

+0

以下注釋的第一個版本中刪除。 –

+0

像這樣將命令串起來不是一個好主意。創建字符串需要花費時間,如果出錯則需要更長的時間來進行調試。列「A」中最後一次使用的行是4還是更多?複製可見單元看起來是一種奇怪的方式來獲得你想要的。打破這一點。將第一條語句的結果存儲在範圍變量中。檢查範圍變量是否包含您期望的範圍。將第二條語句的結果存儲在範圍變量中。檢查範圍變量是否包含您期望的單元格。 Debug.Print Rng.Address很有幫助。使用'Rng1,複製目的地:= Rng2'複製範圍。 –

回答

2

總是限定其片材被稱爲使用屬性時,如CellsRangeRows等:。

With Sheets("Sheet1") 
    'This line is missing a qualification of `Rows` 
    '.Range("H4:I" & .Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy  'January 
    .Range("H4:I" & .Cells(.Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy  'January 

    'This line is missing qualification of Cells and Rows 
    'Workbooks("2017 Plan.xlsx").Sheets("Consolidated").Range("L" & Cells(Rows.Count, "F").End(xlUp).Row).Offset(1, 0).PasteSpecial Paste:=xlPasteValues  'paste to 1+ rows paste last row used 
    Workbooks("2017 Plan.xlsx").Sheets("Consolidated").Range("L" & Workbooks("2017 Plan.xlsx").Sheets("Consolidated").Cells(Workbooks("2017 Plan.xlsx").Sheets("Consolidated").Rows.Count, "F").End(xlUp).Row).Offset(1, 0).PasteSpecial Paste:=xlPasteValues  'paste to 1+ rows paste last row used 

End With 

現在,最後一個語句是有點笨重,所以我們可以通過使用With塊簡化編碼:

With Sheets("Sheet1") 
    .Range("H4:I" & .Cells(.Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy  'January 
End With 

With Workbooks("2017 Plan.xlsx").Sheets("Consolidated") 
    .Range("L" & .Cells(.Rows.Count, "F").End(xlUp).Row).Offset(1, 0).PasteSpecial Paste:=xlPasteValues  'paste to 1+ rows paste last row used 
End With 

編輯:用XLMatters聊天后,我們發現,找到最後一個正常的做法列中使用的單元格不起作用,因爲目標位於表格內。這結束了正在使用的代碼是:

With Workbooks("2017 Plan.xlsx").Sheets("Consolidated") 
    .Range("L" & .Cells(2, "F").End(xlDown).Row + 1).PasteSpecial Paste:=xlPasteValues 
End With 

尋找最後一個單元格和粘貼的結果更健壯的方法是:

dim lastRow As Long 
With Workbooks("2017 Plan.xlsx").Sheets("Consolidated") 
    lastRow = .Columns("F").Find(What:="*", _ 
           After:=.Cells(1, "F"), _ 
           Lookat:=xlPart, _ 
           LookIn:=xlFormulas, _ 
           SearchOrder:=xlByRows, _ 
           SearchDirection:=xlPrevious, _ 
           MatchCase:=False).Row 
    .Range("L" & lastRow + 1).PasteSpecial Paste:=xlPasteValues 
End With 
+0

我嘗試了以上,它似乎運行。雖然沒有任何內容粘貼到「合併」表單上。它可能是我的'.end(xlUp).Row).Offset(1,0)'語句。我感覺好像處於錯誤的位置? – XLmatters

+0

'.Range(「L」&.Cells(.Rows.Count,「F」).End(xlUp).Row)'找到列L中與最後一個非空單元具有相同行號的單元在F列,然後'.Offset(1,0)'找到它下面一行的單元格。你也可以完成'。範圍(「L」&.Cells(.Rows.Count,「F」).End(xlUp).Row + 1)'因此避免了'Offset',但是你應該沒有錯。 – YowE3K

+0

您的區塊解決方案有效,但無法找到數據的位置。最後,我發現數據粘貼到的位置。它粘貼在我的桌子上一排。我需要的技巧是讓它在列「L」中過去一行將使用過的單元格粘貼到「E」列中的 – XLmatters

0

它更容易定義一個Worksheet對象, Set它到Workbooks("2017 Plan.xlsx").Sheets("Consolidated"),而不是記住在整個代碼中正確地重新輸入整個事物。

其次,由於您使用的是PasteSpecial僅複製值,因此不需要括號,您可以將xlPasteValues與空格相加。

評論如果A列中的數據未對齊,則結果可能不是您要查找的內容,而您正在從列H:I複製數據時查找最後一列。因爲在編輯下降到500個字符引入的誤差的

代碼

Option Explicit 

Sub PasteSpecialValues() 

Dim ConsolSht As Worksheet 

Set ConsolSht = Workbooks("2017 Plan.xlsx").Sheets("Consolidated") 

With Sheets("Sheet1") 
    .Range("H4:I" & .Cells(.Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy ' January 
    ConsolSht.Range("L" & ConsolSht.Cells(ConsolSht.Rows.Count, "F").End(xlUp).Row + 1).PasteSpecial xlPasteValues 
End With 

End Sub 
+0

當使用上面的代碼時,我收到了「編譯錯誤:只有註釋可能出現在End Sub,End Function或End Property」之後。 – XLmatters

+1

@XLmatters - 如果您的模塊中有其他代碼,並且您在現有代碼下面放置了**所有**的Shai代碼(包括「Option Explicit」行),則可能會出現該錯誤。 Option Explicit命令需要是代碼模塊中的第一行。 (它**可以**之後像'Option Base 0'之類的東西,但**通常**它將成爲代碼模塊中的第一行。) – YowE3K

相關問題