VBA 中变量值的意外覆盖

Unexpected overwriting of Variable values within VBA

提问人:Tcoghill 提问时间:10/31/2023 最后编辑:GSergTcoghill 更新时间:10/31/2023 访问量:59

问:

在缺席大约一年后,我回到了 VBA,我对遇到的一个问题感到非常困惑。我已经编写了多个遵循以下逻辑的脚本,所以我对这里发生的事情感到困惑。如果我忽略了一些明显的东西,那么我很乐意吞下我的骄傲......

下面的代码提取相当简单,因为它存储变量以构建文本字符串并创建文本文件。似乎许多变量正在被后面的变量所取代。例如,和 .当我单步执行代码时,正确地返回 5,下一行正确地返回 1 for ,但现在等于 1 已被 的值替换。STKQTY = 5Flg = 1STKQTYFlgSTKQTYFLG

您会注意到我之前在函数中使用了直接引用,这似乎有效,因此问题似乎是由变量引起的。If

x = 2
Fstr = ""

Do While D.Range("A" & x) <> ""
    If D.Range("A" & x) = "E" Then
        LStr = "E;" & D.Range("B" & x) & vbNewLine
    ElseIf D.Range("A" & x) = "L" Then
        SheetID = D.Range("C" & x).Value
        LStr = "L;" & D.Range("B" & x) & ";" & D.Range("C" & x) & vbNewLine
    Else
        Line = D.Range("D" & x)
        Site = D.Range("E" & x)
        PACQTY = D.Range("F" & x)
        STKQTY = D.Range("G" & x)
        Flg = D.Range("H" & x)
        SKU = D.Range("I" & x)
        LocID = D.Range("L" & x)
        If STKQTY = 0 Then
            Lot = ""
            LocID = ""
            Sta = ""
        ElseIf STKQTY > 0 And LocID = "" Then
            Lot = D.Range("J" & x)
            LocID = "STOCKTAKE"
            Sta = "A"
        Else
            Lot = D.Range("J" & x)
            Sta = D.Range("M" & x)
        End If
        
        LStr = "S;" & SesID & ";" & SheetID & ";" & Line & ";" & Site & ";" & PACQTY & ";" & STKQTY & ";" &     Flg & ";" & SKU & ";" & Lot & ";" & LocID & ";" & Sta

用直接单元格引用替换变量是有效的,但我将把变量用于其他函数,所以需要保持高效。

Excel VBA 变量

评论

0赞 FunThomas 10/31/2023
你声明了变量吗?它们是否在代码中的其他位置使用?
3赞 Nick.Mc 10/31/2023
这是完整的代码片段吗?我建议首先使用并正确声明 yout 变量,即Option ExplicitDim x as Integer
5赞 CHill60 10/31/2023
引用:“但我会将该变量用于其他函数”——为什么?公共变量可以被各种方式“覆盖”——坚持利用作用域

答: 暂无答案