我正在使用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
。
但是,有时候我不知道工作表的索引,但是我知道工作表的名称,所以最好是按名称来调用工作表。
2条答案
按热度按时间lsmepo6l1#
除了自应答响应,在单个工作簿中工作时,编码人员可以在VBA IDE中为工作表分配一个CodeName,然后直接使用该CodeName。这实际上仅在工作表在任何阶段都没有重新创建(即工作表在书中是永久性工作表)时有效,因为Excel会自动为新的/复制的工作表提供一个新的CodeName。
例如,如果给定CodeName
shtPatient
(见下图),代码可能是:注意:https://stackoverflow.com/a/10718179/9101981解释了为什么不使用
Activate
,但是为了这个答案的目的,我保留了代码的原样。还可以看看Using Worksheet CodeName and Avoiding .Select & .Activate。注意的另一个限制是CodeName只对代码所在的工作簿有效-所以在这种情况下可能不适用。我在下面的图片中突出显示了IDE的CodeName部分,看看“Test Patient”是如何不被称为“Sheet 7”的,而是我在下面的属性窗口中给它起了一个有意义的名字。
nbnkbykc2#
为了正确地处理表情符号,它应该被分成两个单独的unicode字符。在本例中,它将是
x = ChrW(&HD83D) & ChrW(&HDE91)
这两个Unicode字符组成了救护车表情符号。
现在,这个宏可以工作了。
在Reddit上找到了所有地方的解决方案https://www.reddit.com/r/excel/comments/6pq1r1/vba_how_can_i_write_emojis_using_chrw/