提问人:FoFE 提问时间:9/28/2023 最后编辑:braXFoFE 更新时间:9/29/2023 访问量:80
变量仅在第二次运行宏后获取值
Variable get value only after the second run of the macro
问:
我的问题是 variable1 没有得到“1”值。我已经多次检查了所调查的单元格是否包含“1111”值。如果我第二次运行宏,变量 1 将获得“1”值,但第一次永远不会。正确的工作簿和工作表已激活(已选中)。Variable1 是整数和公共的。该代码也已经在模块和工作簿中尝试过。
可能是什么问题?谢谢就是进步!
variable1 = 0
Workbooks.Open "workbook1.xlsx"
Workbooks("workbook1.xlsx").Activate
Workbooks("workbook1.xlsx").Worksheets("sheet1").Activate
For i = 1 To 300
If Cells(i, 2) = "1111" Then
variable1 = 1
Else
End If
Next i
If variable1 = 1 Then
GoTo xxx
Else
End If
还在for循环中尝试了以下操作,但结果相同:
Workbooks("workbook1.xlsx").Worksheets("sheet1").Cells(i, 2)
如果我手动打开“workbook1.xlsx”,而不是运行宏,结果就可以了。
我还尝试了打开工作簿后等待 5 秒的时间,但结果是挪威克朗。
答:
0赞
Notus_Panda
9/29/2023
#1
这就是我使用的,稍微清理了你的代码,但保持了大部分的原样,所以很容易理解错误可能出在哪里:
Option Explicit
Public variable1 As Integer
Sub test()
variable1 = 0
Dim wb As Workbook
Set wb = Workbooks.Open(Filename:="Q:\Test\TestFile.xlsx") 'change this to your actual path
Dim i As Long
With wb.Worksheets("Sheet1") 'change as needed
For i = 1 To 300
'Debug.Print .Cells(i, 2).Value 'for checking the values while testing
If .Cells(i, 2).Value = "1111" Then
variable1 = 1
End If
Next i
End With
If variable1 = 1 Then
GoTo xxx
End If
Debug.Print "Alas, no success :c"
Exit Sub
xxx:
Debug.Print "Success!"
End Sub
我在 B 列中隐藏了 2 个 1111 作为数字,再往下隐藏一个“1111”(文本),当它找到文本“1111”时,它直接转到了 xxx。希望这能帮助您了解哪里出了问题,但如果这对您不起作用,请告诉我。
评论
0赞
FoFE
9/29/2023
您好,感谢您的帮助!但不幸的是,它不起作用。我总是得到 0 作为变量值。我把以下内容放在 for 循环之后和之前:.cells(7,2)=“test” ->并且它有效(“test”在正确的单元格中),因此 for 循环在正确的 wb 和工作表上工作。我在 for 循环中放置以下内容:msgbox(.cells(i,2)) 并且它有效,并且在 msgbox 中看到了“1111”值,所以它应该没问题。但结果仍然是挪威克朗。当我手动打开工作簿,然后启动宏时,我的代码没问题。如果宏打开工作簿,则结果为 NOK。这很奇怪......
0赞
Notus_Panda
9/29/2023
您的值是在 B 列文本还是数字中?
0赞
FoFE
9/29/2023
发现问题。我将值复制到另一个工作簿,并将格式从常规更改为数字,现在结果没问题。所以这可能是根本原因。但是我仍然不明白,如果我运行宏 2 次,结果怎么会好(使用一般格式)?格式与第一次运行时相同...
0赞
Notus_Panda
9/29/2023
我不知道为什么第二次可以,除了进行某种重新计算之外,例如当您在文本格式的单元格中有一个公式并将格式更改为常规格式但它不会重新计算它时。我提供的代码在第一次运行它时工作正常,它搜索 1111(文本),如果我将其调整为如果我想搜索一个数字,它会正常工作。有时我不得不认输,承认失败,找到根本原因,因为这会占用太多时间。请记住 = 1111 表示数字,=“1111” 表示文本。.Cells(i, 2).Value = 1111
1赞
FoFE
9/29/2023
.单元格 (i,2)。值 = 1111 是解决方案,现在它起作用了!我已经在 cells(i,2).value=“1111” 之前尝试过,但使用“1111”。所以这是错误的。非常感谢!:)
评论