2010-05-26 55 views
1

無論如何要將字符串值轉換爲範圍對象嗎?我有一個函數,它接受一個Range對象作爲參數,需要一個字符串參數傳遞給它如何將字符串轉換爲範圍對象

謝謝配合單元格地址

+0

哪個應用程序?我在使用Excel時正確嗎? – 2010-05-26 09:20:30

+0

是的,它是Excel中的VBA應用程序。 – nimo 2010-05-26 09:23:35

+0

正如Alex K.指出的那樣,你可以從一個像「Q42:Z99」這樣的字符串中獲取一個Range,它指向某個實際工作表上的某些實際單元格。不過,您不能將任意字符串轉換爲Range對象。不過,Excel會很高興地自動完成相反的操作。所以,如果你可以定義你的函數來接受一個* String *參數,那麼你可以將它傳遞給字符串或(單元)範圍引用,它應該工作得很好。 – jtolle 2010-05-26 13:13:17

回答

4

的字符串?如果是這樣:

Dim r As Range: Set r = Range("B3") 
MsgBox r.ColumnWidth 
+0

實際上,它可以是任何字符串值,不一定是單元格地址,這就是爲什麼我在將其他字符串值轉換爲Range對象時遇到問題的原因 – nimo 2010-05-26 09:29:50

+0

您可以給出一些字符串數據的示例嗎? – 2010-05-26 09:30:21

+0

昏暗myStirng作爲字符串 的myString =「AnyValue」 – nimo 2010-05-26 09:32:47

1

我不喜歡這樣的一位,但如果你不能改變,需要一系列的功能,你可以創建一個字符串轉換爲一系列的功能。你要確保第一個函數關心的唯一事情就是Value或Text屬性。

Function FuncThatTakesRange(rng As Range) 

    FuncThatTakesRange = rng.Value 

End Function 

Function ConvertStringToRange(sInput As String) As Range 

    Dim ws As Worksheet 

    Set ws = Workbooks.Add.Sheets(1) 

    ws.Range("A1").Value = sInput 

    Set ConvertStringToRange = ws.Range("A1") 

    Application.OnTime Now + TimeSerial(0, 0, 1), "'CloseWB """ & ws.Parent.Name & """'" 

End Function 

Sub CloseWb(sWb As String) 

    On Error Resume Next 
     Workbooks(sWb).Close False 

End Sub 

在立即窗口使用像

?functhattakesrange(convertstringtorange("Myvalue")) 
1

爲什麼函數參數沒有改變的變異,然後在功能確定使用VarType函數等),如果你已經通過了一個範圍,並使用錯誤處理檢查可以轉換爲範圍的字符串或無法轉換爲範圍的字符串?

0

比方說,工作表Sheet1!A1具有文本值 「工作表Sheet1!B1」 和工作表Sheet1!B1的值爲 「1234」。下面的代碼將使用存儲在A1文本作爲輸入的範圍內的地址和複製範圍B1至A2:

Sub Tester() 

    Sheet1.Range(Range("A1")).Copy 

    Sheet1.Range("A2").PasteSpecial xlPasteAll 

End Sub 
0

這個簡單的功能將字符串參數轉換成範圍對象,但是在其他Excel函數可用。

Function TXT2RNG(text) As Variant 

Set TXT2RNG = Range(text) 

End Function 
0

這是我的解決方案,不需要一個新的功能。

詞根記憶動態字符串變量第一

2.然後通過經由一系列方法創建的範圍對象出該字符串的最後確定它:設置動態範圍=範圍(dynamicstring)

可以操縱動力學字符串,我只是保持簡單,以便您可以看到,您可以使範圍超出字符串變量。


Sub test() 

Dim dynamicrangecopystring As String 
Dim dynamicrangecopy As range 
dynamicrangecopystring = "B12:Q12" 
Set dynamicrangecopy = range(dynamicrangecopystring) 

End Sub