【问题标题】:VBA FOR loop runs for two loopsVBA FOR 循环运行两个循环
【发布时间】:2023-03-18 09:03:01
【问题描述】:

我正在尝试将名称列表从一个工作表复制并粘贴到另一个工作表中的特定单元格,这取决于“列表”工作表中的第 # 行是偶数还是奇数。

但是,FOR 循环只运行两个循环:即。第 # 行中的名称的 ONE 循环和第 # 行中的名称的 ONE 循环。

谁能告诉我我的错误在哪里?

我去掉了 IF 功能,一切正常。但我需要 IF 函数来确定奇/偶行号。

我目前的代码如下:

Sub Update_Print()


Dim i As Integer

For i = 7 To 1000
    Sheets("List").Select
    If i Mod 2 > 0 Then

        Cells(i, 1).Select
        Selection.Copy
        Sheets("Receipts").Select
        Cells(i + 30, 4).Select
        ActiveSheet.Paste

     Else
        Cells(i, 1).Select
        Selection.Copy
        Sheets("Receipts").Select
        Cells(i + 30, 10).Select
        ActiveSheet.Paste

    ActiveSheet.Print

Exit For

End If


Next i



End Sub

【问题讨论】:

  • 因为你在Else里面有Exit For,所以一旦你第二次运行循环,i = 8,所以i Mod 2 = 0,所以你进入Else部分,最后你到达你的Exit For 并退出For 循环。
  • 啊,是的,我现在明白了。非常感谢!

标签: vba excel for-loop if-statement


【解决方案1】:

for 循环和 if..else 循环可能放错了位置。

我是否可以提出以下建议,这也试图避免使用通常会减慢执行时间的复制粘贴。

Sub Update_Print()

Dim i As Integer
Dim sht1, sht2 As Worksheet
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Set sht1 = ActiveWorkbook.Sheets("List")
Set sht2 = ActiveWorkbook.Sheets("Receipts")

sht1.Activate
For i = 7 To 1000

    If i Mod 2 > 0 Then
        sht1.Cells(i, 1) = sht2.Cells(i + 30, 4)
    Else
        sht1.Cells(i, 1) = sht2.Cells(i + 30, 10)
    End If

Next i
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
sht1.PrintOut

End Sub

您是否尝试在宏运行后打印工作表?我注意到您的ActiveSheet.Print 的位置可能处于相当危险的位置,因为它会打印您的活动表大约 1000 次!我已经在循环之外分配了它,而不是在 For Loop 完全执行之后。

此方法复制值会更快,但不会带来任何格式。

【讨论】:

  • 在 else 部分,第一个 sht2 可能是 sht1 ?如果需要格式化,你也可以避免select 使用sht1.cells(i,1).copy sht2.cells(i+30,4) 之类的代码,例如
  • 感谢您发现这一点。它已被修复@PatrickLepelletier
  • 是的,我现在看到了 End For 循环的问题。我尝试了“=”方法。它会擦除 sht1 中所有单元格(i,1)中的数据。很奇怪。
  • 啊,是的,哈哈。在 'if then else' 中,所有 sht1 和 2 都颠倒了:(
  • 是的!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 2019-03-06
  • 2021-07-30
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
相关资源
最近更新 更多