MS Excel:如何显示锁定单元格内组合框的值
背景细节 我有一个带有Activex下拉列表(combobox)对象的excel电子表格,可以帮助用户了解哪些选项可用。我这样做是因为数据验证列表下拉列表的字体太小,并且收集了很多投诉 因此,我的解决方案是添加combobox对象,允许用户从一系列选项中进行选择。但是,我必须将组合框链接到具有linkedcell属性的单元格,以便用户和各种公式都可以看到所选择的内容。我还将组合框设置为在不使用时消失(与数据验证下拉按钮仅在选择相关单元格时出现的方式大致相同) 问题出在这里: 我不希望用户编辑链接单元格中的值,因此我确保在未选择组合框时锁定链接单元格:MS Excel:如何显示锁定单元格内组合框的值,excel,vba,Excel,Vba,背景细节 我有一个带有Activex下拉列表(combobox)对象的excel电子表格,可以帮助用户了解哪些选项可用。我这样做是因为数据验证列表下拉列表的字体太小,并且收集了很多投诉 因此,我的解决方案是添加combobox对象,允许用户从一系列选项中进行选择。但是,我必须将组合框链接到具有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
如果(targetComboBox.LinkedCell“”),则
作为变异体的暗淡靶细胞
设置targetCell=Range(targetComboBox.LinkedCell)
如果不是targetCell为Nothing,则targetCell.Locked为False
解锁工作表(activesheet.Name)
targetCell.MergeArea.Locked=False
锁页(activesheet.Name)
如果结束
如果结束
存在用于锁定目标单元格的等效过程。
但是,每当您对工作簿执行“另存为”操作时,链接和锁定的单元格似乎会产生问题:Excel会突然出现此错误:
“您试图更改的单元格或图表受保护,因此为只读…”
对于每个被锁定的单元格,并且是组合框的linkedcell,此错误大约出现两到三次
有没有克服这个问题的好办法?现在我的最佳解决方案是保持单元格未锁定,并在单元格上进行数据验证,这样,如果用户编辑单元格,当他们键入无效内容时,至少会被拒绝。我可以确保无论何时选择组合框,它都会覆盖链接的单元格,但有时这意味着在右侧有一个非常大、恼人的组合框,还有一个非常小的下拉按钮
也许我对用户界面有点太挑剔了
提前感谢您阅读这篇冗长而复杂的文章。在您创建的“锁单”过程中,“保护”工作表的代码需要一个额外的参数,UserInterfaceOnly
,设置为true
我想锁片潜艇是这样的
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
允许对受保护的工作表进行编程更改
比尔谢谢。我记得以前见过那个选项,但我忘了。