Vba Excel-如果单元格不为空,请将特定行单元格复制到工作表2
基本上,如果第1页第I列中的单元格不为空,请将单元格A、B、I和L复制到下一个可用空白行的第2页。循环直到活页1上的行结束 我在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
.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