2016-02-11 51 views
0

我有一個函數將range.address存儲在單元格中。 該單元格的值是IE:AQ43:BF44Excel VBA - 將字符串轉換爲範圍

如何將此字符串轉換爲Range?

我曾嘗試:

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:未設置對象變量或與塊變量。

該函數的主要目的是檢查targetCell(單元格是否是doubleclicked)在存儲的range.address中被找到。

+0

'普蘭奇= projectRange.Value'而不是'普蘭奇= Project.Range' – Rory

回答

2

此功能的主要目的是檢查targetCell(我doubleclicked細胞 [原文])是存儲range.address

您想看到中找到如果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 propertyRange.Value2 property。嚴格來說,.Value2屬性是最快的,但它不會在這裏造成很大的變化。

有關文本的位置(例如AQ43:BF44)的位置有點不清楚。我已經包含了父級工作表以及應該易於編輯的範圍定義。

使用ThisWorkbookWorkbook_SheetBeforeDoubleClick事件宏可以實現全局解決方案。


設置要求的VBE的工具►選項►編輯器屬性頁面內聲明的變量將​​聲明在每個新創建的代碼頁的頂端。這樣可以避免拼寫錯誤(如拼寫錯誤),並影響您在變量聲明中使用正確的變量類型。在沒有聲明的情況下即時創建的變量都是變體/對象類型。使用選項顯式被廣泛認爲是「最佳實踐」。

+0

感謝。使用交叉完美地解決了這個問題。將解決方案應用到我的工作表中沒有任何問題。 – user45706

1

由於Range是一個「對象」在Excel中,您需要使用Set -keyword賦值時:

Set projectRange = Range(pRange) 

你會的,但是,遇到一個錯誤,如果的pRange值沒有按」 t描述了一個有效的Range

此外,您可能希望在For Each Cell In projectRange上迭代時更具體。根據你想要做什麼,你可以遍歷projectRange.CellsprojectRange.RowsprojectRange.Columns ...

相關問題