【问题标题】:Excel VBA - How to convert an Object into a StringExcel VBA - 如何将对象转换为字符串
【发布时间】:2016-02-02 07:48:10
【问题描述】:

我喜欢将一个对象转换成一个字符串。我找到了这个topic,但我无法让它在 Excel 2010 中工作(Excel 似乎不知道“Cast.xxx”、“CArray()”和“Array()”?)

我知道如何转换变体,例如"toString = CStr(x)" 但不是如何为对象做最好的方法

Function toString(ByVal x As Variant) As String
  If TypeOf x Is Object  Then
      toString = ???   
  Else
      toString = CStr(x)
  End If
End Function

有什么建议吗?

【问题讨论】:

  • 对不起我的无知。 CStr 是否也适用于 Object 。我尝试了一些类似的方法,将我的对象转换为字符串。所以问这个问题
  • 不,在某些情况下你会得到一个 excpetion 例如。如果类型是“集合”或“字典”,所以我希望这里的一些专家可能已经编写了一些脚本,可以转换 Excel 中大多数使用的类型
  • 你打算只列出对象的属性和方法吗?然后您可以通过在ScriptControl 中执行的for (var oItem in oSample) {oDict.Add(oItem, oSample[oItem]);} 之类的JS 代码来检索它们。或者,如果您稍后将字符串转换回对象,请查看 Serialization/DeserializationMarshalling/Unmarshalling。 AFAIK VBA 没有它们的本机实现。无论如何,解决方案取决于对象类型。

标签: excel vba casting typeconverter


【解决方案1】:

你指的是 IFormattable 接口吗?例如在 VB.NET 中?

Excel VBA 不是一种可以为您提供 ToString 方法的语言,因为它不支持继承。

在您的示例中,您只是将变体转换为字符串,但 VBA 中的对象不会直接支持这一点。

如果您有一个外部 COM 对象,则需要在接口中公开该对象才能访问此方法以从 VBA 调用它。

对于您自己的类,您可以为您的对象实现自己的 IFormattable 接口,但您必须先分配给该接口,然后才能调用对象的 ToString 方法 - 可能使用辅助方法。你当然可以为每个通过类接口的类提供一个 ToString 方法,但是如果你想为所有对象包含这个功能,那么接口可能是要走的路。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2011-11-28
    • 2017-01-28
    • 1970-01-01
    • 2021-02-03
    • 2012-07-20
    • 2018-07-19
    • 2019-07-07
    • 1970-01-01
    相关资源
    最近更新 更多