在Excel 2013中通过VBA将验证列表添加到动态单元格范围

时间:2014-05-18 16:14:02

标签: excel vba

我刚开始进入Excel VBA编码,拥有基本的VB知识并在网上搜索相应的解决方案;) 我正在研究Excel中的员工排班解决方案。对于一个新手来说,它变得越来越复杂,但我有时间,我渴望学习。

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

现在我想用另一个工作表中的员工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

这总是会给我一个错误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;) 非常感谢任何帮助!

克里斯

1 个答案:

答案 0 :(得分:1)

因为你已经做过Dim c As Range,这意味着现在c是一个Range对象。每次你想给对象分配值/东西时,记得先用关键字SET!

开头

在这种情况下,你应该这样:

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

希望这有帮助。