我有一个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来解决; cell = a& b&角
然而结果却是无稽之谈。
代码:
Sub getpingms_switch_Click()
Dim x As Integer: Dim y As Integer
Dim c As Range
Dim p1 As String
Dim p2 As String
Dim p3 As String
Dim ms As String
p2 = "*"
p3 = "*"
For Each c In Sheets("Topology").UsedRange.Cells
If c.Value = "Switch$" Then
y = c.Column + 1: x = c.Row + 2
DoEvents
Do Until IsEmpty(Cells(x, y)) 'IsEmpty is a function that stops the Do Until when the cell is empty
If Left(Cells(x, y), 7) = "172.21." Then
ms = sPing(Cells(x, y)) 'sPing gets the ms of the pinged pc
p3 = p2
p2 = p1
p1 = ms
Cells(x, y + 1) = p1 & " ms " & "| " & p2 & "ms | " & p3 & " ms"
If p1 = "timeout" Then
Cells(x, y + 1).Interior.ColorIndex = "3"
ElseIf p1 < 16 And p1 > -1 Then
Cells(x, y + 1).Interior.ColorIndex = "4"
ElseIf p1 > 15 And p1 < 51 Then
Cells(x, y + 1).Interior.ColorIndex = "6"
ElseIf p1 > 50 And p1 < 4000 Then
Cells(x, y + 1).Interior.ColorIndex = "45"
Else
Cells(x, y + 1).Interior.ColorIndex = "15"
End If
End If
x = x + 1
Loop
End If
Next c
End Sub
从技术上讲,我在第一次运行后得到以下结果:
“18 ms | ms | * ms”
“1 ms | 18ms | ms”
-
“1 ms | 1ms | 18 ms”
“24 ms | 1ms | 1 ms”
-
“1 ms | 24ms | 1 ms”
“1 ms | 1ms | 24 ms”
“2 ms | 1ms | 1 ms”
-
“2 ms | 2ms | 1 ms”
“1 ms | 2ms | 2 ms”
-
“1 ms | 1ms | 2 ms”
“1 ms | 1ms | 1 ms”
-
“1 ms | 1ms | 1 ms”
“1 ms | 1ms | 1 ms”
“1 ms | 1ms | 1 ms”
-
“51 ms | 1ms | 1 ms”
“1 ms | 51ms | 1 ms”
-
-
“0 ms | 1ms | 51 ms”
“0 ms | 0ms | 1 ms”
我们怎么能解决这个问题?
编辑:我弄清楚为什么我会得到这些结果,但我无法知道如何解决这个问题。
答案 0 :(得分:1)
您想要的是在模块范围内声明的static变量。只要代码运行,静态变量就会保留其值。
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的引用并使用TempVar来完成同样的事情。