我刚开始进入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;) 非常感谢任何帮助!
克里斯
答案 0 :(得分:1)
因为你已经做过Dim c As Range,这意味着现在c是一个Range对象。每次你想给对象分配值/东西时,记得先用关键字SET!
开头在这种情况下,你应该这样:
Set c = Range("D4", "AH6")
希望这有帮助。