【问题标题】:Word VBA macro working on some computers but not otherWord VBA 宏在某些计算机上工作,但在其他计算机上不工作
【发布时间】:2021-08-25 14:13:57
【问题描述】:

我编写了一个非常简单的 Word 宏来隐藏表单的不同部分,基于表单开头的复选框。它只能在某些人的计算机上运行,​​而不能在其他人的计算机上运行 - 它已上传到我们的文档服务器,然后用户将其下载。

具体来说,受影响的用户可以点击一个复选框,宏将禁用其他复选框,但书签仍然可见。没有错误出现,只是没有发生。

文件已正确下载 (.docm),当我查看受影响用户的 VBA 代码时,似乎没有任何问题。我自己无法复制错误。

下面是宏。任何帮助将不胜感激,因为这支持一个相当重要的业务流程。

'Plan
Private Sub CheckBox1_Click()
If CheckBox2.Enabled = True Then
    CheckBox2.Enabled = False
    CheckBox3.Enabled = False
    CheckBox4.Enabled = False
    CheckBox5.Enabled = False
Else:
    CheckBox2.Enabled = True
    CheckBox3.Enabled = True
    CheckBox4.Enabled = True
    CheckBox5.Enabled = True
End If
Bookmarks("CAPA_Plan_And_Add").Range.Font.Hidden = CheckBox1.Value
End Sub
'Plan Addendum
Private Sub CheckBox2_Click()
If CheckBox1.Enabled = True Then
    CheckBox1.Enabled = False
    CheckBox3.Enabled = False
    CheckBox4.Enabled = False
    CheckBox5.Enabled = False
Else:
    CheckBox1.Enabled = True
    CheckBox3.Enabled = True
    CheckBox4.Enabled = True
    CheckBox5.Enabled = True
End If
Bookmarks("CAPA_Plan_And_Add").Range.Font.Hidden = CheckBox2.Value
End Sub
'Execution
Private Sub CheckBox3_Click()
If CheckBox2.Enabled = True Then
    CheckBox1.Enabled = False
    CheckBox2.Enabled = False
    CheckBox4.Enabled = False
    CheckBox5.Enabled = False
Else:
    CheckBox1.Enabled = True
    CheckBox2.Enabled = True
    CheckBox4.Enabled = True
    CheckBox5.Enabled = True
End If
Bookmarks("CAPA_Execution").Range.Font.Hidden = CheckBox3.Value
End Sub
'Extension
Private Sub CheckBox4_Click()
If CheckBox3.Enabled = True Then
    CheckBox1.Enabled = False
    CheckBox2.Enabled = False
    CheckBox3.Enabled = False
    CheckBox5.Enabled = False
Else:
    CheckBox1.Enabled = True
    CheckBox2.Enabled = True
    CheckBox3.Enabled = True
    CheckBox5.Enabled = True
End If
Bookmarks("CAPA_Extension").Range.Font.Hidden = CheckBox4.Value
Bookmarks("CAPA_Extension_2").Range.Font.Hidden = CheckBox4.Value
End Sub
'Cancellation
Private Sub CheckBox5_Click()
If CheckBox4.Enabled = True Then
    CheckBox1.Enabled = False
    CheckBox2.Enabled = False
    CheckBox3.Enabled = False
    CheckBox4.Enabled = False
Else:
    CheckBox1.Enabled = True
    CheckBox2.Enabled = True
    CheckBox3.Enabled = True
    CheckBox4.Enabled = True
End If
Bookmarks("CAPA_Cancellation").Range.Font.Hidden = CheckBox5.Value
Bookmarks("CAPA_Cancellation_2").Range.Font.Hidden = CheckBox5.Value
End Sub
'Effectiveness Check Yes
Private Sub CheckBox6_Click()
If CheckBox7.Enabled = True Then
    CheckBox7.Enabled = False
Else:
    CheckBox7.Enabled = True
End If
End Sub
'Effectiveness Check No
Private Sub CheckBox7_Click()
If CheckBox6.Enabled = True Then
    CheckBox6.Enabled = False
Else:
    CheckBox6.Enabled = True
End If
Bookmarks("Effectiveness_Check").Range.Font.Hidden = CheckBox7.Value
End Sub


Private Sub CheckBox9_Click()

End Sub

【问题讨论】:

  • 书签确实存在吗?
  • 欢迎来到 SO。具体是什么不起作用?为了帮助提示更多信息,请参阅stackoverflow.com/help/how-to-ask
  • edit这个问题并解释“不工作”是什么意思。
  • 如果隐藏文本仍然可见,您是否检查过文件 |选项 |展示?它具有始终显示隐藏文本的设置。如果选中此项,隐藏的文本将保持可见,但会有一个虚线下划线。

标签: vba ms-word


【解决方案1】:

这段代码在逻辑和语法方面存在一些问题。

逻辑

Private Sub CheckBox1_Click()
If CheckBox2.Enabled = True Then

对我来说,为什么您要根据与单击的复选框不同的复选框来确定Enabled 的复选框,这对我来说没有任何意义;特别是不考虑被点击的复选框的状态。由于不了解如何初始化和正确控制事件点击,这看起来像是一个丑陋的解决方法。

语法

If 语句如下所示:

If condition Then
' Do something if true
End If

If-Else 语句的格式如下:

If condition Then
' Do something if true
Else
' Do something else
End if

标签,用于 {On Error} Goto Label 语句的格式为名称后的冒号

On Error GoTo ErrorHandler
' Some code that might produce an error

ErrorHandler:
' More code (to deal with errors)

所以你拥有的是一个普通的 If 语句(没有 Else 组件,因为它后面有一个冒号 Else:),它应该启用所有复选框。

If CheckBox2.Enabled = True Then
    CheckBox2.Enabled = False
    CheckBox3.Enabled = False
    CheckBox4.Enabled = False
    CheckBox5.Enabled = False
Else:
    CheckBox2.Enabled = True
    CheckBox3.Enabled = True
    CheckBox4.Enabled = True
    CheckBox5.Enabled = True
End If

[TL;DR] 只需删除 Else 语句后的冒号

【讨论】:

  • 感谢您如此详尽地概述了这一点!这是我的第一个宏。不幸的是,此更改并没有解决问题 - 我仍然有一些用户可以使用宏,而有些用户无法使用隐藏的书签。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 2020-06-07
  • 1970-01-01
相关资源
最近更新 更多