Excel VBA 迭代复制和粘贴

Excel VBA Iteration Copy and Paste

我正在尝试创建一个宏来声明一系列单元格并将每个单元格一次复制并粘贴到单元格 "A2" 中。仅当列中的单元格存在数据时才会发生这种情况。

我收到的错误是 运行-时间错误“1004”应用程序定义或对象定义的错误。

我有更多的 C# 背景,所以我希望这只是一个语法错误,但这就是我目前所遇到的错误。

任何帮助将不胜感激。

Sub Update1()
'
' Update1 Macro
' Update
'
  Dim PartListRange As Range
  Dim PartListCell As Range

  Set PartListRange = Sheets("Query").Range("C2:100")

  For Each PartListCell In PartListRange.Cells
     If Cell.Value <> "" Then
         Worksheets("Query").Range(PartListCell).Copy _
         Destination:=Worksheets("Query").Range("A2")
         ActiveWorkbook.RefreshAll
     End If
  Next PartListCell

End Sub
If Cel.Value <> "" Then

你拼错了 Cell

ParListCell

和部分 :P

这是做同样事情的一种稍微不同的方法,使用 .Cells(row,col) 并使用循环设置值。

使用 lastRow,而不是第 100 行。如果需要,您可以更改它。我把它包括在内,因为大多数时候都需要它。

这是做什么的:

  • 循环遍历 2-100 或 2-lastRow 的范围,具体取决于您的选择。

  • 检查第 "C" 列中的值以确保它不为空。

  • 如果不为空,复制到Range("A2")。 (注意,条件匹配的每次迭代都会覆盖)

  • 暂停 运行 宏或调用另一个子程序,使用 MsgBox,在此示例中作为占位符

代码: 取消注释与 lastRow 相关的行以使用它。

Sub conditionalCopy()

'Dim lastRow As Long
Dim lRow As Long
Dim sName As String

    sName = "Query"
    'lastRow = Sheets(sName).Range("C" & Rows.count).End(xlUp).row

    'For lRow = 2 to lastRow        'Uncomment lastRow to use instead of 100 for max.
    For lRow = 2 To 100             'Range("C2:C100")    
        If Sheets(sName).Cells(lRow, "C").Text <> "" Then
            Sheets(sName).Range("A2").Value = Sheets(sName).Cells(lRow, "C").Value
            MsgBox("Here is your break in the action..." & vbNewLine & _
                   "Press Enter to continue loop")
        End If
    Next lRow

End Sub