Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种通用的方法可以在VBA中获得变量的良好文本表示?_Vba - Fatal编程技术网

有没有一种通用的方法可以在VBA中获得变量的良好文本表示?

有没有一种通用的方法可以在VBA中获得变量的良好文本表示?,vba,Vba,在VBA中,是否有一种很好的方法来获取变量/对象的文本表示?就像Java的各种String.valueOf。。。方法。您是否尝试过:CStr…?除了“CStr”之外,没有内置的东西,它具有您注意到的局限性。你唯一能做的就是自己写。幸运的是,VBA有足够多的内置运算符“IsArray”、“IsNumeric”、“VarType”等,使它变得简单。这确实让你想知道,为什么不让“CStr”更强大呢 下面的函数就是一个例子。它们是用于Excel/VBA代码的,因此您可能不关心在它们内部调用的用于格式化数

在VBA中,是否有一种很好的方法来获取变量/对象的文本表示?就像Java的各种String.valueOf。。。方法。

您是否尝试过:CStr…?

除了“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

如果需要将整数显示为十六进制、八进制或二进制,此代码在Excel中工作-

fmt = CStr(arg) & " - vbInteger" & " - &H" & Hex(arg) & " - &O" & Oct(arg) & " - &B" & WorksheetFunction.Dec2Bin(arg, 8)
输出如下所示

65-vbInteger-&H41-&O101-&B01000001

如果您不使用Excel,请尝试此网站-


函数LongToBinary返回一个值的二进制文本表示形式。

Hmmm,这似乎与Null有问题-知道为什么吗?我认为CStr是VBA提供的最好的方法。根据您想使用它的用途,TypeName可能也很有用。我无法帮助您使用对象表示法,但如果您只是想显示大小写正确的文本,请尝试StrConvYourField,vbProperCase这是Acess VBA提供的