簡體   English   中英

如何使用vba在excel中僅復制和粘貼過濾的單元格

[英]How to copy and paste only filtered cells in excel using vba

我一直在嘗試使用 vba 在我的 excel 表中的特定空間中復制和粘貼一系列過濾的單元格(查看圖像),但是當我嘗試這樣做時,

錯誤 1004

發生。 我在很多論壇中搜索並嘗試以不同的方式解決我的問題,但它不起作用並且錯誤 1004 仍然出現。

在此處輸入圖片說明

Sub arrumando_dados_pro_xml()
Dim n As Integer
Dim i As Integer
Dim m As Integer
Dim j As Integer



n = Cells(1000, 1).End(xlUp).Row



j = Cells(n - 1, 1).End(xlUp).Row


m = Cells(1, 50).End(xlLeft).Row




 Range(Worksheets("Planilha1").Cells(2, 1), Worksheets("Planilha1").Cells(j, m)).SpecialCells(xlCellTypeVisible).Copy
 '''Range("A2:P37").SpecialCells(xlCellTypeVisible).Select
 ''''Selection.SpecialCells(xlCellTypeVisible).Select
 '''Selection.SpecialCells(xlCellTypeVisible).Copy
 ''''Call Plan1.AutoFilter.Range.Copy

 Range(Worksheets("Planilha2").Cells(1, 1), Worksheets("Planilha2").Cells(1, m)).Paste

 Range(Worksheets("Planilha2").Cells(1, 1), Worksheets("Planilha2").Cells(1, m)).Copy

 Range(Worksheets("Planilha1").Cells(n, 1), Worksheets("Planilha2").Cells(n, m)).Copy

''' Range(Cells(n, 1), Cells(n, m)).Select
''' ActiveSheet.Paste



End Sub

由於您的代碼有點混亂,我對其進行了簡化。 這是一個帶有注釋的基本代碼示例,用於復制區域中的可見單元格並粘貼。 它可以根據需要進行修改。

'Declare your variables
Dim ws1 As Worksheet, ws2 As Worksheet, As Range, lRow As Long, lCol As Long

'Assign your variables, you should always identify the workbook and worksheet
'ThisWorkbook refers to the workbook where your code resides
Set ws1 = ThisWorkbook.Sheets("Planilha1")
Set ws2 = ThisWorkbook.Sheets("Planilha2")

'Using your worksheet variable find the last used row and last used column
lRow = ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row
lCol = ws1.Cells(1, ws1.Columns.Count).End(xlToLeft).Column

'Define your range by resizing using lRow and lCol.
Set rng = ws1.Cells(2, 1).Resize(lRow - 1, lCol)

    'Copy the visible cells in the range(normally used after filtering or with hidden rows/columns)
    rng.SpecialCells(xlCellTypeVisible).Copy
    'paste the copied range starting on row 1, after the last column with data, by using .Offset(, 1)
    ws2.Cells(1, 1).PasteSpecial xlPasteValues

如果您有任何問題,請提問,我會提供幫助。

編輯我修改了你的代碼,必須進行更改,請參閱評論

'Added worksheet variables
Dim ws1 As Worksheet, ws2 As Worksheet, n As Long, m As Long 'removed j As Long

Set ws1 = ThisWorkbook.Sheets("Planilha1")
Set ws2 = ThisWorkbook.Sheets("Planilha2")

n = ws1.Cells(1000, 1).End(xlUp).Row
'Removed [j = ws1.Cells(n - 1, 1).End(xlUp).Row] if there are no blank cells after "n" the new last used row then j = 1
m = ws1.Cells(1, 50).End(xlToLeft).Column 'you can't use .End(xlLeft).Row to get the last column

'changed j to n, if j = 1 then only the top two rows will be copied
ws1.Range(ws1.Cells(2, 1), ws1.Cells(n, m)).SpecialCells(xlCellTypeVisible).Copy

'when pasting, just use one cell
ws2.Cells(1, 1).PasteSpecial Paste:=xlPasteValues

Application.CutCopyMode = False 'Exits the CutCopyMode, removes "Marching Ants"

暫無
暫無

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

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