圈外人 | 【求助】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 是不是哪裡錯了? |
回覆 |
會員 | 看無,您的目的是? |
回覆 |
圈外人 | 最終目的是要算出所選 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 |
回覆 |
會員 | 巨集不指定本就在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 |
本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email :[email protected] 處理。