在Excel 2013中通过VBA将validation列表添加到dynamic单元格区域

我刚刚开始进入Excel VBA编码,具有基本的VB知识,并在网上search适当的解决scheme;)我正在Excel中的员工列表解决scheme。 对于一个新手来说,这个问题变得相当复杂,但是我有时间,而且我渴望学习。

在我的主工作表中,列数等于当前月份的天数,行数是由vba函数创build的,该函数从另一个工作表中加载所有客户端的列表,到目前为止,这样做很好。

现在我想在这个范围(firstDayfirstClient:lastDaylastClient)中填充来自另一个工作表的员工ID列表的validation列表。 为此,我设法编写了以下function:

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 

这总是会抛出一个错误91(块variables未设置),即使我使用硬编码范围

 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") 

希望这可以帮助。