【问题标题】:Word VBA- ComboBox text reset text outputWord VBA-组合框文本重置文本输出
【发布时间】:2021-10-11 16:49:09
【问题描述】:

我遇到了组合框的问题,特别是当用户单击下拉菜单中的一个选项时,文本被输入到文档中,但如果他们出错并在组合框中选择另一个选项,它会输入文本从两次(错误和正确答案)。我该如何设置它才能消除错误中的文本。

代码如下:

Private Sub UserForm_Initialize()

With ComboBox1

.AddItem "F1"

.AddItem "G2"

.AddItem "R3"

.AddItem "G4"

End With



End Sub



Private Sub ComboBox1_Change()

Dim ComboBox1 As Range

Set ComboBox1 = Doc1.Bookmarks("bmc1").Range

ComboBox1.Text = Me.ComboBox1.Value

Set ComboBox1 = Doc2.Bookmarks("bmc1").Range

ComboBox1.Text = Me.ComboBox1.Value

End Sub

【问题讨论】:

  • 您的问题源于糟糕的解决方案设计。我永远不会使用控件的更改事件来提交对文档的更改。这样做不允许用户在不进行更改的情况下取消表单。最好只在用户单击 OK/Apply/Finish 或其他任何操作时提交对文档的更改。

标签: vba ms-word combobox ms-office userform


【解决方案1】:

您的问题是每次调用bmc1 函数时都会创建书签bmc1 的新实例,因此会创建一个新书签,并且这是插入新文本的位置。

将书签变成Public变量,并在Initialize()函数中初始化。

Public CBR As Range

Private Sub ComboBox1_Change()
  CBR.Text = Me.ComboBox1.Value
End Sub

Private Sub UserForm_Initialize()
  Set CBR = ActiveDocument.Bookmarks("bmc1").Range
  With ComboBox1
    .AddItem "F1"
    .AddItem "G2"
    .AddItem "R3"
    .AddItem "G4"
  End With
End Sub

【讨论】:

  • 错误,不,这不能解决问题。问题中的代码清楚地表明有两个具有相同名称书签的文档。这个问题虽然措辞不佳,但也表明它们位于文本前面而不是封闭文本。这就是为什么每次更改文本时都会在现有文本之前插入新文本而不是替换它。
  • @TimothyRylatt;当我尝试 OP 的代码时(尽管我确实忽略了第二个文档,因为它做了同样的事情),书签显示为 F1,然后是 G2F1,因为它是一个新书签。使用我的代码,这就是我认为 OP 所要求的,书签读取 F1,然后只是 G2。
  • 要更好地了解书签范围的工作原理,请参阅wordmvp.com/FAQs/MacrosVBA/InsertingTextAtBookmark.htm
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 2018-10-03
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多