下标与上标冲突

问题描述 投票:1回答:2

[背景:]

我正在尝试编写一个模块,以使用其格式来连接字符串。因此,我正在寻找可能涉及的所有Font属性,包括SubscriptSuperscript


样本数据:] >>

想象A1

SO SO


示例代码:

] >>
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

[结果:

]

enter image description here


问题:

如果我可以使用F8]逐步执行此代码,则可以看到本应下标的字符变为下标,但是当传递上标值时,它将失去其属性值。另一种方法工作正常,这意味着上标属性保持不变。

此过程是较大的过程的一部分,例如,我尝试转换此过程:

enter image description here

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

结果:

enter image description here

如您所见,只是下标属性会丢失。是否对为什么会发生以及如何克服这种情况有任何想法?显然,如果您手动尝试执行此操作,则单元格将允许两个属性在不同的字符上都为真。

背景:我正在尝试编写一个模块,以使用其格式来连接字符串。因此,我正在寻找所有可能重要的字体属性,包括下标和上标。示例数据:...

仅在设置这些属性之前进行测试:

Sub Test()

With Sheet1.Range("B2")
    .Value = .Offset(0, -1).Value
    For x = 1 To .Characters.Count
      If .Offset(0, -1).Characters(x, 1).Font.Subscript Then
         .Characters(x, 1).Font.Subscript = True
      ElseIf .Offset(0, -1).Characters(x, 1).Font.Superscript Then
         .Characters(x, 1).Font.Superscript = True
      End If
    Next x
End With

End Sub

刚刚发现交换行将给出正确的结果:


Wrong

] >>

enter image description here

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

] >>

enter image description here

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

将行换成行。除了这些说明,在单元格设置下,这些属性还在彼此之下。

enter image description here

excel vba fonts subscript superscript
2个回答
1
投票

仅在设置这些属性之前进行测试:


0
投票

刚刚发现交换行将给出正确的结果:


Wrong

© www.soinside.com 2019 - 2024. All rights reserved.