Return VBA 函数中带有上标字符的字符串

Return a string with superscript characters in VBA function

我在 Excel 中有一个宏,它可以将十进制度数(赤经)转换为天文时角,包括小时 (h)、分钟 (m) 和秒 (s)。 有什么办法,return上标缩写h,m,s的字符串?

这是我的 Excel-宏:

Function Convert_Hours(Decimal_Deg) As Variant
    With Application
        hours_dec = Decimal_Deg / 360 * 24
        hours = Int(hours_dec)

        minutes_dec = hours_dec - hours
        minutes = Int(minutes_dec)

        seconds = minutes_dec - minutes

        Convert_Hours = " " & hours & "h " & minutes & "m " & Round(seconds, 2) & "s "
    End With
End Function

例如,在单元格 A1 中我写 176.7854,在单元格 B1 中写 =Convert_Hours(A1)。这会将 11h 0m 0.79s 写入单元格 B1。但我想要的是:11h 0m 0.79s

我不想(!)使用 VBA 引用某些选定的单元格,然后应用类似 c.Font.Superscript = True 的内容,这是在 VBA 中搜索上标字符串时的标准答案.我的函数 Convert_Hours() 应该 return 一个单独的格式化字符串。

提前致谢!

由于一个字符串只能包含没有格式化的单个字符,所以实现这个没有格式化的唯一方法是找到代表上标小写字母的 Unicode 字符。

上标拉丁字母没有完整的 Unicode 块。所以我们需要从不同的块中挑选那些。我们可以在 Latin_script_in_Unicode.

中找到概述

我们可以在 Spacing Modifier Letters. The ᵐ we can find in Phonetic Extensions.

中找到 ʰ 和 ˢ

如果我们找到了字符,我们必须知道如何将它们连接成VBA中的字符串。为此,可以使用 ChrW 函数。需要字符的十进制代码。

所以

...
Convert_Hours = " " & hours & ChrW(688) & " " & minutes & ChrW(7504) & " " & Round(seconds, 2) & ChrW(738)
...

几乎可以得到你想要的。但是上标字母的大小会有所不同,因为它们来自不同的 Unicode 块。所以我更喜欢在字符串中使用默认字母并稍后将它们格式化为上标。当然,这不能在用户定义函数 (UDF) 中完成。


根据@arcadeprecinct 的评论

...
Convert_Hours = " " & hours & ChrW(&H2B0) & " " & minutes & ChrW(&H1D50) & " " & Round(seconds, 2) & ChrW(&H2E2)
...

也可以使用十六进制。

对我一直有效的简单建议:(1) 转到编程选项卡并开始录制宏; (2) Select 一个包含先前添加的字符串的单元格; (3) 单击公式字段(屏幕上方),select 一段字符串并将其标记为上标; (4) 停止记录,查看生成的代码。这将向您展示这是如何完成的。

这是我刚刚生成的示例:

    Sub Macro1()
    '
    ' Macro1 Macro
    '

    '
        ActiveCell.FormulaR1C1 = "asd sad ads asd asd asd "
        With ActiveCell.Characters(Start:=1, Length:=12).Font
            .Name = "Arial"
            .FontStyle = "Regular"
            .Size = 11
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ThemeColor = xlThemeColorLight1
            .TintAndShade = 0
            .ThemeFont = xlThemeFontMinor
        End With
        With ActiveCell.Characters(Start:=13, Length:=7).Font
            .Name = "Arial"
            .FontStyle = "Bold"
            .Size = 11
            .Strikethrough = False
            .Superscript = True
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ThemeColor = xlThemeColorLight1
            .TintAndShade = 0
            .ThemeFont = xlThemeFontMinor
        End With
        With ActiveCell.Characters(Start:=20, Length:=5).Font
            .Name = "Arial"
            .FontStyle = "Regular"
            .Size = 11
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ThemeColor = xlThemeColorLight1
            .TintAndShade = 0
            .ThemeFont = xlThemeFontMinor
        End With
        Range("D4").Select
    End Sub

希望对您有所帮助。