Excel VBA 引用使用 icon/emoji 作为名称一部分的工作表

Excel VBA refer to worksheet that uses icon/emoji as part of name

我正在使用 Excel Office 365 MSO 64 位。

我想编写一个 VBA 宏,根据作品sheet 的名称在工作簿中 select 不同的作品sheet。

例如,我有两行 VBA 激活工作簿的代码,然后 select 工作簿中 sheet 的特定 sheet 名称.

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

但是,我必须处理一些包含图标或表情符号的 sheet。例如,有一个作品sheet 的名字是:“Patient”.

如果我尝试像这样将 icon/emoji 粘贴到 VBA 中:Sheets(" Patient").Select,该图标不会显示在 VBA 编辑器中。相反,我得到 Sheets("????? Patient").select.

我也试过用ChrW()编码?救护车角色(见此处:https://www.compart.com/en/unicode/U+1F691

当我 运行 下面这个宏时),我得到一个 invalid procedure call or argument 如下所述。

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用于select具有[=49=的工作sheet ] 作为他们名字的一部分?

我知道您也可以像这样 Sheets(3).Select 通过索引号引用作品sheet。 但是,有些情况下我不知道 sheet 的索引,但我会知道 sheet 的名称,所以我最好将工作称为 sheets 的名字。

谢谢。

为了正确处理表情符号,应将其拆分为两个单独的 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/

除了自我回答之外,在单个工作簿中工作时,编码人员可以为sheet 在 VBA IDE 中,然后直接使用该代号。这实际上仅在 Sheet 在任何阶段都没有重新创建(即在书中是永久的 sheet)时才有效,因为 new/copied sheet 将自动Excel.

给出了一个新的代号

例如,如果给定代号 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

注: explains why not to use Activate, but I have left the code as-is for the purposes of this answer. Also look at 。注意到的另一个限制是代码名称仅对代码所在的工作簿有效 - 因此在这种情况下可能不适用。

我在下图中突出显示了 IDE 的代号部分,看看 "Test Patient" 是如何不被称为 "Sheet7",而是我给它取了一个有意义的名字下面的属性 window。