使用 VBA(Excel 365 (16.0.12527.20880),德语)我正在尝试根据Office VBA 参考Checkbox1
将复选框( )标题的删除线属性设置为这应该可以工作。False
以下代码放置在(简化的)中并更改(并且是静态的,通过 VBA 编辑器创建,而不是在运行时通过代码创建Module1
)的删除线值。UserForm1.Checkbox1
UserForm1
Checkbox1
Sub ChangeCheckBox()
UserForm1.CheckBox1.Caption = "Test" 'this triggers the Init-Procedure, which only sets the Height and Width of the UserForm. This shouldn't effect the problem, but I'm mentioning it here so it's clear that the form has been initialized. But if I leave it out, it's the same problem.
'Pre-Test - works fine
'Check initial value
Debug.Print UserForm1.CheckBox1.Font.Strikethrough 'returns false (as it should)
'Write value and check it
UserForm1.CheckBox1.Font.Strikethrough = False
Debug.Print UserForm1.CheckBox1.Font.Strikethrough 'returns false (as it should)
'Write value and check it again
UserForm1.CheckBox1.Font.Strikethrough = False
Debug.Print UserForm1.CheckBox1.Font.Strikethrough 'returns false (as it should)
'This next line seeems to cause the post-test failure
tmpString = ThisWorkbook.Worksheets("Sheet1").Cells(tmpIndex, tmpColumn).Value
Debug.Print tmpString 'returns the correct value
'Post-Test - fails!!!
'Check initial value
Debug.Print UserForm1.CheckBox1.Font.Strikethrough 'returns false (as it should)
'Write value and check it
UserForm1.CheckBox1.Font.Strikethrough = False
Debug.Print UserForm1.CheckBox1.Font.Strikethrough 'returns true (should still be false)
'Write value and check it again
UserForm1.CheckBox1.Font.Strikethrough = False
Debug.Print UserForm1.CheckBox1.Font.Strikethrough 'returns true (definitely should return false now)
End Sub
在我的情况下,由于某种原因,该命令将框设置为True
而不是False
. 到目前为止,我已将问题定位到特定的代码行。“预测试”成功,“后测试”失败(其他一切正常)。请注意,我正在逐步使用调试模式,没有其他代码在“中间”执行。
如果我创建一个不同的表单并在那里尝试同样的事情,问题仍然存在。原来的程序是几百行代码,但我创建了上面的Testprocedure,问题仍然存在。我还可以通过仅使用一张工作表、一个用户表单/复选框和一个包含测试程序的模块从头开始创建一个新的 Excel 文件来重现它。
那么,到底为什么会tmpString = ThisWorkbook.Worksheets("Sheetname").Cells(tmpIndex, tmpColumn).Value
导致“后测”失败呢?
注意:此错误不能在所有机器上重现,我在不同的机器上尝试过。在那里,我无法重现该错误。