Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Excel工作表中的HTML标记替换上标和斜体_Html_Excel_Vba_Superscript_Italic - Fatal编程技术网

用Excel工作表中的HTML标记替换上标和斜体

用Excel工作表中的HTML标记替换上标和斜体,html,excel,vba,superscript,italic,Html,Excel,Vba,Superscript,Italic,我需要去掉上标和斜体,在单词/字母周围添加一个HTML标记 例如: 我的短语有一个上标1,还有一个斜体字 应转换为: My phrase has a superscript<sup>1</sup> and also has an <i>italic</i> word. 我的短语有上标1和斜体字。 我已经找到了一个“解决方案”(它位于上标和斜体的位置并存储其位置),但它有很多问题。我要让它工作一段时间: Sub TagSubstitution()

我需要去掉上标和斜体,在单词/字母周围添加一个HTML标记

例如:

我的短语有一个上标1,还有一个斜体字

应转换为:

My phrase has a superscript<sup>1</sup> and also has an <i>italic</i> word.
我的短语有上标1和斜体字。
我已经找到了一个“解决方案”(它位于上标和斜体的位置并存储其位置),但它有很多问题。我要让它工作一段时间:

Sub TagSubstitution()
    Dim lngStart_i As Long
    Dim lngFinish_i As Long
    Dim lngStart_sup As Long
    Dim lngFinish_sup As Long
    Dim n As Long
    Dim k_i As Long
    Dim k_sup As Long
    Dim rngCell As Range
    Dim rngConstants As Range
    Dim cellAddress As String

    On Error Resume Next
    Set rngConstants = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0

    If Not rngConstants Is Nothing Then
        Application.ScreenUpdating = False
        For Each rngCell In rngConstants.Cells
            Dim listStart_i() As Long, X_i As Long
            Dim listFinish_i() As Long, Y_i As Long
            Dim listStart_sup() As Long, X_sup As Long
            Dim listFinish_sup() As Long, Y_sup As Long
            X_i = 0
            Y_i = 0
            X_sup = 0
            Y_sup = 0
            ReDim Preserve listStart_i(X)
            ReDim Preserve listFinish_i(Y)
            ReDim Preserve listStart_sup(X)
            ReDim Preserve listFinish_sup(Y)
            lngStart_i = 0
            lngStart_sup = 0
            For n = 1 To Len(rngCell.Value) + 1
                If rngCell.Characters(n, 1).Font.Italic Then
                    If lngStart_i = 0 Then
                        lngStart_i = n
                        ReDim Preserve listStart_i(0 To X_i)
                        listStart_i(X_i) = lngStart_i
                        X_i = X_i + 1
                    End If
                ElseIf lngStart_i <> 0 Then
                    If Not rngCell.Characters(n, 1).Font.Italic Then
                        lngFinish_i = n
                        ReDim Preserve listFinish_i(0 To Y_i)
                        listFinish_i(Y_i) = lngFinish_i
                        Y_i = Y_i + 1
                        lngStart_i = 0
                    End If
                End If
                If rngCell.Characters(n, 1).Font.Superscript Then
                    If lngStart_sup = 0 Then
                        lngStart_sup = n
                        ReDim Preserve listStart_sup(0 To X_sup)
                        listStart_sup(X_sup) = lngStart_sup
                        X_sup = X_sup + 1
                    End If
                ElseIf lngStart_sup <> 0 Then
                    If Not rngCell.Characters(n, 1).Font.Superscript Then
                        lngFinish_sup = n
                        ReDim Preserve listFinish_sup(0 To Y_sup)
                        listFinish_sup(Y_sup) = lngFinish_sup
                        Y_sup = Y_sup + 1
                        lngStart_sup = 0
                    End If
                End If
            Next n
            If listStart_i(0) <> 0 Then
                Dim sup_addition_i As Integer
                sup_addition_i = 0
                For k_i = LBound(listStart_i) To UBound(listStart_i)
                    start_value = listStart_i(k_i) + sup_addition_i
                    finish_value = listFinish_i(k_i) + sup_addition_i
                    If Len(rngCell.Value) > 255 Then
                        content_len = finish_value + 1 - start_value
                        before_content = Left(rngCell, start_value - 1)
                        after_content = Right(rngCell, Len(rngCell.Value) + content_len - finish_value)
                        after_content = Left(after_content, content_len - 1)
                        end_content = Right(rngCell, Len(rngCell.Value) + 1 - finish_value)
                        rngCell = before_content & "<i>" & after_content & "</i>" & end_content
                    Else
                        rngCell.Characters(start_value, 0).Insert "<i>"
                        rngCell.Characters(finish_value + 3, 0).Insert "</i>"
                    End If
                    sup_addition_i = 7 * (k_i + 1)
                Next k_i
                rngCell.Font.Italic = False
            If listStart_sup(0) <> 0 Then
                Dim sup_addition_sup As Integer
                sup_addition_p = 0 - sup_addition_i
                For k_sup = LBound(listStart_sup) To UBound(listStart_sup)
                    start_value = listStart_sup(k_sup) + sup_addition_sup
                    finish_value = listFinish_sup(k_sup) + sup_addition_sup
                    If Len(rngCell.Value) > 255 Then
                        content_len = finish_value + 1 - start_value
                        before_content = Left(rngCell, start_value - 1)
                        after_content = Right(rngCell, Len(rngCell.Value) + content_len - finish_value)
                        after_content = Left(after_content, content_len - 1)
                        end_content = Right(rngCell, Len(rngCell.Value) + 1 - finish_value)
                        rngCell = before_content & "<sup>" & after_content & "</sup>" & end_content
                    Else
                        rngCell.Characters(start_value, 0).Insert "<sup>"
                        rngCell.Characters(finish_value + 5, 0).Insert "</sup>"
                    End If
                    sup_addition_sup = 11 * (k_sup + 1) - sup_addition_i
                Next k_sup
                rngCell.Font.Superscript = False
            End If
            End If
        Next rngCell
        Application.ScreenUpdating = True
    End If
End Sub
子标记替换()
暗淡的开始和我一样长
朦胧的幻想
暗淡的开始时间
暗淡的lng完成时长
长
暗淡的k_i和你一样长
调暗k_sup的长度
Dim rngCell As范围
变暗rngConstants作为范围
将单元格地址设置为字符串
出错时继续下一步
设置rngConstants=ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)
错误转到0
如果不是rngConstants,则不算什么
Application.ScreenUpdating=False
对于RNGConStats.单元格中的每个rngCell
Dim listStart_i()长度相同,X_i长度相同
淡色列表完成时长,你长
Dim listStart_sup()长度相同,X_sup长度相同
Dim listFinish_sup()长度相同,Y_sup长度相同
X_i=0
Y_i=0
X_sup=0
Y_sup=0
ReDim保存列表开始i(X)
重读保存列表完成i(Y)
重拨保留列表开始\u支持(X)
重播保存列表完成\u支持(Y)
lngStart_i=0
lngStart_sup=0
对于n=1到Len(rngCell.Value)+1
如果为rngCell.Characters(n,1).Font.Italic,则
如果lngStart_i=0,则
lngStart_i=n
重拨保留列表开始\u i(0到X\u i)
listStart_i(X_i)=lngStart_i
X_i=X_i+1
如果结束
如果没有,那么
如果不是rngCell.Characters(n,1).Font.Italic,则
lngFinish_i=n
重拨保存列表完成\u i(0到Y\u i)
listFinish_i(Y_i)=lngFinish_i
Y_i=Y_i+1
lngStart_i=0
如果结束
如果结束
如果为rngCell.Characters(n,1).Font.Superscript,则
如果lngStart_sup=0,则
lngStart_sup=n
重拨保留列表开始支持(0到X支持)
listStart_sup(X_sup)=lngStart_sup
X_sup=X_sup+1
如果结束
如果没有,那么
如果不是rngCell.Characters(n,1).Font.Superscript,则
lngFinish\u sup=n
重拨保存列表完成(0到Y)
listFinish_sup(Y_sup)=lngFinish_sup
Y_sup=Y_sup+1
lngStart_sup=0
如果结束
如果结束
下一个
如果listStart_i(0)0,则
Dim sup_加法_i作为整数
辅助加法i=0
对于k_i=LBound(listStart_i)到UBound(listStart_i)
开始值=列表开始i(k_i)+辅助添加i
完成值=列表完成i(k_i)+辅助添加i
如果Len(rngCell.Value)>255,则
内容长度=完成长度值+1-开始长度值
前\u内容=左(rngCell,开始\u值-1)
后内容=右(rngCell,Len(rngCell.Value)+内容\u Len-完成\u值)
内容后=左(内容后,内容列-1)
结束内容=右侧(rngCell,Len(rngCell.Value)+1-结束内容值)
rngCell=内容前和内容后和内容结束
其他的
rngCell.Characters(起始值,0)。插入“”
rngCell.Characters(完成值+3,0)。插入“”
如果结束
辅助加法=7*(k_i+1)
下一个k_i
rngCell.Font.Italic=False
如果listStart_sup(0)0,则
Dim sup_加法_sup为整数
sup_addition_p=0-sup_addition_i
对于k_sup=LBound(listStart_sup)到UBound(listStart_sup)
起始值=列表起始值上限(k上限)+上限添加值上限
完成值=列表完成支持(k支持)+支持添加
如果Len(rngCell.Value)>255,则
内容长度=完成长度值+1-开始长度值
前\u内容=左(rngCell,开始\u值-1)
后内容=右(rngCell,Len(rngCell.Value)+内容\u Len-完成\u值)
内容后=左(内容后,内容列-1)
结束内容=右侧(rngCell,Len(rngCell.Value)+1-结束内容值)
rngCell=内容前和内容后和内容结束
其他的
rngCell.Characters(起始值,0)。插入“”
rngCell.Characters(完成值+5,0)。插入“”
如果结束
附加附加附加附加=11*(k附加+1)-附加附加附加
下一个k_sup
rngCell.Font.Superscript=False
如果结束
如果结束
下一个rngCell
Application.ScreenUpdating=True
如果结束
端接头
这段代码的问题是,当我在同一个单元格上同时有上标和斜体时,我会遇到这样的问题,即在插入斜体后,上标的位置与以前不同。所以我把每个标签都放错了
Sub AdicionarTags()
    Dim xSh As Worksheet
    Application.ScreenUpdating = False
    For Each xSh In Worksheets
        xSh.Select
        Call TagItalic
        Call TagSuperscript
    Next
    Application.ScreenUpdating = True
End Sub
Sub TagItalic()
    Dim lngStart As Long
    Dim lngFinish As Long
    Dim n As Long
    Dim k As Long
    Dim rngCell As Range
    Dim rngConstants As Range
    Dim cellAddress As String

    On Error Resume Next
    Set rngConstants = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0

    If Not rngConstants Is Nothing Then
        Application.ScreenUpdating = False
        For Each rngCell In rngConstants.Cells
            Dim listStart() As Long, X As Long
            Dim listFinish() As Long, Y As Long
            X = 0
            Y = 0
            ReDim Preserve listStart(X)
            ReDim Preserve listFinish(Y)
            lngStart = 0
            For n = 1 To Len(rngCell.Value) + 1
                If rngCell.Characters(n, 1).Font.Italic Then
                    If lngStart = 0 Then
                        lngStart = n
                        ReDim Preserve listStart(0 To X)
                        listStart(X) = lngStart
                        X = X + 1
                    End If
                ElseIf lngStart <> 0 Then
                    If Not rngCell.Characters(n, 1).Font.Italic Then
                        lngFinish = n
                        ReDim Preserve listFinish(0 To Y)
                        listFinish(Y) = lngFinish
                        Y = Y + 1
                        lngStart = 0
                    End If
                End If
            Next n
            If listStart(0) <> 0 Then
                Dim sup_addition As Integer
                sup_addition = 0
                For k = LBound(listStart) To UBound(listStart)
                    start_value = listStart(k) + sup_addition
                    finish_value = listFinish(k) + sup_addition
                    content_len = finish_value + 1 - start_value
                    before_content = Left(rngCell, start_value - 1)
                    after_content = Right(rngCell, Len(rngCell.Value) + content_len - finish_value)
                    after_content = Left(after_content, content_len - 1)
                    end_content = Right(rngCell, Len(rngCell.Value) + 1 - finish_value)
                    rngCell = before_content & "<i>" & after_content & "</i>" & end_content
                    sup_addition = 7 * (k + 1)
                Next k
                rngCell.Font.Italic = False
            End If
        Next rngCell
        Application.ScreenUpdating = True
    End If
End Sub
Sub TagSuperscript()
    Dim lngStart As Long
    Dim lngFinish As Long
    Dim n As Long
    Dim k As Long
    Dim rngCell As Range
    Dim rngConstants As Range
    Dim cellAddress As String

    On Error Resume Next
    Set rngConstants = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0

    If Not rngConstants Is Nothing Then
        Application.ScreenUpdating = False
        For Each rngCell In rngConstants.Cells
            Dim listStart() As Long, X As Long
            Dim listFinish() As Long, Y As Long
            X = 0
            Y = 0
            ReDim Preserve listStart(X)
            ReDim Preserve listFinish(Y)
            lngStart = 0
            For n = 1 To Len(rngCell.Value) + 1
                If rngCell.Characters(n, 1).Font.Superscript Then
                    If lngStart = 0 Then
                        lngStart = n
                        ReDim Preserve listStart(0 To X)
                        listStart(X) = lngStart
                        X = X + 1
                    End If
                ElseIf lngStart <> 0 Then
                    If Not rngCell.Characters(n, 1).Font.Superscript Then
                        lngFinish = n
                        ReDim Preserve listFinish(0 To Y)
                        listFinish(Y) = lngFinish
                        Y = Y + 1
                        lngStart = 0
                    End If
                End If
            Next n
            If listStart(0) <> 0 Then
                Dim sup_addition As Integer
                sup_addition = 0
                For k = LBound(listStart) To UBound(listStart)
                    start_value = listStart(k) + sup_addition
                    finish_value = listFinish(k) + sup_addition
                    content_len = finish_value + 1 - start_value
                    before_content = Left(rngCell, start_value - 1)
                    after_content = Right(rngCell, Len(rngCell.Value) + content_len - finish_value)
                    after_content = Left(after_content, content_len - 1)
                    end_content = Right(rngCell, Len(rngCell.Value) + 1 - finish_value)
                    rngCell = before_content & "<sup>" & after_content & "</sup>" & end_content
                    sup_addition = 11 * (k + 1)
                Next k
                rngCell.Font.Superscript = False
            End If
        Next rngCell
        Application.ScreenUpdating = True
    End If
End Sub
Option Explicit

Sub remove_italics_and_superscripts()
    Dim i As Long, j As Long, rng As Range, z As String
    For Each rng In ActiveSheet.UsedRange
        For i = 1 To Len(rng)
            If rng.Characters(i, 1).Font.Superscript = True Then
                For j = 0 To Len(rng) - i
                    If rng.Characters(j + i, 1).Font.Superscript = False Then Exit For
                Next j
                z = z & "<sup>" & Mid(rng.Value, i, j) & "</sup>"
            ElseIf rng.Characters(i, 1).Font.Italic = True Then
                For j = 0 To Len(rng) - i
                    If rng.Characters(j + i, 1).Font.Italic = False Then Exit For
                Next j
                z = z & "<i>" & Mid(rng.Value, i, j) & "</i>"
            Else
                z = z & Mid(rng.Value, i, 1)
                j = 1
            End If
            i = i + j - 1
        Next i
        rng.Offset(, 1).Value = z 'didn't immediately see where you output, so just out to the next column to the right
        z = ""
    Next rng
End Sub