【问题标题】:Going through columns and setting a range with "Do while" loop in Vba遍历列并在 Vba 中使用“Do while”循环设置范围
【发布时间】:2017-06-12 21:18:26
【问题描述】:

我有一个时间序列数据范围,A 列有日期,B 列有价格。

此数据在前 200 行中有“N/A”(字符串,不是错误)(此数字不准确,每次运行文件时都会更改,因此我无法直接引用它)。

为了能够从没有“N/A”的范围绘制图形,我使用“Do While”循环遍历行,直到它不等于“N/A”,然后设置范围。

问题:由于某种原因,我的“i”计数器没有求和。循环开始然后以 i = 1 结束,它应该是 i = 最后一个“N/A”的行号。

代码的相关部分是:

i = 1
If SourceWorksheet = "Ret" Or SourceWorksheet = "Vol" Then

    Do While w.Sheets(SourceWorksheet).Cells(i, 2) = "N/A"

        i = i + 1     '****Problem IS HERE, IT IS NOT SUMMING TO i

    Loop

    Set RetRange = w.Sheets(SourceWorksheet).Range(Cells(i + 1, 1), Cells(xlLastCell))

Else

    Set RetRange = w.Sheets(SourceWorksheet).UsedRange

End If

Obs 1:在这种情况下,我设置 i = 1,但我已经尝试过不为其分配值,但出现错误。

Obs 2: 因为这是一个从 sub 接收参数的函数,所以 SourceWorksheet 是一个将由用户输入的参数。

关于这段代码有什么问题的任何想法?

【问题讨论】:

  • @YowE3K 我的单元格确实有字符串"=N/A",因为它们来自另一个将字符串放在那里的代码。这不是错误,它只是表明没有足够的数据可用。
  • @YowE3K 确实你是对的。我刚刚做到了。
  • 我的评论错了,代码确实有那个#。但即便如此,我已经尝试将其更改为“不可用”以避免 #N/A 问题,但它仍然不起作用。
  • 确实,你是对的。我只是要在代码中更改它以避免更多的混乱。关于套装,还有另一个好处。我在if的第二部分做了,但在第一部分忘记了。
  • @DGMS89 - 代码中的on Error Resume Next 是在剪切部分之前吗?我之所以问,是因为我吃过您的代码并收到了 Type Mismatch 错误,因此必须将 ...Cells(i, 2) 更改为 ...Cells(i, 2).Text 才能使其正常工作。

标签: vba excel loops do-while


【解决方案1】:

除了我们已经解决的许多其他问题之外,如果单元格 B1 不包含“N/A”(例如由于标题),您的循环将失败。

试试这个修改后的代码:

With w.Sheets(SourceWorksheet)
    If SourceWorksheet = "Ret" Or SourceWorksheet = "Vol" Then
        i = 2 ' or i=3, whatever row contains your first item of data
        Do While .Cells(i, 2).Value = "N/A"
            i = i + 1
        Loop

        Set RetRange = .Range(.Cells(i, 1), .Cells.SpecialCells(xlCellTypeLastCell))

    Else

        Set RetRange = .UsedRange

    End If
End With

【讨论】:

  • 非常感谢。我完全忘记了第二部分的 SpecialCells。
  • @DGMS89 - 您还省略了常量名称的CellType 部分。而且您没有使用对工作表的引用来限定Cells,这意味着它们会引用活动工作表,因此在尝试将它们用作SourceWorksheet 工作表上范围的边界时可能会崩溃.你今天肯定放假了!
  • @DGMS89 实际上,看起来 xlLastCell 确实有效 - 尽管 xlCellTypeLastCell 是 Intellisense 显示的“正确”常量。 xlLastCellExcel.Constants 中的常量(值为 11),xlCellTypeLastCellExcel.XlCellType 中的常量(也是 11)。
猜你喜欢
  • 2016-05-21
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 2011-12-11
  • 2011-12-25
  • 2016-01-01
  • 2012-09-26
  • 1970-01-01
相关资源
最近更新 更多