Excel VBA:循环遍历 ActiveSheet 中的单元格

Posted

技术标签:

【中文标题】Excel VBA:循环遍历 ActiveSheet 中的单元格【英文标题】:Excel VBA: Looping Though Cells In ActiveSheet 【发布时间】:2012-08-11 22:32:42 【问题描述】:

我正在尝试遍历指定数量的单元格(由宽度和高度定义),但我在这里遇到了问题。它一直在我身上停滞不前,然后对以下事情感到不安:

If .Cells(11 + row, col).Value > maxVal Then

它给了我一个“应用程序定义或对象定义错误”

谁能告诉我我的代码哪里出了问题:

Sub ApplyFilter()

    Dim maxVal As Double
    Dim minVal As Double

    maxVal = ActiveSheet.Range("D10").Value
    minVal = ActiveSheet.Range("D11").Value

    Dim width As Integer
    Dim height As Integer

    width = ActiveSheet.Range("L3").Value
    height = ActiveSheet.Range("L4").Value


    Dim row As Integer
    Dim col As Integer
    ActiveSheet.Select
    With Selection
        row = 1
        Do
            col = 1
            Do

                If .Cells(11 + row, col).Value > maxVal Then
                    .Cells(11 + row, col).Value = 0
                End If
                If .Cells(11 + row, col).Value < minVal Then
                     .Cells(11 + row, col).Value = 0
                End If
                col = col + 1
                width = width - 1
            Loop Until width = 1
            row = row + 1
            height = height - 1
        Loop Until height = 1
    End With


End Sub

【问题讨论】:

没有 column=0 的单元格。你应该从 1 点开始。 【参考方案1】:

这里的问题是我没有为每个新行重置宽度值。我应该一直使用 For 循环,这样可以更直观地处理问题。

【讨论】:

【参考方案2】:

有时 Excel 会无缘无故地给出“应用程序定义或对象定义错误”because it's just the way Excel is,但这里可能不是这种情况。

不要使用SelectSelection 与对象交互。直接命名对象。

Dim ws As Worksheet
Set ws = ActiveSheet

With ws
  ...
End With

【讨论】:

谢谢。我解决了这个问题,但它仍然在同一行上给我同样的(可能是随机的)错误。 @user1588214 那时rowcol 有什么值? col(现在称为“j”)显然是导致问题的原因。在这种情况下,每行应该停止在 479 时,它超过 16,000。宽度有负值,-16,000 + 啊,当行增加时,我需要在循环中重置宽度。杜尔。这就是问题所在。嗯,我觉得很聪明。 我想补充一点,我应该在这里使用 For 循环。它本来可以完全避免这个问题,因为这是它的目的。

以上是关于Excel VBA:循环遍历 ActiveSheet 中的单元格的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA:循环遍历 ActiveSheet 中的单元格

Excel VBA 函数循环遍历范围并测量多个相关性

访问中的 Vba 代码循环遍历文件夹中的所有 excel 文件,打开、保存和关闭它们

在 VBA 循环中保存 excel 文件

指定要循环通过 Excel/VBA 的附加目录

VBA:循环遍历各种Excel文件并将列复制到主文件中[关闭]