MS-Excel:如何在锁定的单元格中显示组合框的值

时间:2009-06-16 20:57:29

标签: excel excel-vba vba

背景详情 我有一个带有Activex下拉(组合框)对象的Excel电子表格,可帮助用户了解可用的选项。我这样做是因为数据验证列表下拉列表的字体太小,并且收集了很多抱怨。

所以我的解决方案是添加组合框对象,允许用户从一系列选项中进行选择。但是,我必须将组合框链接到具有linkedcell属性的单元格,以便用户和各种公式都可以看到已选择的内容。我还将组合框设置为在不使用时消失(与选择相关单元格时仅显示数据验证下拉按钮的方式相同)。

以下是问题: 我不希望用户编辑链接单元格中的值,因此我确保在未选择组合框时锁定链接的单元格:

Private Sub comboBox1_GotFocus()
    Call unlockComboBoxTargetCell(comboBox1)
End Sub

上述程序执行此操作:

 If (targetComboBox.LinkedCell <> "") Then
        Dim targetCell As Variant
        Set targetCell = Range(targetComboBox.LinkedCell)
        If Not targetCell Is Nothing And targetCell.Locked <> False Then
            unlockSheet (activesheet.Name)
            targetCell.MergeArea.Locked = False
            lockSheet (activesheet.Name)
        End If
    End If

存在锁定目标细胞的等效程序。 但是,每当您在工作簿上执行“另存为”操作时,链接和锁定单元格似乎都会产生问题:Excel会突然显示此错误: “您尝试更改的单元格或图表受到保护,因此只读...” 对于每个被锁定的单元,此错误大约会出现两次或三次,并且是组合框的链接单元。

有没有一种方法可以解决这个问题?现在我最好的解决方案是让单元格解锁并在单元格上进行数据验证,这样如果用户编辑单元格,当输入无效内容时,它们至少会被拒绝。我可以确保组合框在选中时会覆盖链接的单元格,但有时这意味着它有一个非常大的,令人讨厌的组合框,右侧有一个非常小的下拉按钮。

也许我对用户界面有点过分了?

提前感谢您阅读这篇漫长而有意义的帖子。

1 个答案:

答案 0 :(得分:2)

在您创建的“lockSheet”过程中,“保护”工作表的代码需要一个额外的参数UserInterfaceOnly,设置为true。

我认为LockSheet子是这样的;

sub lockSheet(strSheetName as string)

    thisworkbook.sheets(strSheetName).Protect

end sub

试试这个:

sub lockSheet(strSheetName as string)

    thisworkbook.sheets(strSheetName).Protect, UserInterfaceOnly=True

end sub

UserInterfaceOnly允许对受保护的工作表进行编程更改。

比尔