2013-10-24 202 views
0

我有四行信息可以過濾。 (月份,名稱,服務,單位)我按名稱和月份過濾信息。 (取決於所需信息)我已經將以下內容放在一起,嘗試抓取最上面一行過濾的數據並將其放在另一張紙上。將過濾的單元格複製到另一個表格

Sub Mine() 
    Dim sht1 As Worksheet 
    Dim sht2 As Worksheet 
    Dim lRow As Long 

     Set sht1 = ThisWorkbook.Sheets("Export") 
     Set sht2 = ThisWorkbook.Sheets("DB1") 

     lRow = sht1.Cells(Rows.Count, "A").End(xlUp).Row + 1 

     sht1.Range("b" & lRow) = sht2.Range("A2" & Cells.SpecialCells(xlCellTypeLastCell).Row).SpecialCells(xlCellTypeVisible) 'Month 
     sht1.Range("a" & lRow) = sht2.Range("E2" & Cells.SpecialCells(xlCellTypeLastCell).Row).SpecialCells(xlCellTypeVisible) 'Client Name 
     sht1.Range("c" & lRow) = sht2.Range("C2" & Cells.SpecialCells(xlCellTypeLastCell).Row).SpecialCells(xlCellTypeVisible) 'Service 
     sht1.Range("d" & lRow) = sht2.Range("H1" & Cells.SpecialCells(xlCellTypeLastCell).Row).SpecialCells(xlCellTypeVisible) 'Units 

    End Sub 

這不會錯誤,它只是不會複製任何內容到「導出」工作表。我能得到任何東西從一張紙複製到另一張紙的唯一方法是取出特殊的單元。如下...

Sub Mine() 
Dim sht1 As Worksheet 
Dim sht2 As Worksheet 
Dim lRow As Long 

    Set sht1 = ThisWorkbook.Sheets("Export") 
    Set sht2 = ThisWorkbook.Sheets("DB1") 

    lRow = sht1.Cells(Rows.Count, "A").End(xlUp).Row + 1 

    sht1.Range("b" & lRow) = sht2.Range("A2") 'Month 
    sht1.Range("a" & lRow) = sht2.Range("E2") 'Client Name 
    sht1.Range("c" & lRow) = sht2.Range("C2") 'Service 
    sht1.Range("d" & lRow) = sht2.Range("H1") 'Units 

End Sub 

但如前所述,它只複製第一行,過濾或不復制。我的目標是獲取「DB1」的過濾頂行,並將其複製到「導出」中的已排序單元格。任何援助將不勝感激。

-JGr3g

+0

您可能需要將這些行更改爲類似:sht2.Range( 「A2:A」 &sht2.Cells.SpecialCells(xlCellTypeLastCell).Row).SpecialCells(xlCellTypeVisible)「月 – Sam

回答

1

好了,所以我不認爲你的代碼是做什麼你認爲它是。 讓我們有些除了

sht2.Range("A2" & Cells.SpecialCells(xlCellTypeLastCell).Row).SpecialCells(xlCellTypeVisible) 

你打電話sht2.Range(),並傳遞一個字符串。該字符串是"A2"Cells.SpecialCells(xlCellTypeLastCell).Row).SpecialCells(xlCellTypeVisible)的並置。

什麼是Cells.SpecialCells(xlCellTypeLastCell).Row).SpecialCells(xlCellTypeVisible)?隱含地,Cells是表示活動電子表格中的每個單元格的範圍,ThisWorkbook.ActiveSheet.Cells。然後你要求SpecialCells(xlCellTypeLastCell),並採取行? sht1和sht2發生了什麼?你沒有使用它們,你正在使用活動工作表?

所以,如果活動工作表的最後一個單元格是在第50,你所要求的"A2" & 50這將得到"A250",這將是空白,因爲上次使用的行50 ...第一

第一件事,我建議你避免使用字符串連接來查找單元格。沒有這"A" & numericVariable的東西。使用更直接的東西,如Cells(numericVariable, 1)。過度的字符串操作可能會傷害你。 cells屬性可以將行和列作爲參數。

你的filered範圍是table/listobject還是隻是一個普通的舊範圍,上面有一個AutoFilter?如果它是一個listobject,那麼得到listobject,得到它的DataBodyRange,然後使用.SpecialCells(xlCellTypeVisible),然後得到結果範圍的第一行。

同樣,如果它是一個自動過濾範圍,獲取目標數據範圍,整個數據範圍。一旦你有了,抓住可見的單元格,然後得到第一行。

編輯:未經測試的例子

set targetRow = ws.Range(ws.Cells(2, 1), ws.Cells(lRow, 5)).SpecialCells(xlCellTypeVisible).Row(1) 
targetSheet.Range("A2") = targetRow.Cells(1,2) 

好了,這是什麼做的?我正在工作表變量ws並獲取範圍。 .Range(ws.Cells(2, 1), ws.Cells(lRow, 5))。該範圍是從第二行,第一列,又名"A2"。它轉到第5列lRow中包含的行號,即"E" & lRow

從那裏它只有可見單元格.SpecialCells(xlCellTypeVisible)然後獲取第一區域的第一行中的選擇.Row(1)

一旦我們有第一排,我們可以從它那裏得到不同的列有兩種.Cells.Column

+0

爲什麼什麼試過好解釋有一個問題。可以從這個答案中學到一些東西,而不僅僅是提供一個答案+1 – datatoo

+0

偉大的建議順便說一句,我仍然有點困惑。無論如何,我們可以有一些代碼去解釋嗎?眼見爲實。 –

相關問題