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
希望对您有所帮助。
我在 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
希望对您有所帮助。