Excel 除非先执行debug.print,否则不会设置变量

Excel 除非先执行debug.print,否则不会设置变量,excel,vba,Excel,Vba,在我的工作表上,我单击一个按钮,该按钮触发下面的子按钮。该子按钮应该读取单击按钮位置的行和列,然后弹出一个消息框,其中包含同一行中隐藏单元格的内容 执行此代码时,除非添加debug.print语句,否则ipf变量始终保持为字符串初始值。我可以调试。打印任何变量ipf、行号、列号,并且ipf变量设置良好 添加debug.print后,单击相关按钮以获得正确的结果,然后删除debug.print,它将继续工作,直到重新加载工作表 我试着用一根弦来表示,以防出现问题,但我不明白它为什么要这样做 基本上

在我的工作表上,我单击一个按钮,该按钮触发下面的子按钮。该子按钮应该读取单击按钮位置的行和列,然后弹出一个消息框,其中包含同一行中隐藏单元格的内容

执行此代码时,除非添加debug.print语句,否则ipf变量始终保持为字符串初始值。我可以调试。打印任何变量ipf、行号、列号,并且ipf变量设置良好

添加debug.print后,单击相关按钮以获得正确的结果,然后删除debug.print,它将继续工作,直到重新加载工作表

我试着用一根弦来表示,以防出现问题,但我不明白它为什么要这样做

基本上,表格每行最多填充三个按钮,当单击其中一个按钮时,此代码将获取单击按钮的行和列,以提取单元格的值,该值将是三个字符串之一;首字母、首字母或末字母。在ipf变量中使用该字符串将属于从该行的另一个单元格中提取字符串以显示在消息框中的情况之一

除非存在debug.print,否则ipf变量始终为初始值

公共子显示定义MSGBox 作为对象的Dim obj_ 不,只要_ 不,只要_ wsMain As WORKEM'这是我们使用的工作表 '获取单击按钮的行和列 设置obj=ActiveSheet.buttonapplication.Caller 行号=obj.TopLeftCell.row col_no=obj.TopLeftCell.column '抓取名称,例如首字母、首字母、首字母 '单击按钮时,我们从按钮下的单元格中提取值。 “它将是首字母、首字母或最终字母 设置wsMain=ActiveWorkbook.SheetsMainSheet 作为字符串的Dim ipf ipf=CStrwsMain.Cellsrow\U no,col\U no.Value '获取元素名称 '这是一个字符串,它是行的名称 作为字符串的Dim元素 元素=wsMain.Cellsrow_编号,12.值 没有这个,ipf总是初始的 调试。打印ipf '从字典中提取文本 '13=初始,14=预激,15=最终 '使用上述ipf变量,将消息文本设置为内容 '主工作表中另一个单元格的。 将消息设置为字符串 选择案例ipf 案件首字母: message=wsMain.Cellsrow_no,13.值 案件预审: message=wsMain.Cellsrow_no,14.值 最终案例: message=wsMain.Cellsrow_no,15.Value 其他情况 message=找不到该元素类型: 结束选择 '显示消息框 “@TODO:将此更新为UserForm以获得更多空间 MsgBox消息,仅vbOKOnly,元素 端接头
我希望正确单元格中的值出现在msgbox中,但我总是从第一种情况中获取值,除非我添加debug.print行。

如果您能提供一个值,那就太好了。欢迎使用!当你提出一个问题时,试着增加一个最低限度的内容:输入样本、预期输出样本、你尝试了什么、研究和你在哪里卡住了。你能上传你的输入吗?当你一步一步地浏览你的代码的时候,注意“语言环境变量”窗口。Debug print没有设置任何变量,所以我敢肯定问题出在其他地方。例如,为什么要创建一个类模块以及WSMain是什么。我不确定我能不能提供一个最小的可复制的例子,因为如果没有像这样的代码,我无法让这种行为显示出来。clgGlobals包含用于工作表、字典和常用变量的getter/setter,但在本小节中,它所做的只是返回名为MainSheet的工作表。我已经用一些更详细的信息和更多的注释更新了文章。@MikePearce再次强调,除非我们能够重现问题,否则您不可能得到直接的解决方案。例如,如果问题是由clgGlobals中一些我们看不到的代码引起的呢?