2015-08-09 37 views
0

我有一些工作正常的代碼,但它不會選擇和粘貼最後一行數據。在第一列中選​​擇合併調用的範圍

列AL在每隔一行中都有一個值,例如行1,3,5(AL1:AL2,AL3:AL4,AL5:AL6是合併的單元格)。其他列沒有合併,並在第1-6行有值)。當我運行VBA代碼時,第6行未被包含(所有其他數據正在被正確粘貼)。

我想選擇單元格範圍,然後偏移1行(試圖拿起第6行),但似乎並沒有工作。我找不到解決方案。

Dim lr As Long 
Dim drng As Range 'dest range 
Dim srng As Range 'source range 
Dim ws As Worksheet 

For Each ws In ActiveWorkbook.Worksheets 
      lr = ws.Range("A1").SpecialCells(xlCellTypeLastCell).Row 
      Set srng = ws.Range("AL1:AP" & lr) 
      Set drng = SumSh.Range("B" & Rows.Count).End(xlUp)(2) 
      Set drng = drng.Resize(srng.Rows.Count, srng.Columns.Count) 
      drng.Value = srng.Value 
     Next ws 
+0

什麼是'ws.Range(「AL1:AP69」&lr)'旨在表示?您是否在要嘗試引用的單元格區域地址上運行debug.print? – Jeeped

+0

它應該說ws.Range(「AL1:AP」&lr)。這是一個數字表格。列AL已將每個行的單元合併(即每隔一行具有數據)。其他列在每一行都有數據。 – Seale

回答

1

將示例代碼更正爲ws.Range("AL1:AP" & lr)後,它無故障地運行或丟失任何行。第一列中的目標單元格未合併,但所有行均已合併。

Sub gettit() 
    Dim lr As Long 
    Dim drng As Range 'dest range 
    Dim srng As Range 'source range 
    Dim ws As Worksheet, SumSh As Worksheet 

    Set SumSh = Worksheets("Sum") 
    For Each ws In ActiveWorkbook.Worksheets 
     With ws 
      If .Name = "Sum" Then Exit For 
      lr = .Range("A1").SpecialCells(xlCellTypeLastCell).Row 
      Set srng = .Range("AL1:AP" & lr) 
      Set drng = SumSh.Range("B" & Rows.Count).End(xlUp)(2) 
      Set drng = drng.Resize(srng.Rows.Count, srng.Columns.Count) 
      drng.Value = srng.Value 
     End With 
    Next ws 
End Sub 

我確實必須設置目標工作表,因爲它已被留下未聲明和未分配。

我懷疑你的循環沒有選取目標工作表的下一個空白,因爲B列中的單元格未被合併。換句話說,它會覆蓋輸入數據的最後一行,因爲您要求列B中的下一個空白單元格,而列B始終有一個空白單元格開始最後一行。

該循環的最後一次迭代應該是正確的;儘管在列B的最後一行有一個空白單元格。解決方案:向下移動目標上的額外一行。

+0

感謝您的關注。問題是由於第一列中的合併單元格造成的。沒有合併時,它可以正常工作。合併時,最後一行被錯過。 – Seale

+0

@Seale - 您正在用SumSh.Range(「B」&Rows.Count).End(xlUp)(2)'設置每個目標範圍。如果B中的最後一個單元由於未合併的先前值傳輸而爲空,則最後一行將被新傳輸過寫。 – Jeeped

+0

你說得對。我把偏移量(1)放在那一行,它似乎已經完成了這個訣竅。謝謝你的幫助。 – Seale