激活在userform中从Excel工作表发送的复选框值

时间:2013-10-14 10:12:07

标签: excel excel-vba vba

有一段时间以来,我一直在努力做到这一点,但尽管我通过互联网搜索进行了彻底的搜索,但答案却让我不知所措。 我在VBA Excel中创建了一个userForm,其中包含一些文本框和复选框。这些值将发送到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

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

1 个答案:

答案 0 :(得分: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内存中,除非他们正在关闭,否则其他人的变化是不可见的。重新打开文件。