excel vba为同一子系统中的下一个变量提供值

excel vba为同一子系统中的下一个变量提供值,vba,variables,excel,Vba,Variables,Excel,我有一个sub,每次运行它时都会得到值。我想做的是,每次子运行时,向另一个变量添加一个变量。例如,我在sub中有x,a,b,c变量 假设子系统运行4次,每次运行时,x都会得到以下值:1。"5" 2. "2" 3. "7" 4. “11” x将值转发给a。a、 将b、和c写入单元格,结果应为| 5 | | |-| |-| 在第二次运行时,b应该得到a的值,a应该得到新x的值。然后我们得到结果:| 2 | | 5 | |-| 第三轮,我们还有一个c:| 7 | 2 | 5| 第四:11 | 7 |

我有一个sub,每次运行它时都会得到值。我想做的是,每次子运行时,向另一个变量添加一个变量。例如,我在sub中有x,a,b,c变量

假设子系统运行4次,每次运行时,x都会得到以下值:1。"5" 2. "2" 3. "7" 4. “11”

x将值转发给a。a、 将b、和c写入单元格,结果应为| 5 | | |-| |-|

在第二次运行时,b应该得到a的值,a应该得到新x的值。然后我们得到结果:| 2 | | 5 | |-|

第三轮,我们还有一个c:| 7 | 2 | 5|

第四:11 | 7 | 2|

逻辑上,这可以通过c=b,b=a,a=x来解决;单元=a&b&c

然而,结果却是胡说八道

代码:

Sub-getpingms\u开关\u点击()
尺寸x为整数:尺寸y为整数
调光范围
将p1设置为字符串
将p2设置为字符串
将p3变暗为字符串
将ms设置为字符串
p2=“*”
p3=“*”
对于每个表中的c(“拓扑”).UsedRange.Cells
如果c.Value=“开关$”则
y=c.列+1:x=c.行+2
多芬特
Do Until IsEmpty(Cells(x,y))'IsEmpty是一个函数,在单元格为空之前停止Do
如果左(单元格(x,y),7)=“172.21.”则
ms=sPing(单元格(x,y))'sPing获取ping pc的ms
p3=p2
p2=p1
p1=毫秒
单元格(x,y+1)=p1&“ms”&“ms”&p2&“ms”&p3&“ms”
如果p1=“超时”,则
单元格(x,y+1).Interior.ColorIndex=“3”
如果p1<16和p1>-1,则
单元格(x,y+1).Interior.ColorIndex=“4”
如果p1>15且p1<51
单元格(x,y+1).Interior.ColorIndex=“6”
如果p1>50且p1<4000,则
单元格(x,y+1).Interior.ColorIndex=“45”
其他的
单元格(x,y+1).Interior.ColorIndex=“15”
如果结束
如果结束
x=x+1
环
如果结束
下一个c
端接头
从技术上讲,我在第一次运行后得到以下结果:

“18毫秒|毫秒|*毫秒”

“1毫秒| 18毫秒|毫秒”

-

“1毫秒| 1毫秒| 18毫秒”

“24毫秒| 1毫秒| 1毫秒”

-

“1毫秒| 24毫秒| 1毫秒”

“1毫秒| 1毫秒| 24毫秒”

“2毫秒| 1毫秒| 1毫秒”

-

“2毫秒| 2毫秒| 1毫秒”

“1毫秒2毫秒2毫秒”

-

“1毫秒| 1毫秒| 2毫秒”

“1毫秒| 1毫秒| 1毫秒”

-

“1毫秒| 1毫秒| 1毫秒”

“1毫秒| 1毫秒| 1毫秒”

“1毫秒| 1毫秒| 1毫秒”

-

“51毫秒| 1毫秒| 1毫秒”

“1毫秒| 51毫秒| 1毫秒”

-

-

“0毫秒| 1毫秒| 51毫秒”

“0毫秒| 0毫秒| 1毫秒”

我们怎样才能解决这个问题

编辑:我知道了为什么会得到这些结果,但我不知道如何解决这个问题。

您想要的是在模块范围内声明的变量。只要代码在运行,静态变量就会保持其值

Private Static variable As Integer

Private Sub Counter()
    variable = variable + 1
End Sub

Public Sub Main()
    Dim i as Integer
    For i = 0 To 10
        Counter
        MsgBox variable
    Next
End Sub
每次执行此代码时,它都会增加变量计数器

现在,如果您不打算在循环中运行函数,而是说,希望通过单击按钮来执行此操作,那么当代码完成运行时,静态变量将丢失其值。在这种情况下,我建议将中间值存储在隐藏的工作表中


如果您真的想变得有趣,您可以添加对Access的引用,并使用来完成同样的事情

考虑将sub上方的字符串变量调暗。这样,它们将是静态的,并在每次运行时保持其值。这是一个好主意,我正在考虑将其存储在数组中。我会努力让它工作。谢谢你的主意!
Private Static variable As Integer

Private Sub Counter()
    variable = variable + 1
End Sub

Public Sub Main()
    Dim i as Integer
    For i = 0 To 10
        Counter
        MsgBox variable
    Next
End Sub