在VBA中,是否有一種很好的方式來獲取變量/對象的文本表示?像Java的各種String.valueOf(...)方法一樣。有沒有一種通用的方法在VBA中獲得一個很好的文本表示的變量?
4
A
回答
4
除了'CStr'之外沒有什麼內置的,它有你注意到的限制。你唯一能做的就是自己寫。幸運的是,VBA具有足夠的內置運算符('IsArray',IsNumeric','VarType'等)以方便使用。 (這確實讓人想知道,「爲什麼不讓'CStr'更強大?」)
下面的函數是一個例子。它們是用於Excel/VBA代碼的,所以你可能不會關心在其中調用的例程格式的實現,以格式化數組等,但它們應該給你基本的想法。
'Diagnostic formatting of variant as string
Public Function fmt(arg) As String
If IsObject(arg) Then
fmt = fmtObj_(arg)
ElseIf IsArray(arg) Then
fmt = fmtArr_(arg)
'Note that this test must come after IsArray() since IsMissing() returns
'True for an empty array parameter (created by calling Array())
ElseIf IsMissing(arg) Then
fmt = "<Missing>"
Else
Select Case VarType(arg)
Case vbDouble
'Since we're in Excel, don't include double type char (#)
fmt = CStr(arg)
Case vbString
fmt = """" & arg & """"
Case vbEmpty
fmt = "<Empty>"
Case vbBoolean, vbDate
fmt = CStr(arg)
Case vbError
fmt = fmtExcelVBAError_(arg)
Case vbLong
fmt = CStr(arg) & "&"
Case vbInteger
fmt = CStr(arg) & "%"
Case vbCurrency
fmt = CStr(arg) & "@"
Case vbNull
fmt = "<Null>"
Case Else
fmt = "<Typename - " & TypeName(arg) & ">"
End Select
End If
If Len(fmt) > MAX_FMT_LEN_ Then
fmt = Left$(fmt, MAX_FMT_LEN_) & " <...>"
End If
End Function
'As fmt(), but "normal" conversion for strings, numbers, and Empty
Public Function toStr(arg) As String
If IsObject(arg) Then
toStr = fmt(arg)
Else
If VarType(arg) = vbString Or VarType(arg) = vbEmpty Or IsNumeric(arg) Then
toStr = CStr(arg)
Else
toStr = fmt(arg)
End If
End If
End Function
1
你試試看:CStr(...)
?
+0
嗯,這似乎是有空問題 - 任何想法爲什麼? – HenryTyler 2010-06-15 16:56:14
+0
我認爲CStr()是VBA所能提供的最好的。根據你想要使用它的TypeName()也可能有用。 – BenV 2010-06-15 17:11:13
相關問題
- 1. 有沒有一種方法來評估vba中的變量?
- 2. 有沒有一種很好的方法從哈希表中獲取布爾值?
- 3. 有沒有一種很好的方法來分類wp
- 4. CoreData - 有沒有一種很好的方法來放置物品?
- 5. 有沒有一種獲得開放泛型方法的MethodInfo的好方法?
- 6. 有沒有一種很好的方法來獲取當前的屬性名稱?
- 7. 有沒有一種很好的方法來禁用SQLAlchemy中的DML?
- 8. 有沒有一種方法來獲得整個'ScrollView'的高度?
- 9. 有沒有一種方法來確定在Java方法中使用的變量?
- 10. 有沒有一個很好的調試C++宏的通用方法?
- 11. 有沒有一種很好的方法在cuda上使用只讀hashmap?
- 12. 有沒有一種很好的方法來在Spark中添加單詞?
- 13. 有沒有一種方法來grep或解析一個變量
- 14. 有沒有一種很好的方法來隱藏用戶的網址?
- 15. 有沒有一種方法可以在Android中獲得沒有GPS的速度?
- 16. 有沒有一種很好的方法來逐個加載圖像?
- 17. Delphi有沒有一種很好的腳本Pascal語言?
- 18. 有沒有一種更有效的方法來獲得註釋的方法?
- 19. 有沒有更好的方法從表格中獲得組的最後一級?
- 20. 有沒有辦法獲得一個java方法中聲明的所有變量的列表?
- 21. 有沒有一個很好的(r)方法在對象中具有默認值
- 22. 鏈接在一起的JavaScript變量沒有很好的理由
- 23. 在另一種方法中使用一個方法的變量
- 24. MVC - 有沒有一種很好的方法來捆綁各自的javascript控件?
- 25. 從一種方法獲取很多變量到另一個C#
- 26. 在Swift中,有沒有更好的方法來初始化一個「get」變量?
- 27. 有沒有一種很好的方法來確保通過雙向綁定發生的對Scope變量的更改反映在相應的服務變量中?
- 28. 有沒有一種很好的方式來包含額外的文件?
- 29. 獲得一個很好格式化的時間戳沒有大量的開銷?
- 30. 有沒有一種很好的方式來可視化大量子圖(> 500)?
我不能幫你的對象表示,但如果你只是想顯示適當的資本文字,嘗試「中StrConv(YourField,vbProperCase)」(這是由接取VBA) – PowerUser 2010-06-15 19:53:37