簡體   English   中英

將過濾的單元格復制到另一張紙上

[英]Copy filtered cells to another sheet

我過濾了四行信息。 (月份,名稱,服務,單位)我按名稱和月份過濾信息。 (取決於所需的信息)我整理了以下內容,以嘗試獲取已過濾數據的第一行並將其放在另一張紙上。

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

好的,所以我認為您的代碼沒有按照您的想法做。 讓我們分開

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屬性可以將行和列作為參數。

您的歸檔范圍是表/列表對象還是只是帶有自動篩選的普通舊范圍? 如果是列表對象,則獲取列表對象,獲取其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從中獲得不同的列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM