0

一段时间以来,我一直在尝试完成这项工作,但尽管我进行了彻底的互联网搜索,但答案一直在逃避我。我在 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

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

4

1 回答 1

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 内存中,其他人的更改是不可见的,除非他们正在关闭和重新打开文件。

于 2013-10-14T15:36:44.443 回答