【问题标题】:Using a negative loop number in VBA在 VBA 中使用负循环数
【发布时间】:2015-08-10 20:25:30
【问题描述】:

我有一个 for 循环,在 Excel VBA 中使用 i 作为计数器。我有一个语句顽固地给我错误:

ActiveCell.FormulaR1C1 = "=VLookup(RC[-3],R3C7:R22C15,3)" & " & " & "R[-i]C" & " _ 

& " & "Vlookup(RC[-3],R3C7:R22C15,4)"

使用-i 显然会导致错误。我尝试添加 negi=-i,然后将 R[-i]C 更改为 R[negi]C,但这并没有解决问题。我在之前的代码中添加了一个 Dim negi as Integer 语句。

编辑:这里有更多代码。我正在使用两个循环。 rownumber 是外循环的计数器,i 是内循环的计数器。 i 的范围从 1 到 20,rownumber 的范围是直到到达第 3 列中的空白行为止。

Range("A25").Select
Dim Rownumber As Integer
Dim i As Integer
Dim negi As Integer
Rownumber = 1

' 这会启动外循环 Do While ActiveCell.Offset(0, 3) "" ' 添加二十行 ActiveCell.Offset(1, 0).Select

Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(19, 5)).Select
Selection.Insert Shift:=xlDown

ActiveCell.Offset(-1, 0).Select

对于 i = 1 到 20

ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = i
ActiveCell.Offset(0, 1).Select
 ActiveCell.Value = Rownumber
    ActiveCell.Offset(0, 1).Select
    ActiveCell.FormulaR1C1 = "=Vlookup(RC[-2],R3C7:R22C15,2)"
    ActiveCell.Offset(0, 1).Select
    negi = -i
    ActiveCell.FormulaR1C1 = "=VLookup(RC[-3],R3C7:R22C15,3)" & " & " & _
     "R[negi]C" & " & "& "Vlookup(RC[-3],R3C7:R22C15,4)"

    ....
    rownumber = rownumber + 1
    next i

我怎样才能在避免错误的同时做到这一点?

【问题讨论】:

  • 当它给你一个错误时 i 的值是多少?错误是什么?是否有可能您正在更改的单元格是 A1,而您告诉它转到 A0 [不存在]?
  • 提供您正在使用的完整代码示例。我们无法在您的脑海中阅读或直接从您的屏幕上阅读。
  • 已编辑添加更多代码以响应 cmets。
  • @Grade 'Eh" Bacon - 当我收到错误时 i 的值为 1。我收到的错误是 Run time error '1004': Application-defined or object-defined error

标签: excel vba for-loop counter


【解决方案1】:

公式构建中有几个错误的字符串连接。

i 必须在引用的字符串之外并连接在其中,& " & " & 可能没有做你想做的事。

ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-3],R3C7:R22C15,3)&" & _
                                   """ & ""&R[-" & i & "]C&"" & ""&" & _
                                   "VLOOKUP(RC[-3],R3C7:R22C15,4)"

请记住,您必须在带引号的字符串中使用双引号。

【讨论】:

    【解决方案2】:

    您可以执行从较大值到较低值的循环。这将从使用的最后一个单元格循环到第一个单元格。

    lRow = ws.UsedRange.Rows.count
    Do While lRow > 0
        lCol = ws.UsedRange.Columns.count
        Do While lCol > 0
            If InStr(ws.Cells(lRow, lCol), job) Then
    
            End If
            lCol = lCol - 1
        Loop
    
        lRow = lRow - 1
        ws.Range("A" & lRow).Activate
    Loop
    

    【讨论】:

    • 谢谢,马修。但问题不仅仅是“R[negi]C”声明中的论点。我用简单的“i”替换了“negi”,但它仍然失败。但是当我用“-1”替换“negi”时,它起作用了。我怀疑问题只是让 RC 格式接受一个变量。
    猜你喜欢
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    相关资源
    最近更新 更多