附加到字符串的字符在VBA中都显示为问号

时间:2014-07-02 14:47:40

标签: ms-access access-vba ms-access-2007

我一直在使用相同的代码从当前用户获取一段时间的全名,它突然开始表现得很奇怪。 我有一个名为CurrentUser的字符串变量,我用我的函数GetFullNameOfLoggedUser()填充它。 在即时窗口中返回(msgbox也可以正常工作)"姓氏,名字(F)"这是应该的。

当我想将变量赋予另一个名为' sql1'的字符串变量时,它会突然变得奇怪:

CurrentUser = GetFullNameOfLoggedUser()
Dim sql1 As String: sql1 = "UPDATE Tbl_Records SET Tbl_Records.[Added by] = """ & CurrentUser & """ WHERE Tbl_Records.[Added by] IS NULL;"

sql1的值突然变为:

UPDATE Tbl_Records SET Tbl_Records.[Added by] = "Lastname, Firstname (F)? ????? ?????????????????? ??? ?? ?????

是否有人知道所有问号的来源?

免责声明姓氏和名字显然是常规值,为了隐私而省略它们。

额外信息:

要获取完整的网络名称,我使用Dev Ashish的这段优秀代码,它使用了Windows API: http://access.mvps.org/access/api/api0066.htm

该函数已变暗为字符串。我添加了一个""在函数的末尾,以确保值是一个字符串类型:

Function GetFullNameOfLoggedUser(Optional strUserName As String) As String
...
GetFullNameOfLoggedUser = StrFromPtrW(pTmp.EUI_full_name) & ""
End Function

如本地窗口所示,它确实是一个字符串。 (此快照已在功能结束前拍摄,因此变量不会发生进一步的变化。

CurrentUser也已明确定义为字符串变量。 Option Explicit在每个页面上也都有效。

1 个答案:

答案 0 :(得分:3)

fGetFullNameOfLoggedUser()返回的字符串似乎有些奇怪。当我运行代码时

Dim s As String
s = fGetFullNameOfLoggedUser()
Debug.Print Len(s)
Debug.Print s

我得到了

 13
GORD THOMPSON

看起来是正确的。但是,如果我将最后Debug.Print更改为

Debug.Print "|" & s & "|"

我得到了

|GORD THOMPSON?

最后一个字符是问号?,而不是管道|。但是,如果我Trim()字符串

Debug.Print "|" & Trim(s) & "|"

然后我得到

|GORD THOMPSON|