0

在 VBA (Excel 2010) 中,我是

  1. 动态创建命名范围列表
  2. 使用该列表在另一列中创建下拉选项

创建下拉列表时,(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") 应该有效 - 但它没有。

谢谢!

4

1 回答 1

2

改变

ActiveWorkbook.Names.Add Name:="StageListChoices", RefersToR1C1:=(vTabDateName & "!R3C37:R5C37")

ActiveWorkbook.Names.Add Name:="StageListChoices", RefersToR1C1:=("='" & vTabDateName & "'!R3C37:R5C37")

你错过了='

于 2013-01-24T22:14:17.253 回答