2009-06-16 78 views
0

背景詳細信息 我有一個帶有Activex下拉(組合框)對象的Excel電子表格,可幫助用戶瞭解可用的選項。我這樣做是因爲數據驗證列表下拉菜單字體太小,並且收集了很多投訴。MS-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會出錯: 「您嘗試更改的單元格或圖表受到保護因此只讀...「 對於每個被鎖定的單元,該錯誤出現的次數大約是兩次或三次,並且是組合框的鏈接單元。

有沒有解決這個問題的好方法?現在我的最佳解決方案是將單元格解鎖並將數據驗證放置在單元格中,以便如果用戶編輯單元格,則至少會在輸入無效的東西時拒絕單元格。我可以確保組合框在選中時會覆蓋鏈接單元格,但有時這意味着在右側有一個非常大的惱人的組合框,並帶有非常小的下拉按鈕。

也許我對用戶界面有點太特別?

在此先感謝您閱讀這篇長篇論文。

回答

2

在您創建的「lockSheet」過程中,「保護」工作表的代碼需要設置爲true的附加參數UserInterfaceOnly

我想象的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允許受保護工作表方案變化。

Bill

+0

謝謝。我記得以前看過這個選項,但我忘記了。 – 2009-06-17 16:24:13

相關問題