VBA调试打印产生意外和看似随机的输出

时间:2017-02-01 03:22:35

标签: vba excel-vba word-vba excel

任何人都可以对此有所了解。在MS Word VBA中,我有一个简单的Sub,它产生了意想不到的结果。 [编辑:此问题已在几个不同的MS Word安装中重现,但到目前为止只有Win10]

Repro环境:

  • Win10,Word 2010(32位)PC
  • Win10,Word 2010(32位)VM-Azure
  • Win10,Word 2016(32位)PC
  • Win10,Word 2010(64位)VM-Azure
  • Win10,Word 2016 365 @VincentG
  • Win10,Word 2007(32位)@Ambie
  • Win10(64),Word XP @ThunderFrame
  • Win10(64),Excel XP @ThunderFrame
  • Win8.1(64),Word 2013 @miroxlav(Win10之外的第一个版本)
  • Win8.1(64),Office 2016(32)@GSerg
  • Win10(64),Word 2007(x86)@PartricK
  • Win10(64),Excel 2007(x86)@PartricK

但没有责备:

  • Win7(64),Word 2007(32位)VM Azure
  • Win7(64),Word 2010(32?)@ JohnColeman
  • Win7(64),Word 2007(32)@Slai
  • Win7(64),Word 2003(32)@GSerg
  • WinXP(32),Word 2010(32)@GSerg
  • Win7(64),Office 2010(32)

重现的步骤: 打开新的Word文档 打开IDE(Alt + F11) 输入此代码

Option Explicit

Sub test()
Dim i As Integer
For i = 1 To 100
Debug.Print vbCr
Next
End Sub

运行测试Sub。

每次循环运行时,我的输出都会有所不同:

]Œ[p^"î;{Ñ[

]Œ[p^"î;{Ñ[

\ÒZžUÖè;qÑZ

ÿÿ

þþ@øø”¶(3

ÿÿ

>O

>O

>O

p

G   P‚j Ž¶&3@

p

最初我以为我可以识别我的文档中的一些内容,但是现在我得到了一个空白文档的类似结果,Word中没有任何其他内容。

直到我在其他Word安装中再现,这是非常令人不安的,现在它更多的是分心&困惑。

关于发生了什么的任何想法?

3 个答案:

答案 0 :(得分:2)

不是答案,但这里是.doc格式的doc字的p代码转储:

看起来vbCr没有损坏

_VBA_PROJECT parsing done.
-------------------------------------------------------------------------------
Module streams:
Macros/VBA/ThisDocument - 932 bytes
Macros/VBA/Module1 - 1478 bytes
Line #0:
        Option  (Explicit)
Line #1:
Line #2:
        FuncDefn (Sub test())
Line #3:
        Dim
        VarDefn i (As Integer)
Line #4:
        StartForVariable
        Ld i
        EndForVariable
        LitDI2 0x0001
        LitDI2 0x0064
        For
Line #5:
        Debug
        PrintObj
        Ld vbCr
        PrintItemNL
Line #6:
        StartForVariable
        Next
Line #7:
        EndSub

答案 1 :(得分:2)

@Comintern我早就推测立即窗口实际上是stdIn / stdOut的管道或管道。

如果我们在此基础上工作,那么这个答案有一些见解:

https://stackoverflow.com/a/25843879/5757159

  

文本流是由行组成的有序字符序列,每行包含零个或多个字符以及终止的换行符。

     

可能必须在输入和输出上添加,更改或删除字符,以符合在主机环境中表示文本的不同约定。

所以似乎Windows 10,可能在处理流时出错了?

解决方法是确保Debug.Print语句永远不会以vbCrChr(10)Chr$(10)

结尾

答案 2 :(得分:0)

我有一个类似的问题:set_position打印空白行,没有任何内容,或空行和“lls”。 它是随机发生的,我尝试了多次使用相同参数的相同功能,每次打印结果都不同(上述任何一种)。

我找到了另一种选择:

Debug.Print vbCr

这个替代方案破坏了一行代码,但结果确实是一个空行和“我的文本”,没有任何额外的随机文本。