2014-04-08 63 views
2

我只是試圖添加一個列表驗證單元格,我得到運行時錯誤1004應用程序定義或對象定義的錯誤。我有這個確切的代碼在我的工作簿中的其他地方驗證了一個單元格,它從來沒有問題。Excel VBA列表驗證 - 特有的運行時錯誤

With Range("Q3").Validation 
     .Delete 
     .Add _ 
     Type:=xlValidateList, _ 
     AlertStyle:=xlValidAlertStop, _ 
     Formula1:="=Constants!Q6:Q30" 
End With 

我也嘗試使用字符串「愛麗絲,鮑勃」的Formula1和我得到同樣的錯誤,所以這不是問題。事實上,我只在這個特定的工作表上設置任何類型的驗證(例如xlValidateWholeNumber出現同樣的錯誤)時纔看到這個錯誤。

一些信息,可能會或可能不相關:

  • 工作表不受保護和screenupdating是關閉的,當我嘗試 集此驗證
  • 以上包含上說CommandButton_Click 事件工作表
  • 工作簿中的所有CommandButton控件有 TakeFocusOnClick =假
  • 這是微軟辦公2013
+0

你確定你有一個工作表名爲「常量」?確保在表格名稱中沒有前導或尾隨空格。該錯誤通常在找不到該工作表時發生。 – sous2817

+0

肯定的,就像我說的那樣,包含「= Constants!Q6:Q30」的確切代碼在工作簿中的其他地方沒有錯誤地用於其他單元的驗證。此外,它似乎是任何形式的驗證,在這張表導致此錯誤(例如,我也用xlWholeNumber它)的.Add行。 – user3509102

+0

請發佈您的文件(santised)verion我們看看。 – brettdj

回答

0

我意識到這是一個古老的問題,但它仍然像突出一樣。

根據我的經驗,您不能將數據驗證設置爲存儲在另一個工作表中的範圍。 有一個例外:如果你「命名」那個範圍。

因此,我的解決方法是選擇需要用作參考的範圍,併爲其指定一個名稱(至少在Excel 2010中:公式選項卡>名稱管理器>定義名稱>遵循提示[或僅限於在公式欄旁邊的框中鍵入名稱,在下面的圖像中看到B2]],然後在我的代碼中使用該命名範圍。

Adding a named range

在你的情況,假設你命名的範圍是「NamedRange01」,你的代碼將是:

With Range("Q3").Validation .Delete .Add _ Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, _ Formula1:="=NamedRange01" End With