下标与上标冲突 [英] Subscript vs. Superscript conflict

查看:58
本文介绍了下标与上标冲突的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

背景:

我正在尝试编写一个模块,以使用其格式连接字符串.因此,我正在寻找所有可能重要的 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆