【问题标题】:Activate checkbox value sent from Excel sheet in userform在用户表单中激活从 Excel 工作表发送的复选框值
【发布时间】:2014-03-28 14:59:31
【问题描述】:

一段时间以来,我一直在尝试完成这项工作,但尽管我在互联网上进行了彻底的搜索,但我仍然无法找到答案。 我在 VBA Excel 中制作了一个带有一些文本框和复选框的用户表单。这些值将发送到 Excel 文件中的工作表。复选框代表类别,因此可以选择多个选项。该值在发送到工作表之前被转换为 true = "x" 和 false = ""。

If userForm.checkbox1.Value = True Then
    ws.Rows.Cells(row, 9).Value = "X"
Else
    ws.Rows.Cells(row, 9).Value = ""
End If

使用几乎相同的userForm可以检索和编辑表单中的信息。 此表单有一个行选择框,可以使用该行选择所需的行,并将相应的数据填充到用户表单中。 “x”翻译回来是这样的:

If ws1.Rows.Cells(row, 9).Value = "X" Then
    userFormedit.checkbox1.Value = True
Else
    userFormedit.checkbox1.Value = False
End If

问题是选中的复选框显示了所需的值,但显示为灰色。 将信息发送回工作表时,不会“看到”这些值。 所以在工作表上这些值消失了。一种选择是再次重新选中所有框。 这不是我想要的,因为很多人会使用这种形式,这既费时又不切实际。 有没有办法激活/启用复选框?

【问题讨论】:

  • 您能否也发布所有相关的复选框事件代码。如果您不禁用它,您的复选框将不会被禁用...

标签: excel vba


【解决方案1】:

您应该考虑在 _Click() 中从用户表单发送到工作表,并将工作表值加载到 _Activate 子中的表单,例如

Private Sub CheckBox1_Click()
    If CheckBox1.Value Then
        [A1] = "X"
    Else
        [A1] = ""
    End If
End Sub

Private Sub UserForm_Activate()
    If [A1] = "X" Then
        Me.CheckBox1 = True
    Else
        Me.CheckBox1 = False
    End If
End Sub

如果复选框显示为灰色,原因可能是它被相同或另一段代码或元素的属性窗口 (CheckBox1.Enabled = False) 禁用。

另外请注意,Excel 并不是真正的多用户友好型。一旦多个用户打开了同一个 Excel,它就会驻留在他们 PC 的内存中,其他人的更改是不可见的,除非他们正在关闭和重新打开文件。

【讨论】:

  • 谢谢,确实是在代码中再次停用了。现在它工作得很好。关于多用户问题,我使用文件共享系统,您在使用文件时“签出”文件,其他人无法访问它。保存更改的文件并关闭程序时,它再次可用。再次感谢您的回答。
  • 欢迎...如果问题得到解答,请考虑接受它以便更改其状态...谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 2015-07-06
  • 2012-09-23
相关资源
最近更新 更多