【问题标题】:Loop works fine on a single sheet, having trouble looping through workbook.循环在单张纸上工作正常,在循环工作簿时遇到问题。
【发布时间】:2015-11-28 12:17:15
【问题描述】:

我有一个包含几张工作表的工作簿,我正在尝试检测 C9:C200 中的数字并将它们复制到一个单元格中的三列以上 - 对于从第 7 个开始的每张工作表。最外面的 forloop 中的代码在单张纸上运行良好,但是当我尝试将其循环到其余的纸上时,我收到一条错误消息。我认为我有两个问题:

  1. 我不确定如何在工作簿中循环播放 c9:c200 范围

  2. 我想我需要告诉 VBA 重置评估,以便在下一张纸上从头开始。

我的方向正确吗?

谢谢!

Sub MoveQtrLoop()

Dim CEL As Range
Dim RNG As Range
Dim I As Integer
Dim WrkSht As Worksheet
Dim WS_Count As Integer

I = 0

WS_Count = ActiveWorkbook.Worksheets.Count

    For Each WrkSht In ActiveWorkbook.Worksheets

    I = I + 1

        If 6 < I < WS_Count Then

            Set RNG = ActiveSheet.Range("c9:C200")

                For Each CEL In RNG
                         If CEL.HasFormula = True Then
                            CEL.Offset(, 3) = CEL.Value

                         ElseIf IsNumeric(CEL) = True Then
                                    CEL.Offset(, 3) = CEL.Value

                         Else

                         End If ****ERR. OCCURS HERE****
                Next CEL
        Else

        End If
    Next WrkSht

结束子

【问题讨论】:

  • 错误说明了什么?

标签: excel vba loops if-statement for-loop


【解决方案1】:

它没有循环,因为您使用的是ActiveSheet 的范围。将其更改为:

Dim CEL As Range
Dim RNG As Range
Dim I As Integer
Dim WrkSht As Worksheet
Dim WS_Count As Integer

I = 0
WS_Count = ActiveWorkbook.Worksheets.Count
    For Each WrkSht In ActiveWorkbook.Worksheets
    I = I + 1
        If 6 < I < WS_Count Then
            Set RNG = wrksht.Range("c9:C200")
                For Each CEL In RNG
                         If CEL.HasFormula = True Then
                            CEL.Offset(, 3) = CEL.Value
                         ElseIf IsNumeric(CEL) = True Then
                                    CEL.Offset(, 3) = CEL.Value
                         Else

                         End If
                Next CEL
        Else

        End If
    Next WrkSht
End Sub

【讨论】:

  • 比我快 15 秒 ;)
【解决方案2】:

当您声明您的范围时,您是基于 ActiveSheet 进行的,但您没有通过每个循环激活以下工作表。但与其使用 ActiveSheet,不如使用 WrkSht 变量设置目标范围:

Set RNG = WrkSht.Range("c9:C200")

希望这能解决您的问题。

【讨论】:

  • 谢谢两位,如果调试器仍然运行到最里面。看来我还有一些工作要做。
  • 您遇到了什么错误?删除 ELSE 命令,因为它什么也没做。
  • 代码执行已中断。当我逐步完成时,我得到 [Cel.Value = 40011.15] , 40011.15 是某处数据中的实际数字。
  • 重新启动了工作表并运行了相同的代码,并且执行得很干净,不知道为什么......无论如何,感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
相关资源
最近更新 更多