VBA 无法识别匈牙利语中的对象引用

VBA not recognizing object references in the Hungarian language

这个问题在多年没有任何问题后突然出现。

我的一个 Excel VBA 程序有一个匈牙利语工作表名称,该名称包含一个在英语或其他拉丁字符语言中找不到的字母。请注意,我指的不是“匈牙利表示法”,而是匈牙利的语言。我正在使用 Windows 10 和 Office 365。

打开工作簿时,VBA ThisWorkbook 模块中的代码会执行以初始化一些变量,并在这样做时引用该工作表的名称。

到目前为止,这段代码执行没有问题,但现在它引发了 运行 次“下标超出范围”。到达该行代码时出错。这是出错的代码行:

Set StartSheet = ThisWorkbook.Worksheets("Kezdőlap - Start")

(您正在查看的网站可能不会显示匈牙利语中的违规字母。)

将这些对象中的第一个更改为英文名称可以使执行继续,但遇到下一个匈牙利语对象名称时会出现相同的错误。这些错误仅涉及具有非拉丁匈牙利字符的匈牙利名称。工作簿和程序都加载了匈牙利名字,我当然想保留。

在VBA编辑器中使用Search/Replace工具时出现了一个相关的奇怪现象。当我在搜索对话框中输入一个匈牙利语单词,或从其他地方粘贴它时,唯一的匈牙利语字母会自动更改为类似的非匈牙利语字母。因此未找到代码中的目标匈牙利语文本。

我尝试删除并重新安装 Windows 10 和 Office,并在 Windows 设置中以及通过 Excel 中的“语言”选项卡删除并重新安装匈牙利语在选项下。 Microsoft 支持的努力也未能解决此问题。

我仍然可以通过切换到匈牙利语(使用任务栏中的语言选择器)在 Office 应用中键入匈牙利语。 Office 还会对匈牙利语文本执行拼写检查。

感谢您的帮助。

您的安装没有问题。 VBA 编辑器很旧,不幸的是,它从未更新以支持 UTF-8 或 UTF-16。
但是,这并不意味着字符串不能包含“特殊”字符,例如 sheet 名称。要获取有关使用哪个字符的信息,请在 VBA 中打开直接 window 并键入

for i=1 to len(activesheet.name): ? i & "=" & AscW(mid(activesheet.name, i, 1)) : next

AscW-函数给出字符的数字表示。如您所见,第 5 个字符的值为 337,这超出了 VBE 可以处理的字符集。

可能的解决方法:在 VBA 中写入 sheet 名称,并为您的特殊字符使用 ChrW 函数。该函数与AscW函数相反,它将一个数字转换成相应的字符:

Dim startsheetname As String
startsheetname = "Kezd" & ChrW(337) & "lap - Start"
Set StartSheet = ThisWorkbook.Sheets(startsheetname)

备选方案:
只需使用 Worksheet Index:

Set StartSheet = ThisWorkbook.Sheets(1)

使用 sheet 的 codeName。代码名称是 VBA 编辑器中显示的名称。请在此处查看通过代码名称检索 sheet 的函数: