为什么我的 VB6 变体会根据分配时间而变化?

2024-03-09

我是 VB6(以及任何形式的 Visual Basic)开发新手,我遇到了一个问题。下面可能存在词汇错误,因为我将代码格式化为在此处的帖子中更具可读性,但问题的本质仍然存在。这是代码

我的问题是显示的值MsgBox调用(第二组,引用变量的调用scrWord and resWord)根据我分配给变量的时间而有所不同scrWord and resWord。如果我分配给变量scrWord and resWord在上面显示的代码中未注释的第一个位置中,那么代码底部的消息框将打印我不感兴趣的字符串(例如,第一个 messageBox 将生成如下所示的输出srcws:resColNum:#)或看似垃圾数据。请注意,这意味着它将我在上一个消息框中使用的静态字符串分配给变量scrWord。这绝不是预期的行为,我不知道它是如何发生的。

另一方面,如果赋值是在消息框之前完成的,其中变量赋值在上面的代码中被注释,那么变量会打印一个不同的值,该值在某种程度上更像是预期的,但不完全是(通常,两个变量完全相同,或者当两个变量都应该是不同的字母字符串时,其中一个是数字)。

我对这个问题感到困惑,我相信这与GetData调用返回一个Variant数据类型。

谢谢你, 埃文

新代码发布在下面。还是不行。

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 and resWord显示“你好,世界”。

我仍然无法理解这种行为。


正如您所说,您是 VB6 的新手,这里有一些一般性的想法和建议。

第一个建议:除非你不这样做,否则永远不要使用变体really需要他们。使用您期望的具体数据类型。在MSDN http://msdn.microsoft.com/en-us/library/aa261347(VS.60).aspx有一个解释变体如何内部工作。比较变体时会发生隐式转换,因此如果您并不真正了解自己的数据,那就有点赌博了。

即使您的 GetData 函数返回 Variant,您也可以将返回值转换为该工作表列中的特定数据类型。因此,如果您的列仅包含字符串,请使用 CStr() 将其转换为字符串并将其放入字符串变量中。与数字相同,分为 double 或 long 变量。

您可能还想使用 VarType 函数来确定 Variants 中存储的值的实际类型。

以下更多的是调试工作流程,但也许它可以帮助您找到问题:

  1. 启用 Option Explicit 以避免未声明/拼写错误的变量问题。 (正如 DJ 已经提到的)

  2. 在每行之后生成调试输出,以确保您拥有所需的值而不是其他值。如果无法逐步调试或“Debug.Print”,那么您可以记录到外部日志文件或使用 MsgBox 。

  3. 将您的源代码与外部组件依赖项分离以进行测试。在您的情况下,尝试在不从外部网格读取数据的情况下重现问题(例如将变量设置为一些具体字符串)。然后你就会知道问题是出在你的编程逻辑上还是出在你必须处理的数据上。

  4. 请务必仔细检查您的外部数据源是否确实是您期望的数据源,而不是其他数据源。 (我经常遇到这种情况......)因此请检查您的网格在 (i,j) 处保存的数据以及它是否与您获得的数据匹配。

还有一点:在 VB6 中,字符串比较是区分大小写的,只要您不将“Option Compare Text”放在模块/类/表单的顶部。所以“你好世界”“你好世界”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 VB6 变体会根据分配时间而变化? 的相关文章

  • TypeScript:实现具有调用签名和索引签名的接口

    我想创建一个满足此类型的对象 interface I string x string number 并通过 TypeScript 类型检查 理想情况下 我希望不需要诉诸技巧 例如使用any作为中间步骤 我知道可以将其他字段添加到具有调用签名
  • 您可以传递“类型”作为参数吗?

    我想在 VB NET 中做类似以下的事情 可以吗 Function task value as Object toType as Type Return DirectCast value toType End Function 是的 有系统
  • 在 C 中如何将一种类型的变量更改为另一种类型?

    我要做 int main bla bla bla void onetype switch USER INPUT TYPE CASE CONVERT TO CHAR convert onetype VOID TO CHAR gt gt gt
  • Vista幻影目录

    我们有一个程序 安装程序会检查配置文件是否存在 如果存在 它不会复制该文件 它假设用户已修改其配置文件并希望保留这些修改 不幸的是 这是一个 Vista 之前的应用程序 它将配置文件保存在 Program Files 中 问题是 如果你在重
  • 具有继承类型的 Aux 模式推理失败

    我有一个复杂的玩具算法 我希望纯粹在类型级别上表示 根据饮食要求选择当天菜肴的修改 对卷积表示歉意 但我认为我们需要每一层才能达到我想要使用的最终界面 我的代码有一个问题 如果我们表达一个类型约束Aux 模式生成的类型基于另一个泛型类型 它
  • 什么时候应该使用双精度而不是十进制?

    我可以说出使用的三个优点double or float 代替decimal 使用更少的内存 速度更快 因为处理器本身支持浮点数学运算 可以表示更大范围的数字 但这些优点似乎只适用于计算密集型操作 例如建模软件中的操作 当然 当需要精度时 例
  • 需要从 DCOM 配置中删除对象 (DCOMCNFG)

    我们有一个带有 activex exe 和 com dll 的应用程序 安装后 我们会在 DCOM 配置中创建一个对象 如果我们尝试从 DCOM 配置中删除该对象 它就会关闭 直到我们再次重新打开它 想知道是否有任何程序可以从 DCOM 及
  • “结构类型防护”与“if”配合使用,但不能用作数组过滤谓词

    我有一个联合类型 Pet在下面的示例中 组合了多个对象类型 每个对象类型都有一个type指示其类型的属性 有时我有一个联合类型的数组 Pet 并且需要 filter 它基于type财产 这本身工作得很好 但为了避免多余的类型声明 我想确保
  • Erlang 中的非终止函数类型

    我正在学习 Erlang 并尝试使用 Dialyzer 在可能的情况下获得最大的类型安全性 有一点不太明白 什么是类型非终止的函数以及如何表示它 spec 有人能解释一下吗 永远循环且永不终止的函数具有返回类型no return 该返回类型
  • C++dynamic_cast vs 在静态枚举中存储对象类型?

    我正在为一个框架开发一个大的类层次结构 完成后将需要大量的类型转换 我的问题是 放入一个使用枚举来存储层次结构中所有对象类型的静态成员是多么愚蠢的想法 让每个类的成员都是静态的不会增加实例化对象的大小 并且会提供一种 可能 比dynamic
  • 未推断扩展接口的通用类型

    在下面的示例中 Typescript 可以推断出类型T在方法中foo从传递给它的参数bar 但它并没有推断出类型R 感觉应该如此 因为它知道类型T还有那个T extends I
  • Scala 'null' 是否算作另一种类型的实例?

    我有这个代码 class MyLinkedList T h T tail MyLinkedList T def prepend v T MyLinkedList T new MyLinkedList v this 我想知道我如何可以将第二个
  • obj[] 和 string[] 作为参数

    我在用Microsoft FSharp Reflection FSharpValue MakeUnion这需要一个Reflection UnionCaseInfo and an obj 可以为空 作为参数 但是 我得到了Type misma
  • Swift 中符合协议的泛型类型

    是否可以要求泛型类型的特定实例符合 Swift 中的协议 例如 假设我有一个名为的泛型类型Thing
  • VB6 变体类型

    我有面向对象的背景 为什么在此代码片段中 在消息框中 显示 Test 注意引号 我希望逻辑测试 If Test True 返回 False 因为变体包含布尔值而不是字符串 因此 我不希望出现消息框 但它确实出现了 Dim Test As V
  • 寻找示例项目和“如何创建”VB6 Activex EXE

    我正在学习如何创建 VB6 Active X EXE 我需要为许多 VB6 应用程序添加 打电话回家 到服务器的功能 我想集中此功能 但不想使用 DLL 来实现 因为我只想需要防火墙权限one程序 phone home ActiveX EX
  • 如果需要函数类型作为类型参数,如何输入 None?

    假设我有一个需要回调的函数 fn foo
  • mysql_query 保留返回时在表中创建的数据类型?

    我在mysql中有一个表 CREATE TABLE user id INT name VARCHAR 250 我查询表 result mysql query SELECT id name FROM user 我收集结果 while row
  • 枚举类型的 JAXB 元素

    所以我知道如何创建枚举类型 但是当我为其设置元素类型时 元素字段将只是字符串类型 而不是枚举类型 如何在我的模式中创建枚举并让 JAXB 将其生成为 java 枚举类型 这就是我创建枚举类型和元素的方式
  • 隐秘模板模板参数错误

    我正在尝试创建一个从 a 获取密钥的函数std map or an std unordered map 我可以使用简单的重载 但首先我想知道这段代码有什么问题 template

随机推荐

  • 将最大子宽度分配给其他子宽度的弹性框

    我有一组宽度应该相似的孩子 对于简单的孩子来说 宽度最大的孩子应该分配给其他孩子 我尝试使用flexbox但无法得到它 是否可以在弹性盒中实现或者我应该去实现JS解决方案 请参考我尝试过的示例 请不要发布任何 javascript 答案 f
  • While循环第二次忽略scanf

    include
  • 尝试调整 NSImage 的大小,使其变成 NSData

    我有一个 NSImage 我正在尝试像这样调整大小 NSImage capturePreviewFill NSImage alloc initWithData previewData NSSize newSize newSize heigh
  • 包含不区分大小写的方法而无需进行重大代码更改?

    有没有办法忽略 contains 方法的大小写 但同时使代码片段或多或少相同 This method returns a list of all words from the dictionary that include the give
  • 如何在 Google 地球插件上放置 html div?我想涉及到wmode

    我遇到麻烦了在 Google Earth 插件上放置一个 html div在网络应用程序中 任何帮助将不胜感激 它适用于地图 地形和混合模式 但在 Earth 模式 Flash 启动并自动将地图分层在顶部 Z 索引没有帮助 想必我可以做这样
  • UseDefaultCredentials 与 Exchange Web 服务

    我是一个相当新的程序员 我在工作中承担的任务之一是使用我们的自定义工具来创建草稿电子邮件并将其放入运行该工具的用户的草稿电子邮件文件夹中 我们目前使用 Exchange Server 2010 但正在迁移到 Exchange Online
  • Ajax 错误:SyntaxError:预期表达式,得到“<”

    我正在尝试从我的服务器登录到另一台服务器到我的其他站点 但这个错误每次都会出现 SyntaxError expected expression got lt
  • NoMethodError:nil 的未定义方法“匹配”:NilClass

    我的申请有一个大问题 我的网站位于 AWS 上 今天早上我进行了上限生产部署以在线添加新版本 但我的网址不再有效 这对我来说是一个非常非常大的问题 所以我把我的问题放在这里 I use Ruby on Rails EC2 S3 and sh
  • 线程意外唤醒

    我预计以下示例中的第二个线程会挂起 因为它等待一个没有相应通知的对象 相反 它会进入 println 可能是由于虚假唤醒 public class Spurious public static void main String args T
  • 为什么这个 VBA 生成的 QR 码会卡顿? (仅限条形码-vba-宏)

    Context 我在用仅条形码 VBA 宏 https code google com archive p barcode vba macro only 在这个帖子 https stackoverflow com a 31663859 66
  • 如何使用 fpdf php 创建双条形图?

    我在我的 php 项目中使用 FPDF 我希望在我的项目中拥有像上图这样的 PDF 版本双条形图 FPDF 有一种方法可以创建饼图和条形图http www fpdf org en script script28 php http www f
  • 如何加快大型 xlsx 文件的导入速度?

    我想要处理一个 200MB 的大型 Excel xlsx 文件 包含 15 个工作表和 100 万行 每行 5 列 并根据数据创建 pandas 数据框 Excel 文件的导入速度非常慢 最多 10 分钟 不幸的是 Excel 导入文件格式
  • java将列表字符串写入csv文件

    我有一些如下所示的数组字符串 请注意 每个玩家后面都有空格 显示不同的行 user1 track1 player1 user1 track2 player2 user1 track3 player3 我想根据行数 此处为空格 将该数组分为两
  • 使用 win32com 从 Python 加载 Excel 加载项

    我从这里的各种问题中看到 如果使用以下命令从 Python 打开 Excel 实例 xl win32com client gencache EnsureDispatch Excel Application xl Visible True w
  • 长按ListFragment

    我正在使用 ListFragment 并执行 onListItemClick 一切正常 但现在我想使用长项目点击 例如 setOnItemLongClickListener new OnItemLongClickListener for a
  • 如何从对象中递归删除子对象?

    我正在研究解决方案 我已经创建了基本的树形表格 每当用户单击展开时 与单击的行相关的数据将根据行数据显示在其下方 我已经实现了展开 折叠至 N 个嵌套级别的基本功能 但我只遇到一个问题 所以基本上所有行都有基于具有多个值的数组的条件展开按钮
  • 为什么需要内存对齐? [复制]

    这个问题在这里已经有答案了 可能的重复 内存对齐的目的 https stackoverflow com questions 381244 purpose of memory alignment 我在网上读了一些关于内存对齐的文章 可以理解
  • 从查询中检索单个值

    我正在尝试根据字符串字段用户名从单个表中检索整数值 我已经尝试使用存储过程和直接文本 当我执行存储过程时 我得到了正确的返回值 然而 正确的结果并没有出现 这是两组代码 直接文字 public int GetUserRole string
  • 如何创建一个具有透明背景和阴影的形状,但形状轮廓后面的阴影不应该是可见的?

    这里有点类似的问题 但答案是只删除海拔和阴影 不是我想要的 Android CardView 透明时有奇怪的边框 https stackoverflow com questions 31624085 android cardview wit
  • 为什么我的 VB6 变体会根据分配时间而变化?

    我是 VB6 以及任何形式的 Visual Basic 开发新手 我遇到了一个问题 下面可能存在词汇错误 因为我将代码格式化为在此处的帖子中更具可读性 但问题的本质仍然存在 这是代码 我的问题是显示的值MsgBox调用 第二组 引用变量的调