如何在 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)