Vba Excel-如果单元格不为空,请将特定行单元格复制到工作表2

Vba Excel-如果单元格不为空,请将特定行单元格复制到工作表2,vba,excel,copy-paste,Vba,Excel,Copy Paste,基本上,如果第1页第I列中的单元格不为空,请将单元格A、B、I和L复制到下一个可用空白行的第2页。循环直到活页1上的行结束 我在.Copy行不断收到错误9或450代码 我已将模块连接到表2上的按钮。这可能是原因吗 或者我应该使用与CopyPaste功能不同的功能吗 这就是我一直在尝试的代码 Option Explicit Sub copyPositiveNotesData() Dim erow As Long, lastrow As Long, i As Long last

基本上,如果第1页第I列中的单元格不为空,请将单元格A、B、I和L复制到下一个可用空白行的第2页。循环直到活页1上的行结束

我在
.Copy
行不断收到错误9或450代码

我已将模块连接到表2上的按钮。这可能是原因吗

或者我应该使用与CopyPaste功能不同的功能吗

这就是我一直在尝试的代码

Option Explicit

Sub copyPositiveNotesData()

    Dim erow As Long, lastrow As Long, i As Long

    lastrow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To lastrow
        If Sheet1.Cells(i, "I") <> "" Then
            Worksheets("Sheet1").Activate

            ' *** next line gives Err#450 "Wrong # of arguments or invalid property assignments" ****
            Worksheets("Sheet1").Range(Cells(i, "A"), Cells(i, "B"), _
                Cells(i, "I"), Cells(i, "L")).Copy

            Worksheets("Sheet2").Activate
            erow = WorkSheet2.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
            ActiveSheet.Paste Destination:=Worksheets("Sheet2"). _
                Range(Cells(i, "A"), Cells(i, "B"), Cells(i, "C"), Cells(i, "D"))
            Worksheets("sheet1").Activate
        End If
    Next i
    Application.CutCopyMode = False

End Sub
选项显式
子CopyPositiveNodesData()
昏暗的房间一样长,最后一排一样长,我一样长
lastrow=Sheet1.Cells(Rows.Count,1).End(xlUp).Row
对于i=2到最后一行
如果表1.单元格(i,“i”)”“那么
工作表(“表1”)。激活
“***下一行给出Err 450”错误的参数或无效的属性赋值”****
工作表(“表1”)。范围(单元格(i,“A”)、单元格(i,“B”)_
单元格(i,“i”),单元格(i,“L”)。复制
工作表(“表2”)。激活
erow=工作表2.单元格(Rows.Count,1).结束(xlUp).偏移量(1,0).行
ActiveSheet.Paste目标:=工作表(“Sheet2”)_
范围(单元格(i,“A”)、单元格(i,“B”)、单元格(i,“C”)、单元格(i,“D”))
工作表(“表1”)。激活
如果结束
接下来我
Application.CutCopyMode=False
端接头

问题似乎在于您试图一次复制多个不受支持的单元格(尝试在实际工作表中手动执行相同操作)。您需要复制单个单元格或连续范围。您可以进行4次复制/粘贴,也可以直接在目标工作表中设置值

尝试将复制/粘贴更改为以下内容(未测试):

Sub-copyPositiveNotesData()
Dim erow为长,lastrow为长,i为长,ws1为工作表,ws2为工作表
设置ws1=工作表(“表1”)
设置ws2=工作表(“表2”)
lastrow=Sheet1.Cells(Rows.Count,1).End(xlUp).Row
对于i=2到最后一行
如果表1.单元格(i,“i”)”“那么
与ws2
.Range(“A”&i).Value=ws1.Range(“A”&i).Value
.Range(“B”&i).Value=ws1.Range(“B”&i).Value
.Range(“I”&I).Value=ws1.Range(“I”&I).Value
.Range(“L”&i).Value=ws1.Range(“L”&i).Value
以
如果结束
接下来我
端接头

问题似乎在于您试图一次复制多个不受支持的单元格(尝试在实际工作表中手动执行相同操作)。您需要复制单个单元格或连续范围。您可以进行4次复制/粘贴,也可以直接在目标工作表中设置值

尝试将复制/粘贴更改为以下内容(未测试):

Sub-copyPositiveNotesData()
Dim erow为长,lastrow为长,i为长,ws1为工作表,ws2为工作表
设置ws1=工作表(“表1”)
设置ws2=工作表(“表2”)
lastrow=Sheet1.Cells(Rows.Count,1).End(xlUp).Row
对于i=2到最后一行
如果表1.单元格(i,“i”)”“那么
与ws2
.Range(“A”&i).Value=ws1.Range(“A”&i).Value
.Range(“B”&i).Value=ws1.Range(“B”&i).Value
.Range(“I”&I).Value=ws1.Range(“I”&I).Value
.Range(“L”&i).Value=ws1.Range(“L”&i).Value
以
如果结束
接下来我
端接头

您需要使用
Application.Union
将4个单元格合并成一行,如下代码所示:

完整修改代码

选项显式
子CopyPositiveNodesData()
昏暗的房间一样长,最后一排一样长,我一样长
Dim RngCopy As范围
带工作表(“表1”)
lastrow=.Cells(.Rows.Count,1).End(xlUp).Row
对于i=2到最后一行
如果修剪(.Cells(i,“i”).Value)”,则
设置RngCopy=Application.Union(.Range(“A”和i)、.Range(“B”和i)、.Range(“i”和i)、.Range(“L”)和i))
RngCopy.Copy“复制联合范围”
'获取“Sheet2”中的下一个空行'
erow=工作表(“Sheet2”)。单元格(工作表(“Sheet2”)。行数。计数,1)。结束(xlUp)。偏移量(1,0)。行
'粘贴到下一个空行中
工作表(“Sheet2”).范围(“A”和erow).粘贴特殊xlPasteAll
如果结束
接下来我
以
Application.CutCopyMode=False
端接头

您需要使用
Application.Union
将4个单元格合并成一行,如下代码所示:

完整修改代码

选项显式
子CopyPositiveNodesData()
昏暗的房间一样长,最后一排一样长,我一样长
Dim RngCopy As范围
带工作表(“表1”)
lastrow=.Cells(.Rows.Count,1).End(xlUp).Row
对于i=2到最后一行
如果修剪(.Cells(i,“i”).Value)”,则
设置RngCopy=Application.Union(.Range(“A”和i)、.Range(“B”和i)、.Range(“i”和i)、.Range(“L”)和i))
RngCopy.Copy“复制联合范围”
'获取“Sheet2”中的下一个空行'
erow=工作表(“Sheet2”)。单元格(工作表(“Sheet2”)。行数。计数,1)。结束(xlUp)。偏移量(1,0)。行
'粘贴到下一个空行中
工作表(“Sheet2”).范围(“A”和erow).粘贴特殊xlPasteAll
如果结束
接下来我
以
Application.CutCopyMode=False
端接头
您可以试试这个(未测试)

您可以试试这个(未测试)


错误告诉了你什么?在它的当前状态下,我得到错误代码450-“参数数量错误或属性分配无效”。错误告诉你什么?在它的当前状态下,我得到错误代码450-“参数数量错误或属性分配无效”。如何直接在目标工作表中设置值?@Uvulagirl另外,在模块顶部添加一行:
Option Explicit
,并编译项目以帮助识别未声明的变量或未知对象。@Macros感谢您指出我做错了什么!贵重物品
Sub copyPositiveNotesData()
    Dim erow As Long, lastrow As Long, i As Long, ws1 As Worksheet, ws2 As Worksheet
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")
    lastrow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To lastrow
        If Sheet1.Cells(i, "I") <> "" Then
           With ws2

               .Range("A" & i).Value = ws1.Range("A" & i).Value
               .Range("B" & i).Value = ws1.Range("B" & i).Value
               .Range("I" & i).Value = ws1.Range("I" & i).Value
               .Range("L" & i).Value = ws1.Range("L" & i).Value

           End With

       End If
    Next i

End Sub
Option Explicit

Sub copyPositiveNotesData()

Dim erow As Long, lastrow As Long, i As Long
Dim RngCopy As Range

With Worksheets("Sheet1")
    lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastrow
        If Trim(.Cells(i, "I").Value) <> "" Then
            Set RngCopy = Application.Union(.Range("A" & i), .Range("B" & i), .Range("I" & i), .Range("L" & i))              
            RngCopy.Copy ' copy the Union range

            ' get next empty row in "Sheet2"
            erow = Worksheets("Sheet2").Cells(Worksheets("Sheet2").Rows.Count, 1).End(xlUp).Offset(1, 0).Row
            ' paste in the next empty row
            Worksheets("Sheet2").Range("A" & erow).PasteSpecial xlPasteAll
        End If
    Next i
End With

Application.CutCopyMode = False

End Sub
Option Explicit

Sub copyPositiveNotesData()
    Intersect (Sheet1.Range("I2", Sheet1.Cells(.Rows.Count, "I").End(xlUp)).SpeciallCells(xlCellTypeConstants).EntireRow, Sheet1.Range("A:A", "B:B", "I:I", "L:L")).Copy Sheet2.Cells(Sheet2.Rows.Count, 1).End(xlUp).Offset(1, 0)
End Sub