【求助】Excel VBA: 如何將 Range 轉換成別的 Type?



贊助商連結


頁 : [1] 2

jute
2003-06-07, 04:42 PM
這幾天一直在想辦法寫一個 VBA function,但研究了好久都寫不出來,就是卡在不知如何將 Range 轉換成 String 或 Integer。

舉例:ActiveWindow.RangeSelection.Rows 會告訴你目前所選的儲存格區塊裡總共有幾行,但它的輸出值是個 Range 物件,無法用在任何運算式裡,要先把它轉換成某種數字格式如 Integer 才行。我摸索了半天,結果都是得到 Run time error: Type mismatch。:(

請問有人知道如何將 Range 物件轉換成可運算的資料格式嗎?

贊助商連結


ICLA
2003-06-07, 07:44 PM
後面再點一個 .Count 就可以了。像這樣:MsgBox ActiveWindow.RangeSelection.Rows.Count

jute
2003-06-07, 11:15 PM
對喔...我怎麼沒想到...:P
那如果是 cell 裡面的值呢?
如何將它們結何在一起?

我的函數如下:

Sub AddString()
Dim s As Variant
Dim r, rs As Long
s = ""
'MsgBox ActiveWindow.RangeSelection.Row
With ActiveWindow.RangeSelection
r = .Row
rs = .Rows.Count
For rw = r To rs
s = s + .Cells(rw, .Column)
Next
End With
MsgBox s
End Sub
可是 Msgbox 出來都是空白的? :confused:
是不是哪裡錯了?

ICLA
2003-06-07, 11:27 PM
看無,您的目的是?

jute
2003-06-07, 11:43 PM
最終目的是要算出所選 cells 的字元總長度 (len()),假定所有的 cell 都是文字格式...
這個 msgbox 是測試用的, 為了確定所得的值是正確的。

ICLA
2003-06-08, 05:07 AM
Dim s As Variant
Dim r, rs As Long
s = ""
'MsgBox ActiveWindow.RangeSelection.Row
With ActiveWindow.RangeSelection
r = .Row
rs = .Rows.Count
For rw = 1 To rs
s = s + .Cells(rw, .Column)
Next
End With
MsgBox Len(s)

jute
2003-06-08, 10:47 PM
得出來的結果都是 "0"...:(
我之前先用 MsgBox 顯示出字串值就是想看 s=s+.cells(rw,.column) 是不是真的能把選擇區裡所有方塊的值加起來,結果得出的都是空白值。
沒有其它辦法了嗎?

jute
2003-06-09, 10:10 PM
謝謝 ICLA 兄的點醒,我終於成功了
原來問題是出在我的 For loop,改了一下就 ok 了 :)

雖然不知道這對其他網友有無幫助,我還是把成功後的 code 貼出來吧:

Sub ChkLength()
Dim s As String
Dim r, rs, c As Long
With ActiveWindow.RangeSelection
r = .Row
c = .Column
rs = .Rows.Count
cs = .Columns.Count
End With
On Error GoTo e
For rw = r To rs + r - 1
For cl = c To cs + c - 1
If Not TypeName(Cells(rw, cl).Value) Like "Error*" Then
s = s + CStr(Cells(rw, cl))
End If
Next cl
Next rw
MsgBox "Total length: " & Len(s)
Exit Sub
e: MsgBox "Error: " & Err.Description
End Sub

web
2003-06-11, 04:03 AM
巨集不指定本就在ActiveWindow執行吧!!
這樣應可以!!


Sub Total()
Dim Rng As Range
Dim c As Integer
For Each Rng In Selection
With Rng
If Not IsError(.Value) Then c = c + Len(.Value)
End With
Next
MsgBox "Total length: " & s
End Sub

jute
2003-06-11, 01:15 PM
web 兄真是厲害,兩三下就解決了這個困擾我好幾天的問題
我還不知道有 For Each...in 這個東西哩。萬分感謝!

對了...要如何把這個 Sub 改成 Function?就是在 cell 裡可以直接打 =Total(A1:B5) 的 function。
我試了好幾次都不行,好像在 function 裡無法用 Selection 之類的 Range object...