You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access VBA中18号及以上按钮出现德语变音乱码问题

问题分析与解决

核心原因

从代码逻辑和现象来看,18号及以上按钮触发了不同的文件路径分支,导致读取的文件编码与1-17号不一致,进而引发德语变音字符乱码:

  • 出现的öäüß是典型的「UTF-8编码文本被当作ANSI编码读取」的错误结果。
  • 查看GetText函数中的路径判断逻辑:
    If Screen.ActiveControl.Parent.Name = "EmailVersand" And Screen.ActiveControl.Name Like "EmailButton*" Then
      strPfad = Forms!Startformular!txtVorlagenPfad & "TA_VBemails\"
    End If
    
    只有当按钮的Name属性匹配EmailButton*格式时,才会使用TA_VBemails路径。如果18-20号按钮的命名不符合这个规则(比如叫TextButton18而非EmailButton18),就会走另一个路径分支,读取的文件可能是UTF-8编码,但代码默认按ANSI方式读取,最终导致乱码。

验证步骤

  • 检查18-20号按钮的Name属性,确认是否与1-17号一致(比如都是EmailButtonXX格式)。
  • 对比两个路径下的文件编码:用记事本打开对应文件,点击「文件→另存为」,查看右下角的编码选项。1-17号对应的文件应为ANSI,18号及以上对应的则是UTF-8。

解决方案

方案1:统一按钮命名

将18-20号按钮的Name属性修改为EmailButton18、EmailButton19、EmailButton20,让它们触发相同的路径分支,读取编码一致的文件。

方案2:修改读取逻辑,兼容UTF-8编码

如果需要保留现有路径分支且支持UTF-8文件,修改GetText函数,改用ADODB.Stream读取文件以确保编码正确:

Public Function GetText(fName As String, Optional strPfad As String) As String
    Dim stream As Object
    Set stream = CreateObject("ADODB.Stream")
    
    On Error GoTo Err
    If strPfad = "" Then
        strPfad = Forms!Startformular!txtVorlagenPfad & GetPartFileName(CurrentDb.Name, bbGetName)
        If Screen.ActiveControl.Parent.Name = "EmailVersand" And Screen.ActiveControl.Name Like "EmailButton*" Then
            strPfad = Forms!Startformular!txtVorlagenPfad & "TA_VBemails\"
        End If
    End If
    If Right(strPfad, 1) <> "\" Then strPfad = strPfad & "\"
    
    With stream
        .Charset = "utf-8"
        .Open
        .LoadFromFile strPfad & fName
        GetText = .ReadText
        .Close
    End With
    Set stream = Nothing
    Exit Function
    
Err:
    GetText = ""
    MsgBox Err.Description
    If Not stream Is Nothing Then stream.Close
    Set stream = Nothing
End Function

该方法会强制以UTF-8编码读取文件,无论文件是否带BOM,都能正确解析德语变音字符。

内容的提问来源于stack exchange,提问作者bbProg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 09:23:10