如何在 ListObject 中显示 guid

Posted

技术标签:

【中文标题】如何在 ListObject 中显示 guid【英文标题】:How can I display guids in a ListObject 【发布时间】:2020-09-18 15:50:39 【问题描述】:

我试图在ListObject 中显示一条SQL 语句的结果。 SQL 语句选择的数据位于 MS-Access 表中,并包含数据类型为 guid 的列。

ListObject 对象是这样创建的

set listObj = activeSheet.listObjects.add( _
    sourceType  := xlSrcExternal         , _
    source      := array(source)         , _
    destination := destCell)

source 是一个值为OLEDB;provider=Microsoft.ACE.OLEDB.12.0;data source=p:\ath\do\db.accdb 的字符串。

我这样执行select语句

with listObj ' 

    .displayName = "foo"

     with .queryTable ' 

         .commandType            = xlCmdSql
         .commandText            = array("select * from tab")

         .refreshOnFileOpen      = false
         .backgroundQuery        = true
         .refreshStyle           = xlInsertDeleteCells
         .saveData               = true
         .refreshPeriod          = 0
         .preserveColumnInfo     = true

         .refresh backgroundQuery := false

     end with ' 

end with ' 

这会显示查询的结果集,但没有包含 guid 的列。

那么,有没有办法添加 guid 列?

【问题讨论】:

这段代码是什么语言?那不是 VBA。 哦,好吧,我现在看到那些撇号了。奇数。 撇号在 VBA 中开始 cmets.. 我知道他们有,奇怪的是大括号。 大括号用于代码折叠。 【参考方案1】:

如果你只使用 ListObjects 和 OLEDB,我不这么认为。

GUID 在 Access 中表示为二进制数据。 Excel 列表对象无法显示。

要将 GUID 转换为字符串,通常在 Access 中使用 StringFromGUID 函数,但 OLEDB 不支持。

但是,PowerQuery 和 Microsoft Query 本身就可以理解 GUID,并且会正确显示它们。不幸的是,通过 VBA 使用 PowerQuery 会弹出令人讨厌的警告,因此 Microsoft Query 往往是最佳选择。

或者,您可以先在 Access 中执行 SELECT StringFromGUID(MyGuid) As MyGUIDString, * INTO TempTable FROM tab(通过自动化 Access 应用程序),然后在 Excel 中显示。

【讨论】:

以上是关于如何在 ListObject 中显示 guid的主要内容,如果未能解决你的问题,请参考以下文章

VBA:如何检索 HeaderRowRange 中给定元素的 ListObject-Column-Count?

如何通过仅选择表正下方行中的任何单元格来触发宏(ListObject)

有没有办法遍历表(listobject)列中的可见单元格?

标记和过滤重复 ListObject VBA

通过标题名称而不是列索引引用 VSTO Excel ListObject 的列

SQL中的Excel ListObject(格式为表格)