PCZONE 討論區

PCZONE 討論區 (https://www.pczone.com.tw/vbb3/)
-   -- OFFICE 相 關 軟 體 討 論 版 (https://www.pczone.com.tw/vbb3/forum/5/)
-   -   【求助】Excel VBA: 如何將 Range 轉換成別的 Type? (https://www.pczone.com.tw/vbb3/thread/5/78264/)

jute 2003-06-07 04:42 PM

【求助】Excel VBA: 如何將 Range Object 轉換成資料格式?
 
這幾天一直在想辦法寫一個 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 裡面的值呢?
如何將它們結何在一起?

我的函數如下:
[code]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[/code]
可是 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 貼出來吧:
[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[/code]

web 2003-06-11 04:03 AM

巨集不指定本就在ActiveWindow執行吧!!
這樣應可以!!

[code]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[/code]

jute 2003-06-11 01:15 PM

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

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


所有時間均為 +8。現在的時間是 11:23 AM



 XML   RSS 2.0   RSS 
本站使用 vBulletin 合法版權程式
站務信箱 : [email protected]

本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email :[email protected] 處理。