2014-07-02 46 views
2

我一直使用相同的代碼從當前用戶獲取全名,現在它突然開始表現怪異。 我有一個名爲CurrentUser的字符串變量,我用我的函數GetFullNameOfLoggedUser()填充。 這個返回在即時窗口(msgbox也工作正常)「姓,名(F)」它應該。附加到字符串的字符都顯示爲VBA中的問號

當我想給變量,另一個名爲「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)? ????? ?????????????????? ??? ?? ????? 

有沒有人有一個線索,所有的問號來自哪裏?

免責聲明姓氏和名字顯然是常規值,爲了隱私而忽略。

額外的信息:

要獲得完整的網名,我用這美好的片斷,從開發阿希什代碼,這使得使用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 

正如當地人窗口看到,它確實是一個字符串。 (此卡已採取正確的funcion結束前,所以沒有進一步的變化將發生在變量。

CurrentUser也被明確定義爲一個字符串變量。Explicit選項也是每個網頁上的活躍。

+0

是名稱的(F)部分或者是奇怪的呢?這是所有名字的情況嗎? – EvenPrime

+0

(F)也屬於「CurrentUser」。 (名字的第一個字母)我無法在不同的計算機上嘗試它。但是我現在使用的名字以前從未給我這個問題。 – Jens

+2

檢查「CurrentUser」變量的類型和「GetFullNameOfLoggedUser()」函數的返回類型。明確聲明它們是'String'。如果其中一個是「變體」,奇怪的事情可能會發生。另外,調試'GetFullNameOfLoggedUser()'函數,並檢查它獲取結果的位置,以及應用程序中是否有其他操作正在修改此值(可能會將Watch添加到變量中)。 – Barranka

回答

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| 
+0

你,先生戈登湯普森,是我的英雄。它完全解決了這個問題。然而,我很好奇這是什麼造成了這種異常!不知何故,該字符串會導致以下所有字符變成疑問句! – Jens

+0

@JenZzz我的猜測是該字符串有一個尾隨的空('Chr(0)'),它被'Len()'忽略,並且不會自行打印。但是,在使字符串看起來像Unicode之後附加字符,VBA環境只能顯示爲問號。 –

+0

多麼奇怪。無論如何,感謝您的答案和明確的解釋! – Jens