【发布时间】:2017-12-13 19:01:20
【问题描述】:
如果单元格以单词“kit”开头,我正在尝试将范围中第一个单元格的前 7 个字符设置为命名范围名称。
这是我目前所拥有的:
Sub DefineRanges()
Dim rngStart As Range
Set rngStart = Range("A1")
Dim LastRow As Integer
Dim RangeName As String
For Each cell In Range("A2:A7")
If LCase(Left(cell.Value, 3)) = "kit" Then
RangeName = LCase(Left(cell.Value, 7))
ActiveWorkbook.Names.Add _
Name:=RangeName, _
RefersToLocal:=Range(rngStart.Address & ":C" & cell.Row - 1)
Set rngStart = Range("A" & cell.Row)
End If
LastRow = cell.Row
Next
RangeName = LCase(Left(cell.Value, 7))
ActiveWorkbook.Names.Add _
Name:=RangeName, _
RefersToLocal:=Range(rngStart.Address & ":C" & LastRow)
End Sub
基本上我希望它查看我的整个范围,找到以单词“kit”开头的任何单元格,创建一个从该单元格到下一个以“kit”开头的单元格的命名范围,并分配第一个该单元格的 7 个字符作为范围名称。到目前为止,我能够让它创建范围,但是当我尝试将单元格的内容传递到范围名称时遇到问题。有什么想法吗?
【问题讨论】:
-
你得到什么错误信息,在哪一行?
-
您试图在循环外引用
cell这就是错误的原因。 -
^^^ 单元格在 For Each 循环后变为空
-
为什么要重复循环外的行,同时也在循环内?
-
如果任何单元格包含错误,或者任何单元格的内容少于 7 个字符,您就会遇到问题。如果
ActiveSheet不是预期/预期的工作表,并且名称已经定义,则预计会出现其他问题。如果没有指定Option Explicit,您将很快遇到其他更难诊断的问题。始终使用Option Explicit。