小编Slo*_*ner的帖子

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

任何人都可以对此有所了解.在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?)@ JohnKoleman
  • 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
Run Code Online (Sandbox Code Playgroud)

运行测试Sub.

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

]Œ[p^"î;{Ñ[

]Œ[p^"î;{Ñ[

\ÒZžUÖè;qÑZ
Run Code Online (Sandbox Code Playgroud)

要么

ÿÿ

þþ@øø”¶(3

ÿÿ …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba word-vba

12
推荐指数
1
解决办法
494
查看次数

我见过的最奇怪的VBA问题(在布尔条件下VBASigned可能的错误)

在MS Word中,我添加了一些代码来查看文档是否缺少其数字签名,或者至少我认为我做了.我决定在其他系统上测试之前分享.

Sub test()
    If Not ThisDocument.VBASigned Then
        Debug.Print "I am NOT signed"
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

问题:无论文档是否具有数字签名,上述代码都会产生相同的结果.如果我通过删除我修改代码Not仍然会得到意想不到的结果.

我试图通过以下方式来强迫事情:

If Not CBool(ThisDocument.VBASigned) Then
Run Code Online (Sandbox Code Playgroud)

但更令人惊讶的是,以下代码也失败了:

Sub test()
    Dim isSigned As Boolean
    isSigned = ThisDocument.VBASigned

    If Not isSigned Then
        Debug.Print "I am NOT signed"
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

即使ThisDocument.VBASignedAND isSigned都是TRUE......
我的代码运行的快照 但如果改变isSigned = ThisDocument.VBASigned,isSigned = True那么一切都按预期工作.

谁能证实这一点?有什么想法吗?


以下编辑回答了一些问题:

  1. 是的,使用Option Explicit,Yes也试过Debug.
    这段代码:

    Option Explicit
    
    Sub test()
        Dim isSigned As Boolean
        isSigned …
    Run Code Online (Sandbox Code Playgroud)

excel vba ms-word excel-vba word-vba

6
推荐指数
1
解决办法
183
查看次数

在 VBA 中,应该避免在类模块中修改文档的代码

我开始在 VBA 中使用类,并欣赏 SO 上已经提供的一些精彩信息。

据我所知,似乎缺少的是对类中的代码应该做什么的解释,或者,正如我怀疑的那样,不应该做什么。例如:

假设我有一个文档并希望插入/修改一个表格。在这个例子中,我想:

  • 检查表是否存在
  • 如果表不存在:
    • 在特定位置添加表格
    • 向表中添加信息(即添加行)
  • 如果表确实存在
    • 向/从表中添加/删除信息
    • 根据某些标准对表格进行排序

关于“排序”,我认为类模块非常适合根据某些标准确定信息应放入表格中的顺序。

但理想情况下:

  • 是否应该使用类模块(或第二类模块)来检查和编辑文档?

或者

  • 使用常规模块最好进行检查和/或编辑吗?

还是没关系?如果有首选方法,那么每种方法的优点/缺点是什么?

excel vba ms-word

5
推荐指数
1
解决办法
357
查看次数

是否有可能与 base64 编码/解码发生冲突

这里问了一个类似的问题:Is base64 encoding always one to one

显然答案(对类似问题)是肯定的。我已经知道了,但是我很想知道为什么这两个字符串在 Base64 解码后看起来是等效的解释:

cwB0AGQAAG==

cwB0AGQAAA==


还有一件事......当您选择解码后的字符串然后重新编码时,两者都重新编码为相同的值:cwB0AGQAAA==

发生了什么?

base64 encoding

5
推荐指数
1
解决办法
2605
查看次数

Inno Setup 消息参数

在“消息”文件下的 Inno Setup 帮助中,我发现了这一点:

某些消息采用诸如 %1 和 %2 之类的参数。您可以重新排列参数的顺序(即,将 %2 移动到 %1 之前),也可以根据需要复制参数(即“%1 ... %1 %2”)。在带有参数的消息上,使用两个连续的“%”字符嵌入一个“%”。"%n" 创建一个换行符。

在“自定义消息”下:

消息可以采用参数,从 %1 到 %9。您可以重新排列参数的顺序(即,将 %2 移动到 %1 之前),也可以根据需要复制参数(即“%1 ... %1 %2”)。在带有参数的消息上,使用两个连续的“%”字符嵌入一个“%”。"%n" 创建一个换行符。

但是......对于我的生活,我不知道如何使用这些......到目前为止我已经看到 %1 工作(转换为应用程序名称)但是当我将 %1 更改为 %2(最多 - % 9) 它只是显示为 %2, %3, %4 等等....

我只是好奇 - 我如何使用这些参数,它们被分配在哪里?

干杯,

inno-setup

4
推荐指数
1
解决办法
1926
查看次数

VBA在Word 2016中编译,但不在Word 2010中编译

自Word 2010以来MS向MS Word引入的一项新功能是LayoutColumns FootnoteOptions.

因此,下面的代码行在Word 2016中编译: ActiveDocument.Range.FootnoteOptions.LayoutColumns但不在Word 2010中(我没有在Word 2013中测试过).

条件编译器语句似乎没有帮助......除了包含Word 2010的VBA7之外,应用程序版本没有任何内容.

https://msdn.microsoft.com/VBA/Language-Reference-VBA/articles/compiler-constants

所以这不会在Word 2010中编译:

Sub testWd10()
#If Win64 And VBA7 Then
    ActiveDocument.Range.FootnoteOptions.LayoutColumns
#End If
End Sub
Run Code Online (Sandbox Code Playgroud)

编译器错误 - 找不到方法或数据成员

vba ms-word word-vba

3
推荐指数
1
解决办法
100
查看次数

标签 统计

vba ×4

excel ×3

ms-word ×3

word-vba ×3

excel-vba ×2

base64 ×1

encoding ×1

inno-setup ×1