【发布时间】:2009-05-15 21:34:31
【问题描述】:
我是 VB6(以及任何形式的 Visual Basic)开发的新手,我遇到了一个问题。下面可能存在词汇错误,因为我在这里的帖子中将代码格式化为更具可读性,但问题的本质仍然存在。这是代码
我的问题是MsgBox 调用显示的值(第二组,引用变量scrWord 和resWord 的值)取决于我何时分配给变量scrWord 和resWord。如果我在上面显示的代码中未注释的第一个位置分配变量scrWord 和resWord,则代码底部的消息框将打印我不感兴趣的字符串(例如,第一个 messageBox 将产生一个类似于 srcws:resColNum:#) 的输出,或者看起来像是垃圾数据的输出。请注意,这意味着它将我在上一个消息框中使用的静态字符串分配给变量scrWord。这绝不是预期的行为,我不知道它是如何发生的。
另一方面,如果赋值是在消息框之前完成的,其中变量赋值在上面的代码中被注释,那么变量会打印一个不同的值,这有点像预期的,但不完全是(通常情况下,两个变量完全相同,或者一个是数字,但两者都应该是不同的字母字符串)。
我对这个问题感到困惑,我相信这与返回 Variant 数据类型的 GetData 调用有关。
谢谢, 埃文
新代码发布在下面。还是不行。
Dim srcWord As Variant
Dim resWord As Variant
Do While (BinsCol.GetData(grouprownum, 1) = binfromnum And nogroupfound = True)
Dim groupmismatch As Boolean
groupmismatch = False
For j = 1 To FormHyst.GroupList.ListCount
srcWord = sourceWS.Columns(j).GetData(i, 1)
resWord = "hello, world"
MsgBox ("srcws:" & srcWord & vbNewLine &_
"resws:" & resWord & vbNewLine &_
"test:" & (resWord <> srcWord))
Next
Loop
在这个新代码中,srcWord 和 resWord 都显示“hello, world”。
我仍然无法理解这种行为。
【问题讨论】:
-
您是否尝试过使用调试器运行该代码。 VB6 调试器相当不错。这应该比在周围散布 MsgBox 调用更好地向您显示意外行为的来源。
-
我正在编写一个 DLL 来扩展主机应用程序。我看到 VB6 调试器很好,但如果我必须运行主机应用程序,我不确定如何调试(否则,我对“GetData”的调用没有目标)
-
sourceWS 和 resultWS 对象是什么? Excel 工作表?
-
另外你为什么要把所有的东西都放在括号里? scrWord = (sourceWS.Columns(columnnum).GetData(rownum, 1)) 应该只是 scrWord = sourceWS.Columns(columnnum).GetData(rownum, 1)
-
那组外部括号是出于某种绝望的举动而添加的,我正在测试以确保它们保持平衡,然后将它们留在那里。 sourceWS 和 resultWS 是 Minitab 项目工作表对象。它们可与 Excel 工作表相媲美。在其列组件上调用的 GetData 函数返回一个变体类型。