我已经使用相同的代码从当前用户获取全名有一段时间了,它突然开始表现得很奇怪。 我有一个名为 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 在每个页面上也处于事件状态。
最佳答案
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|
关于ms-access - 附加到字符串的字符在 VBA 中全部显示为问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24534224/