2014-04-09 67 views
7

我想使用VBA在單元格(可變)中添加「數據驗證」,並且數據驗證列表中的範圍也是可變的。到現在我一直在用這個如何使用VBA將數據驗證添加到單元格

這裏的「範圍1」是被進來的數據驗證列表和「RNG」的範圍內,我想數據驗證

Dim range1, rng As range 
Set range1 = range("a1:a5") 
Set rng = range("b1") 
With rng 
With .Validation 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:="range1" 
End With 
End With 

我得到的細胞「應用程序定義和對象定義錯誤」

也可以有人解釋我的不同的參數的含義

With .Validation 
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:="range1" 

回答

16

使用這一個:

Dim ws As Worksheet 
Dim range1 As Range, rng As Range 
'change Sheet1 to suit 
Set ws = ThisWorkbook.Worksheets("Sheet1") 

Set range1 = ws.Range("A1:A5") 
Set rng = ws.Range("B1") 

With rng.Validation 
    .Delete 'delete previous validation 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ 
     Formula1:="='" & ws.Name & "'!" & range1.Address 
End With 

注意,當你使用Dim range1, rng As range,只有rngRange類型,但range1Variant。這就是爲什麼我使用Dim range1 As Range, rng As Range
關於參數的含義,你可以讀爲MSDN,但在短:

  • Type:=xlValidateList意味着驗證類型,在這種情況下,你應該從列表中選擇值
  • AlertStyle:=xlValidAlertStop指定驗證過程中顯示在消息框中使用的圖標。如果用戶從列表中輸入任何值,他/她將收到錯誤消息。
  • 在您的原始代碼中,Operator:= xlBetween很奇怪。只有在提供兩個驗證公式時才能使用它。
  • Formula1:="='" & ws.Name & "'!" & range1.Address的列表數據驗證提供值(格式爲=Sheet!A1:A5
+0

嘿,我做了改變,其工作就好了,感謝您的幫助
嘿能否請您解釋一下
'名單地址<一級方程式:= 「='」&ws.Name&「'!」 &range1.Address>'
再次稍微詳細一點,我只是不明白什麼是「=」和「=!」 ,我是VBA的新手,請不要介意,或者如果你有任何我可以詳細研究的鏈接,那就太棒了。 – Gajju

+3

@Gajju,不用擔心,這很容易:)讓我們開始吧!所需的結果如下所示:'Formula1:=「='Sheet1'!A1:A5」' - 所有Excel中的公式從等號開始:'='。接下來,''Sheet1'!'表示範圍'A1:A5'屬於Sheet'表'(如果你的表名不包含空格,你可以省略嘆息'''像這樣:Formula1:=「= Sheet1! A1:A5「,但我們不想對此公式進行硬編碼,所以我們使用:'Formula1:=」='「&ws.Name&」'!「&range1.Address'其中'ws.Name'返回工作表名稱(例如「Sheet1」)和'range1.Address'返回'A1:A5'。 –

+0

嘿,這很容易理解,謝謝你的時間,再次感謝你的幫助...... – Gajju

相關問題