Excel VBA – 将string转换为范围

我有一个函数,将range.address存储在单元格中。 该单元的值是IE:AQ43:BF44

我怎样才能把这个string变成一个范围?

我努力了:

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:对象variables或未设置块variables。

这个函数的主要目的是检查是否在存储的range.address中find了targetCell(单元格doubleclicked)。

这个函数的主要目的是检查targetCell(单元格doubleclicked [sic] )是否存在于存储的范围内。地址

您正在查看Intersect方法是否生成某个单元格(例如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函数的公式返回的文本。 为此,您可以使用Range.Value属性 , Range.Text属性或Range.Value2属性 。 严格来说,.Value2属性是最快的,但在这里不会有太大的区别。

有关文本(例如AQ43:BF44 )的位置有点不清楚。 我已经包括父级工作表以及应该很容易编辑的范围定义。

使用ThisWorkbook的Workbook_SheetBeforeDoubleClick事件macros可以实现全局解决scheme。


在VBE工具中设置需要variables声明 ►选项►编辑器属性页面将把Option Explicit语句放在每个新创build的代码表的顶部。 这将避免像拼写错误这样的愚蠢的编码错误,也会影响你在variables声明中使用正确的variablestypes。 在没有声明的情况下即时创build的variables都是变体/对象types。 使用Option Explicit被广泛认为是“最佳实践”。

由于Range是Excel中的“对象”,因此在分配值时需要使用Set -keyword:

 Set projectRange = Range(pRange) 

但是,如果pRange的值没有描述有效RangepRange遇到错误。

此外,您可能希望在遍历For Each Cell In projectRange时更具体For Each Cell In projectRange 。 根据你想要做什么,你可以遍历projectRange.CellsprojectRange.RowsprojectRange.Columns