【问题标题】:Excel VBA Iteration Copy and PasteExcel VBA 迭代复制和粘贴
【发布时间】:2015-01-13 12:19:57
【问题描述】:

我正在尝试创建一个宏来声明一系列单元格,并将每个单元格 1 一次复制并粘贴到单元格“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

【问题讨论】:

  • 您正在查看 Range C2:C100,如果不为空,请将数据复制到同一张工作表 A 列?
  • Set PartListRange = Sheets("Query").Range("C2:100")1 的问题是C2:C100
  • 一次只复制一个数据到单元格“A2”:)

标签: excel vba


【解决方案1】:

这是做同样事情的一种稍微不同的方式,使用.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

【讨论】:

  • 我将如何编辑它以便它复制的每个单元格都只粘贴到单元格“A2”中?
  • 你的意思是每行都有 A2 吗?你只会看到最后一个完成。因为他们都会重写它。如果你想这样做,你会说.Cells(2,"A")而不是(lRow, "A")
  • 是的,这就是我想要的。最终我会在每次迭代后调用另一个宏来根据单元格“A2”中的数据收集数据。
  • 修改为使用 MsgBox 暂停
  • 如何更改这行代码以使用列而不是行? lastRow = Sheets(sName).Range("C" & Rows.count).End(xlUp).row
【解决方案2】:
If Cel.Value <> "" Then

你拼错了细胞

ParListCell

和部分:P

【讨论】:

  • 这并不能修复错误。 Excel 说错误与 Set PartListRange = Sheets("Query").Range("C2:100") 行有关
  • 感谢您修复我的拼写错误 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多