2010-06-15 63 views

回答

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

相關問題