2

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

我想编写一个 VBA 宏,它根据工作表的名称在工作簿中选择不同的工作表。

例如,我有两行 VBA 代码激活工作簿,然后通过工作表的名称选择工作簿中的特定工作表。

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

但是,我必须处理一些包含图标或表情符号的工作表。例如,有一个具有以下名称的工作表:“患者”。

如果我尝试像这样将图标/表情符号粘贴到 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 来选择名称中包含图标/表情符号的工作表?

我知道您也可以像这样按索引号参考工作表Sheets(3).Select。但是,在某些情况下,我提前不知道工作表的索引,但我会知道工作表的名称,因此我最好按名称调用工作表。

谢谢你。

4

2 回答 2

1

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

于 2019-10-12T18:16:32.107 回答
1

除了自答响应外,在单个工作簿中工作时,编码人员可以在 VBA IDE 中为工作表分配一个 CodeName,然后直接使用该 CodeName。这只有在任何阶段都没有重新创建工作表(即书中的永久工作表)时才有效,因为 Excel 将自动为新的/复制的工作表赋予新的代码名。

例如,如果给定 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,但出于此答案的目的,我已按原样保留代码。另请查看使用工作表代码名和避免 .Select & .Activate。注意的另一个限制是 CodeName 仅对代码所在的工作簿有效 - 因此在这种情况下可能不适用。

我在下图中突出显示了 IDE 的 CodeName 部分,看看“Test Patient”如何不被称为“Sheet7”,而是有一个我在下面的属性窗口中给出的有意义的名称。

在此处输入图像描述

于 2019-10-12T21:27:17.813 回答