excel 参考使用图标/表情符号作为名称一部分的工作表

ukxgm1gy  于 2023-04-22  发布在  其他
关注(0)|答案(2)|浏览(113)

我正在使用Excel for Office 365 MSO 64位。
我想根据工作表的名称选择工作表。
例如,我有两行VBA代码,它们激活工作簿,然后按工作表的名称选择工作簿中的工作表。

Windows("myworkbook").Activate
Sheets("mysheet").Select

然而,我有一些工作表的名称包含图标或表情符号。例如:“🚑病人”
如果我尝试将图标/表情符号粘贴到VBA代码中,如下所示:Sheets("🚑 Patient").Select,图标不显示在VBA编辑器中。我得到Sheets("????? Patient").select
我尝试使用ChrW()来编码ambulance字符(参见这里:https://www.compart.com/en/unicode/U+1F691
当我运行这个宏时,我得到
过程调用或参数无效

Sub SelectWeirdSheet()
Windows("MYWorkbook.xlsx").Activate
x = ChrW(128657) ' get invalid procedure call or argument here 
Sheets(x & " Patient").Activate
End Sub

我也尝试了救护车ChrW(&H1F691)的代码,但我得到了同样的错误。我怀疑我对ChrW()使用了错误的参数。
文档说我的ChrW()参数超出了范围。这有助于解释错误,但我仍然缺少一个解决方案。

问题:有没有一种方法可以使用VBA来选择名称中包含图标/表情符号的工作表?

我知道你也可以通过索引号来引用工作表,比如Sheets(3).Select
但是,有时候我不知道工作表的索引,但是我知道工作表的名称,所以最好是按名称来调用工作表。

lsmepo6l

lsmepo6l1#

除了自应答响应,在单个工作簿中工作时,编码人员可以在VBA IDE中为工作表分配一个CodeName,然后直接使用该CodeName。这实际上仅在工作表在任何阶段都没有重新创建(即工作表在书中是永久性工作表)时有效,因为Excel会自动为新的/复制的工作表提供一个新的CodeName。
例如,如果给定CodeName shtPatient(见下图),代码可能是:

Sub SelectWeirdSheet()
    ' Windows("MYWorkbook.xlsx").Activate '<-- this approach has limitations
    shtPatient.Activate ' See my comment below about the limitation - this will not work as expected in this example.
End Sub

注意:https://stackoverflow.com/a/10718179/9101981解释了为什么不使用Activate,但是为了这个答案的目的,我保留了代码的原样。还可以看看Using Worksheet CodeName and Avoiding .Select & .Activate。注意的另一个限制是CodeName只对代码所在的工作簿有效-所以在这种情况下可能不适用。
我在下面的图片中突出显示了IDE的CodeName部分,看看“Test Patient”是如何不被称为“Sheet 7”的,而是我在下面的属性窗口中给它起了一个有意义的名字。

nbnkbykc

nbnkbykc2#

为了正确地处理表情符号,它应该被分成两个单独的unicode字符。在本例中,它将是x = ChrW(&HD83D) & ChrW(&HDE91)
这两个Unicode字符组成了救护车表情符号。
现在,这个宏可以工作了。

Sub SelectWeirdSheet()
    Windows("MYWorkbook.xlsx").Activate
    x = ChrW(&HD83D) & ChrW(&HDE91)
    Sheets(x & " Patient").Activate
End Sub

在Reddit上找到了所有地方的解决方案https://www.reddit.com/r/excel/comments/6pq1r1/vba_how_can_i_write_emojis_using_chrw/

相关问题