我有一个在单元格中存储range.address的函数。 该单元格的值为IE:AQ43:BF44
如何将此字符串转换为范围?
我试过了:
Dim Cell As Range
Dim pRange As String
Dim projectRange As Range
pRange = Project.Range ' Stored as "AQ43:BF44" in this case
projectRange = Range(pRange)
For Each Cell In projectRange
If TargetCell = Cell Then
'Do something
End If
Next Cell
此代码报告运行时错误91:对象变量或未设置块变量。
此功能的主要目的是检查是否在存储的range.address中找到了targetCell(双击的单元格)。
答案 0 :(得分:2)
此函数的主要目的是检查targetCell(双重单元格 [sic] )是否在存储的范围内找到。地址
您正在查看Intersect method是否会产生在单元格中文本所描述的范围内的内容(例如AQ43:BF44
)和双击的单元格(例如Target
})。
Option Explicit '<~~ see footnote
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim pRange As String
pRange = Worksheets("Sheet1").Range("A1").Value2
'alternates
'pRange = Worksheets("Sheet1").Range("A1").value
'pRange = Worksheets("Sheet1").Range("A1").text
If Not Intersect(Target, Range(pRange)) Is Nothing Then
Cancel = False
MsgBox Target.Address(0, 0) & " is within " & pRange
End If
End Sub
您正在寻求从单元格中检索文本;可能是从包含ADDRESS function之类的公式返回的文本。为此,您可以使用Range.Value property,Range.Text property或Range.Value2 property。严格来说,.Value2属性是最快的,但它不会在这里产生很大的不同。
有点不清楚文字(例如AQ43:BF44
)所在的位置。我已经包含了父工作表以及应该易于编辑的范围定义。
使用 ThisWorkbook 的Workbook_SheetBeforeDoubleClick事件宏可以实现全局解决方案。
在VBE的工具►选项►编辑属性页面中设置需要变量声明会将 Option Explicit 声明置于顶部每个新创建的代码表。这将避免像拼写错误这样的错误编码错误以及影响您在变量声明中使用正确的变量类型。在没有声明的情况下即时创建的变量都是变体/对象类型。使用明确选项被广泛认为是最佳做法&#39;
答案 1 :(得分:2)
由于Range
是&#34;对象&#34;在Excel中,您需要在分配值时使用Set
- 关键字:
Set projectRange = Range(pRange)
如果pRange
的值没有描述有效的Range
,您将会遇到错误。
此外,在迭代For Each Cell In projectRange
时,您可能希望更具体一些。根据您的目的,您可以迭代projectRange.Cells
,projectRange.Rows
,projectRange.Columns
......