MS-Excel:如何显示locking单元格内的combobox的值

背景详细信息我有一个Excel电子表格与Activex下拉(combobox)对象,帮助用户知道什么选项可用。 我这样做是因为数据validation列表下拉菜单字体太小,并收集了很多投诉。

所以我的解决scheme是添加combobox对象,允许用户从一系列选项中进行select。 但是,我必须将combobox链接到具有linkedcell属性的单元格,以便用户和各种公式都能看到所选内容。 我还设置combobox在不使用时消失(与select相关单元格时仅显示数据validation下拉button的方式大致相同)。

这是问题:我不希望用户编辑链接的单元格中的值,所以我确保链接的单元格被locking,只要没有selectcombobox:

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 

有相同的程序来locking目标单元格。 但是,无论何时在工作簿上执行“另存为”操作,似乎链接和locking的单元格都会产生问题:Excel会出错:“您要更改的单元格或图表受到保护,因此只读…“每个locking的单元出现两次或三次这个错误,并且是combobox的链接单元。

有没有解决这个问题的好办法? 现在我的最佳解决scheme是将单元格解锁并将数据validation放置在单元格中,以便如果用户编辑单元格,则至less会在input无效的东西时拒绝单元格。 我可以确保combobox被选中时覆盖链接的单元格,但有时这意味着在右侧有一个非常大的,令人讨厌的combobox,上面有一个非常小的下拉button。

也许我对用户界面有点太特别了?

感谢提前阅读这个漫长的涉及职位。

在您创build的“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允许编程更改受保护的工作表。

法案