Opgelost Cijfers omzetten naar superscript

Dit topic is als opgelost gemarkeerd

SA3

Gebruiker
Lid geworden
3 jan 2016
Berichten
127
Onderstaande code zet cijfers om naar superscript, echter niet als dit cijfer geplakt zit aan de tekst. In onderstaande voorbeeld wordt alleen de eerste regel omgezet.
Voorbeeld:
1 QXQXW
2QSXWX
4Kmmk km
8Plldmd
3CVC
Wat gaat er fout?

Code:
Sub ConvertToSuperscript()
'
' Alle getallen in tekst omzetten naar Superscript
'
'
Dim doc As Document
Dim arrA As Variant, arrW As Variant
Dim i As Long, b As Integer

    Set doc = ActiveDocument
    arrA = Split(doc.Content, Chr(13))
    For i = LBound(arrA) To UBound(arrA)
        arrW = Split(arrA(i), " ")
        For b = LBound(arrW) To UBound(arrW)
            If IsNumeric(arrW(b)) Then
                With doc.Content.Find
                    .ClearFormatting
                    .Text = arrW(b)
                    With .Replacement
                        .ClearFormatting
                        .Font.Superscript = True
                        .Font.Subscript = False
                    End With
                    .Execute FindText:=arrW(b), ReplaceWith:=arrW(b), Format:=True, Replace:=wdReplaceAll
                End With
            End If
        Next b
    Next i
    MsgBox "Alle cijfers omgezet naar superscript!", vbOKOnly
End Sub
 
Wát er fout gaat, heb je zelf al aangegeven, toch? :). Ik vermoed dus, dat je liever wilt weten wáár het fout gaat. Ik zal er even naar kijken!
 
Eerste resultaten: volgens mij splits je op het verkeerde teken (je gebruikt Regeleindes, geen Alinea-eindes) en dan moet je op Chr(11) splitsen, niet chr(13). En daarnaast zie ik, als ik jouw voorbeeld gebruik, maar één regel waarin een spatie staat achter het cijfer. En je splitst op basis van een spatie, die er dan dus niet is. Zet je overal een spatie achter, dan doet deze macro het prima:
Code:
Sub ConvertToSuperscript()
Dim aDoc As Document
Dim arrA As Variant, arrB As Variant, arrW As Variant
Dim i As Long, b As Integer

    Set aDoc = ActiveDocument
    arrA = Split(aDoc.Content, Chr(11))
    Selection.HomeKey Unit:=wdStory
    For i = LBound(arrA) To UBound(arrA)
        arrW = Split(arrA(i), " ")
        For b = LBound(arrW) To UBound(arrW)
            If IsNumeric(arrW(b)) Then
                With aDoc.Content.Find
                    .ClearFormatting
                    .Text = arrW(b)
                    With .Replacement
                        .ClearFormatting
                        .Font.Superscript = True
                        .Font.Subscript = False
                    End With
                    .Execute FindText:=arrW(b), ReplaceWith:=arrW(b), Format:=True, Replace:=wdReplaceAll
                End With
            End If
        Next b
    Next i
    MsgBox "Alle cijfers omgezet naar superscript!", vbOKOnly
End Sub
 
Maar ik snap dat je een oplossing wilt voor de situatie waarin je ook op teksten zónder spatie wilt kunnen werken, en dan kan het zo:
Code:
Sub ConvertToSuperscript()
Dim aDoc As Document
Dim arrA As Variant
Dim i As Long, b As Integer, txt As String

    Set aDoc = ActiveDocument
    arrA = Split(aDoc.Content, Chr(11))
    Selection.HomeKey Unit:=wdStory
    For i = LBound(arrA) To UBound(arrA)
        txt = "": b = 1
        Do While IsNumeric(Mid(arrA(i), b, 1))
            txt = txt & Mid(arrA(i), b, 1)
            b = b + 1
        Loop
        With aDoc.Content.Find
            .ClearFormatting
            .Text = txt
            With .Replacement
                .ClearFormatting
                .Font.Superscript = True
                .Font.Subscript = False
            End With
            .Execute FindText:=txt, ReplaceWith:=txt, Format:=True, Replace:=wdReplaceAll
        End With
    Next i
    MsgBox "Alle cijfers omgezet naar superscript!", vbOKOnly
End Sub
 
Ik wil inderdaad teksten zónder spatie wijzigen naar superscript.
Jouw script werkt bij mij wel als er een spatie achter het cijfer staat. Zodra ik een spatie toevoeg werkt het wel maar dat is niet mijn bedoeling.
 
Ik heb de tweede in mijn document gezet. Alleen het cijfer 1 wordt omgezet? Ik gebruik deze reeks:
1njanjnaj
9dfvsvvv
6kmg kmg
3dsfv
10dssdddv
 
Cijfer zonder spatie gaat inderdaad goed, maar zoals gezegd hij wijzigt niet verder dan het cijfer 1.
 
En heb je hier dan misschien wél Alinea-eindes gebruikt? Want het andere staatje dat ik uit jouw voorbeeldjes haalde gebruikte Regeleindes. Die hebben dus Char(11) als code, en alinea-eindes splits je met Chr(13).

Als ik jouw laatste voorbeeldje als tekst plak in Word, dan krijg ik alinea-eindes, en dan werkt het prima met deze regel:
Code:
    arrA = Split(aDoc.Content, Chr(13))
 
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan