在 VBA (Excel 2010) 中,我是
- 动态创建命名范围列表
- 使用该列表在另一列中创建下拉选项
创建下拉列表时,(a)使用命名范围似乎不起作用,并且(b)如果我不使用命名范围 - 并且需要通过工作表名称和单元格引用进行引用,我会遇到麻烦因为我的工作表刚刚被重命名为今天的日期。
这很混乱,我知道,但这是我目前所拥有的:
' find the name of the worksheet and replace it with today's date
Dim vTabOriginalName As String
Dim vTabDateName As String
Dim vRangeName As String
vRangeName = "StageListChoices"
vTabOriginalName = ActiveSheet.Name
vTabDateName = Format(Now(), "yyyy-mmm-dd")
ActiveSheet.Name = vTabDateName
'create a drop down list for the stage (col K)
Range("AK3").Value = "NO ACTIVITY"
Range("AK4").Value = "SOLICITATION"
Range("AK5").Value = "OPPORTUNITY"
ActiveWorkbook.Names.Add Name:="StageListChoices", RefersToR1C1:=(vTabDateName & "!R3C37:R5C37")
'~~> Creates the list
With Range("K2:K" & vReportRowCount).Validation 'report row count known earlier
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=StageListChoices"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
当我创建命名区域时录制的宏很有意义:
ActiveWorkbook.Names.Add Name:="StageListChoices", RefersToR1C1:= _
"=2013-JAN-24!R3C37:R14C37"
ActiveWorkbook.Names("StageListChoices").Comment = ""
最初,我一直在使用 String 变量在 VBA 中创建下拉列表,但是“真实”列表有 15 个项目长,并且在重新打开文件时出现错误,表明验证时间太长(?),所以已经打开离开。
基本上,我尝试过类似的事情:
Formula1:="=StageListChoices"
Formula1:=vRangeName
Formula1:="=vRangeName"
Formula1:=vTabDateName & "!R3C37:R5C37"
我查找的所有内容都表明第一个 (Formula1:="=StageListChoices") 应该有效 - 但它没有。
谢谢!