Excel VBA - 将字符串转换为范围

时间:2016-02-11 09:18:58

标签: excel vba excel-vba

我有一个在单元格中存储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(双击的单元格)。

2 个答案:

答案 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 propertyRange.Text propertyRange.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.CellsprojectRange.RowsprojectRange.Columns ......