【发布时间】:2019-05-06 03:39:02
【问题描述】:
我正在编写一个程序来从工作表中的值生成多个命名范围,单元格在 C 列中命名,名称在 D 列的相邻单元格中分配。我尝试过的所有变体将这两个单元格作为范围引用返回错误。虽然此过程将只使用一次来生成这些名称,但我想确定正确的语法,以便将来能够引用范围用于其他目的。
我有一个临时的 ActiveX 命令按钮,它调用以下代码(现在仅引用两行用于测试目的):
Private Sub CommandButton1_Click()
Call SetRangeNames(38, 39)
End Sub
根据我在其他地方看到的帖子中的建议,我将 SetRangeNames 过程放置在一个模块中。两行代码返回错误由过程代码中的注释指示,我尝试过的所有变体(以及它们返回的错误)都遵循这一点。我在 proc 中放置了一个 MsgBox 调用,以查看它是如何渲染生成的单元格引用的。它显示:
rangeNameValueCellAddress = "C38"; namedRangeCellAddress = "D38"
或
rangeNameValueCellAddress = "C39"; namedRangeCellAddress = "D39"
这是 proc 的一种变体:
Public Sub SetRangeNames(startRow As Integer, endRow As Integer)
Dim theRange As Range
Dim currentRow As Integer
Dim currentName As String
Dim rangeNameValueCellAddress As String
Dim namedRangeCellAddress As String
For currentRow = startRow To endRow
rangeNameValueCellAddress = """D" & Trim(Str(currentRow) & """")
namedRangeCellAddress = """C" & Trim(Str(currentRow) & """")
MsgBox ("rangeNameValueCellAddress = " & rangeNameValueCellAddress & _
"; namedRangeCellAddress = " & namedRangeCellAddress)
'MsgBox displays: rangeNameValueCellAddress = "C38"; namedRangeCellAddress = "D38"
' or: rangeNameValueCellAddress = "C39"; namedRangeCellAddress = "D39"
'*** The following two statements return errors:
Set theRange = ThisWorkbook.Worksheets(ActiveSheet).Range(namedRangeCellAddress)
currentName = ThisWorkbook.Worksheets(ActiveSheet).Range(rangeNameValueCellAddress).Value2
ActiveWorkbook.Names.Add Name:=currentName, RefersTo:=theRange
Next currentRow
End Sub
以下是我尝试过的变体(“SYSProjectData”既是名称,又是我正在使用的工作表的代码名称和名称):
Set theRange = SYSProjectData.Range(namedRangeCellAddress)
currentName = SYSProjectData.Range(rangeNameValueCellAddress).Value2
返回:“应用程序定义的或对象定义的错误”
Set theRange = ThisWorkbook.SYSProjectData.Range(namedRangeCellAddress)
currentName = ThisWorkbook.SYSProjectData.Range(rangeNameValueCellAddress).Value2
返回:“对象不支持此属性或方法”
Set theRange = ThisWorkbook.ActiveSheet.Range(namedRangeCellAddress)
currentName = ThisWorkbook.ActiveSheet.Range(rangeNameValueCellAddress).Value2
返回:“应用程序定义的或对象定义的错误”
Set theRange = ActiveSheet.Range(namedRangeCellAddress)
currentName = ActiveSheet.Range(rangeNameValueCellAddress).Value2
返回:“应用程序定义的或对象定义的错误”
Set theRange = ThisWorkbook.Worksheets(SYSProjectData).Range(namedRangeCellAddress)
currentName = ThisWorkbook.Worksheets(SYSProjectData).Range(rangeNameValueCellAddress).Value2
返回:“类型不匹配”
Set theRange = ThisWorkbook.Worksheets("SYSProjectData").Range(namedRangeCellAddress)
currentName = ThisWorkbook.Worksheets("SYSProjectData").Range(rangeNameValueCellAddress).Value2
返回:“应用程序定义的或对象定义的错误”
Set theRange = ThisWorkbook.Sheets(SYSProjectData).Range(namedRangeCellAddress)
currentName = ThisWorkbook.Sheets(SYSProjectData).Range(rangeNameValueCellAddress).Value2
返回:“类型不匹配”
Set theRange = ThisWorkbook.Sheets("SYSProjectData").Range(namedRangeCellAddress)
currentName = ThisWorkbook.Sheets("SYSProjectData").Range(rangeNameValueCellAddress).Value2
返回:“应用程序定义的或对象定义的错误”
Set theRange = ThisWorkbook.Sheets(ActiveSheet).Range(namedRangeCellAddress)
currentName = ThisWorkbook.Sheets(ActiveSheet).Range(rangeNameValueCellAddress).Value2
返回:“类型不匹配”
Set theRange = ThisWorkbook.Worksheets(ActiveSheet).Range(namedRangeCellAddress)
currentName = ThisWorkbook.Worksheets(ActiveSheet).Range(rangeNameValueCellAddress).Value2
返回:“类型不匹配”
谁能告诉我我做错了什么?
谢谢!
【问题讨论】: