下标与上标冲突 [英] Subscript vs. Superscript conflict
问题描述
背景:
我正在尝试编写一个模块,以使用其格式连接字符串.因此,我正在寻找所有可能重要的 Font
属性,包括 Subscript
和 Superscript
.
I'm trying to write a module to concatenate strings with it's formatting. Therefor I'm looking in all Font
properties that could matter, including Subscript
and Superscript
.
样本数据:
想象一下 A1
:
示例代码:
Sub Test()
With Sheet1.Range("B1")
.Value = .Offset(0, -1).Value
For x = 1 To .Characters.Count
.Characters(x, 1).Font.Subscript = .Offset(0, -1).Characters(x, 1).Font.Subscript
.Characters(x, 1).Font.Superscript = .Offset(0, -1).Characters(x, 1).Font.Superscript
Next x
End With
End Sub
结果:
问题:
如果我将使用 F8 逐步执行此代码,则可以看到应该为下标的字符变为下标,但是当传递上标值时,它将失去其属性值.另一种方法可以正常工作,这意味着上标属性保持不变.
If I would go through this code step-by-step using F8 I can see the characters that are supposed to be subscript become subscript, but will loose it's properties value when the superscript value is passed. The other way around works fine, meaning the superscript properties stay intact.
此过程是较大过程的一部分,例如,我尝试将其转换为
This procedure is part of a larger procedure where for example I tried to convert this:
Sub ConcatStringsWithFormat()
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
Dim props(9) As Variant, arr As Variant
Dim rng As Range
Dim x As Long, y As Long: y = 0
Set rng = Sheet1.Range("A1:A3")
With Application
.Trim (rng)
arr = rng: arr = .Transpose(.Index(arr, 0, 1))
End With
For Each cell In rng
If Len(cell) > 0 Then
y = y + 1
For x = 1 To cell.Characters.Count
props(0) = cell.Characters(x, 1).Font.Bold
props(1) = cell.Characters(x, 1).Font.ColorIndex
props(2) = cell.Characters(x, 1).Font.FontStyle
props(3) = cell.Characters(x, 1).Font.Italic
props(4) = cell.Characters(x, 1).Font.Size
props(5) = cell.Characters(x, 1).Font.Strikethrough
props(6) = cell.Characters(x, 1).Font.Subscript
props(7) = cell.Characters(x, 1).Font.Superscript
props(8) = cell.Characters(x, 1).Font.TintAndShade
props(9) = cell.Characters(x, 1).Font.Underline
dict.Add y, props
y = y + 1
Next x
End If
Next cell
With Sheet1.Cells(1, 2)
.Value = Application.Trim(Join(arr, " "))
For x = 1 To .Characters.Count
If Mid(.Value, x, 1) <> " " Then
.Characters(x, 1).Font.Bold = dict(x)(0)
.Characters(x, 1).Font.ColorIndex = dict(x)(1)
.Characters(x, 1).Font.FontStyle = dict(x)(2)
.Characters(x, 1).Font.Italic = dict(x)(3)
.Characters(x, 1).Font.Size = dict(x)(4)
.Characters(x, 1).Font.Strikethrough = dict(x)(5)
.Characters(x, 1).Font.Subscript = dict(x)(6)
.Characters(x, 1).Font.Superscript = dict(x)(7)
.Characters(x, 1).Font.TintAndShade = dict(x)(8)
.Characters(x, 1).Font.Underline = dict(x)(9)
End If
Next x
End With
End Sub
结果:
如您所见,只是下标属性丢失了.是否想到了为什么会发生这种情况以及如何克服这种情况?显然,如果您手动尝试执行此操作,则单元格将允许两个属性在不同的字符上都为真.
As you can see, it's just the subscript properties that get lost. Any thought on why this happens and also on how to overcome this? It's apparent that a cell will allow both properties to be true on different characters if you manually tried this.
推荐答案
刚刚发现交换行将给出正确的结果:
Just found out that swapping the lines will give the correct result:
错误
With Sheet1.Range("B1")
.Value = .Offset(0, -1).Value
For x = 1 To .Characters.Count
.Characters(x, 1).Font.Subscript = .Offset(0, -1).Characters(x, 1).Font.Subscript
.Characters(x, 1).Font.Superscript = .Offset(0, -1).Characters(x, 1).Font.Superscript
Next x
End With
右
With Sheet1.Range("B1")
.Value = .Offset(0, -1).Value
For x = 1 To .Characters.Count
.Characters(x, 1).Font.Superscript = .Offset(0, -1).Characters(x, 1).Font.Superscript
.Characters(x, 1).Font.Subscript = .Offset(0, -1).Characters(x, 1).Font.Subscript
Next x
End With
将行换成行.除了这些属性,在单元格设置下,这些属性也位于彼此之间.
Swapping the lines around worked. With no other explaination than that these properties are also below eachother under cell settings.
这篇关于下标与上标冲突的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!