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

第 1 頁,共 2 頁 1 2 末頁末頁
顯示結果從第 1 筆 到 10 筆,共計 12 筆
  1. #1
    會員
    註冊日期
    2002-08-27
    所在地區
    難說
    討論區文章
    1,448

    【求助】Excel VBA: 如何將 Range Object 轉換成資料格式?

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

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

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



  2. #2
    會員
    註冊日期
    2001-10-16
    討論區文章
    1,893
    後面再點一個 .Count 就可以了。像這樣:MsgBox ActiveWindow.RangeSelection.Rows.Count

  3. #3
    會員
    註冊日期
    2002-08-27
    所在地區
    難說
    討論區文章
    1,448
    對喔...我怎麼沒想到...: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 出來都是空白的?
    是不是哪裡錯了?

  4. #4
    會員
    註冊日期
    2001-10-16
    討論區文章
    1,893
    看無,您的目的是?

  5. #5
    會員
    註冊日期
    2002-08-27
    所在地區
    難說
    討論區文章
    1,448
    最終目的是要算出所選 cells 的字元總長度 (len()),假定所有的 cell 都是文字格式...
    這個 msgbox 是測試用的, 為了確定所得的值是正確的。



  6. #6
    會員
    註冊日期
    2001-10-16
    討論區文章
    1,893
    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)

  7. #7
    會員
    註冊日期
    2002-08-27
    所在地區
    難說
    討論區文章
    1,448
    得出來的結果都是 "0"...
    我之前先用 MsgBox 顯示出字串值就是想看 s=s+.cells(rw,.column) 是不是真的能把選擇區裡所有方塊的值加起來,結果得出的都是空白值。
    沒有其它辦法了嗎?

  8. #8
    會員
    註冊日期
    2002-08-27
    所在地區
    難說
    討論區文章
    1,448
    謝謝 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

  9. #9
    web
    web 目前未上線
    會員 web 的大頭照
    註冊日期
    2002-10-22
    討論區文章
    87
    巨集不指定本就在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

  10. #10
    會員
    註冊日期
    2002-08-27
    所在地區
    難說
    討論區文章
    1,448
    web 兄真是厲害,兩三下就解決了這個困擾我好幾天的問題
    我還不知道有 For Each...in 這個東西哩。萬分感謝!

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



類似的主題

  1. 請問在裝完 MySQL伺服器後,如何把root換成別的用戶名登入數據庫?
    作者:阿敏 所在討論版:☉ -- 架 站 DIY 討 論 版
    回覆: 4
    最後發表: 2009-05-12, 04:29 PM
  2. Excel【求助 ) 如何將數字轉換成度分呢?
    作者:mandyno1 所在討論版:-- OFFICE 相 關 軟 體 討 論 版
    回覆: 2
    最後發表: 2004-09-27, 04:33 AM
  3. 【求助】 如何將硬碟格式不format而轉換成ntfs
    作者:skyline 所在討論版:-- Windows 討 論 版
    回覆: 21
    最後發表: 2004-03-31, 06:43 PM
  4. 【求助】如何將RM電影檔轉換成AVI或MPG電影檔
    作者:VaderManGS 所在討論版:-- 多 媒 體 討 論 版
    回覆: 1
    最後發表: 2002-07-15, 08:17 PM
  5. 如何將.mpeg檔轉換成mov檔
    作者:KD 所在討論版:-- 多 媒 體 討 論 版
    回覆: 2
    最後發表: 2001-02-22, 05:10 PM

 

excel vba function end function

發表文章規則

  • 不可以發表新主題
  • 不可以回覆文章
  • 不可以上傳附加檔案
  • 不可以編輯自己的文章
  •