【求助】Excel VBA: 如何將 Range 轉換成別的 Type? - PCZONE 討論區

返回   PCZONE 討論區 > ▲ -- 電 腦 軟 體 討 論 區 > -- OFFICE 相 關 軟 體 討 論 版


PCZONE 討論區



通知

-- OFFICE 相 關 軟 體 討 論 版 Word、Excel、PowerPoint、Access、Outlook、FrontPage或Office XP等的問題解答與經驗分享

圈外人
【求助】Excel VBA: 如何將 Range Object 轉換成資料格式?
這幾天一直在想辦法寫一個 VBA function,但研究了好久都寫不出來,就是卡在不知如何將 Range 轉換成 String 或 Integer。

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

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

回覆
會員

後面再點一個 .Count 就可以了。像這樣:MsgBox ActiveWindow.RangeSelection.Rows.Count
回覆
圈外人

對喔...我怎麼沒想到...: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 出來都是空白的?
是不是哪裡錯了?
回覆
會員

看無,您的目的是?
回覆
圈外人

最終目的是要算出所選 cells 的字元總長度 (len()),假定所有的 cell 都是文字格式...
這個 msgbox 是測試用的, 為了確定所得的值是正確的。
回覆
會員

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)
回覆
圈外人

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

謝謝 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
會員

巨集不指定本就在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
回覆
圈外人

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

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

回覆


類似的主題
主題 主題作者 討論版 回覆 最後發表
docsis 3.0 dynamic range window blue10 -- Cable Modem 心 得 交 流 版 0 2011-04-01 02:39 PM
如何將 Documents and Settings完整移到另依個磁碟機 Niise -- Windows 討 論 版 7 2004-03-11 10:27 PM
【求助】Excel VBA: 如何讓 Cell 自動增值? jute -- OFFICE 相 關 軟 體 討 論 版 2 2003-09-11 09:33 AM
【求助】frequency out of range 錯誤訊息。 yetchinz -- HELP ME 電 腦 軟 硬 體 急 救 版 1 2002-12-02 03:41 AM
如何將.mpeg檔轉換成mov檔 KD -- 多 媒 體 討 論 版 2 2001-02-22 05:10 PM






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

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