首页 > 解决方案 > 如何在 ListObject 中显示 guid

问题描述

我试图在ListObject. 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

我像这样执行选择语句

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 列?

标签: excelvbams-accessoledb

解决方案


如果您将自己限制在 ListObjects 和 OLEDB 上,我不这么认为。

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

要将 GUID 转换为字符串,通常使用StringFromGUIDAccess 中的函数,但 OLEDB 不支持该函数。

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

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


推荐阅读