簡體   English   中英

在Excel 2013中通過VBA將驗證列表添加到動態單元格范圍

[英]Adding validation list to dynamic cell range via VBA in Excel 2013

我才剛剛開始使用Excel VBA編碼,已經具備基本的VB知識並在網上搜索適當的解決方案了;)我正在研究Excel中的人員名冊解決方案。 對於新手來說,它變得越來越復雜,但是我有時間,而且我渴望學習。

在我的主工作表上,列數等於當月的天數,並且行數由vba函數創建,該函數從另一個工作表加載了到目前為止所有客戶的列表,到目前為止很好。

現在,我想用另一個工作表中的員工ID列表填充此范圍內的每個單元格的驗證列表(firstDayfirstClient:lastDaylastClient)。 為此,我設法編寫了以下函數:

Sub createDD()
Dim bSh As Worksheet
Set bSh = Sheets("sht_MA")
Sheets("sht_Main").Activate
Dim c As Range
c = Range(Cells(4, 4), Cells(Cells(Rows.Count, 1).End(xlUp).Row, _
    Cells(3, 256).End(xlToLeft).Column))
With c.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
     Operator:=xlBetween, Formula1:=bSh.Range("tbl_MA[ID]")
    .IgnoreBlank = True
    .InCellDropdown = True
End With
End Sub

即使我使用以下方式對Range進行硬編碼,這總是會引發錯誤91(未設置塊變量)

c = Range("D4", "AH6")

誰能告訴我我是否缺少某些東西或概念不正確? 我還試圖在定義范圍時不使用活動工作表,而是像這樣明確地解決它

Dim aSh, bSh As Worksheet
Set bSh = Sheets("sht_MA")
Set aSh = Sheets("sht_Main")
Dim c As Range
c = aSh.Range(aSh.Cells(4, 4), aSh.Cells(aSh.Cells(aSh.Rows.Count, 1) _ 
    .End(xlUp).Row, aSh.Cells(3, 256).End(xlToLeft).Column))

這更令人困惑,但也無濟於事。

我希望這能解決我要說的話,因為我既不是英語使用者,也不是VBA母語;)任何幫助將不勝感激!

克里斯

因為您已經做了Dim c As Range的操作,所以這意味着c現在是一個Range對象。 每當您想為一個對象分配值/某物時,請記住從關鍵字SET開始!

在這種情況下,您應該這樣:

Set c = Range("D4", "AH6")

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM