Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MS Excel:如何显示锁定单元格内组合框的值_Excel_Vba - Fatal编程技术网

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

MS Excel:如何显示锁定单元格内组合框的值,excel,vba,Excel,Vba,背景细节 我有一个带有Activex下拉列表(combobox)对象的excel电子表格,可以帮助用户了解哪些选项可用。我这样做是因为数据验证列表下拉列表的字体太小,并且收集了很多投诉 因此,我的解决方案是添加combobox对象,允许用户从一系列选项中进行选择。但是,我必须将组合框链接到具有linkedcell属性的单元格,以便用户和各种公式都可以看到所选择的内容。我还将组合框设置为在不使用时消失(与数据验证下拉按钮仅在选择相关单元格时出现的方式大致相同) 问题出在这里: 我不希望用户编辑链接

背景细节 我有一个带有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
允许对受保护的工作表进行编程更改


比尔

谢谢。我记得以前见过那个选项,但我忘了。