Avatar billede nopainnogain Nybegynder
18. august 2011 - 14:24 Der er 3 kommentarer og
1 løsning

Ændrer formatering af ET ord i en sætning, via replace applicationen

Hej eksperter,

Jeg har lavet en lille kode, som gennemsøger et output ark for ord der er listet i et input ark.

Alle de fundne ord skal erstattes af samme ord, men med kursiv format, sådan at jeg sikrer, at alle forekomster af dette ord er skrevet med kursiv.

Problem: replace applicationen ændrer formattet på hele cellen og ikke kun på det pågældende ord.

Følgende ark er nødvendige:
1) input (indeholder liste af ord som der søges efter)
2) output (indeholder en masse tekst, hvori der søges og erstattes)

*** KODE ***

Sub autoKursiv()

Dim forkortelse As String
Dim examinedRow As Integer

examinedRow = 0

Worksheets("input").Select
Range("A1").Select

Do
    examinedRow = examinedRow + 1
    ActiveCell.Offset(1, 0).Select
    forkortelse = ActiveCell.Value
   
    Worksheets("output").Select
    Cells.Select
   
    With Application.ReplaceFormat.Font
        .FontStyle = "Kursiv"
        .Subscript = False
        .TintAndShade = 0
    End With
    Cells.Replace What:=forkortelse, Replacement:=forkortelse, LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
         
    Worksheets("status").Select
    Range("A1").Offset(examinedRow, 0).Select
       
Loop Until IsEmpty(ActiveCell.Offset(1, 0))

End Sub

*** END KODE ***

Spørgsmål: Hvad gør jeg forkert?

Med venlig hilsen
NPNG
Avatar billede kabbak Professor
04. september 2011 - 21:20 #1
da det kun er den del af  det der står i cellen, skal du have start og længde med.

L = Len(forkortelse)


ActiveCell.Characters(Start:=5, Length:=2).Font.FontStyle = "Kursiv"

noget i denne stil

Sub autoKursiv()

    Dim forkortelse As String
    Dim examinedRow As Integer
    Dim L As Integer, R As Integer, C As Range
    examinedRow = 0

    Worksheets("input").Select
    Range("A1").Select

    Do
        examinedRow = examinedRow + 1
        forkortelse = ActiveCell.Offset(1, 0).Value
        L = Len(forkortelse)
        Worksheets("output").Select
      ActiveSheet.UsedRange.Select

        R = InStr(1, ActiveCell, forkortelse)

        For Each C In Selection
            If R > 0 Then

                C.Characters(Start:=R, Length:=L).Font.FontStyle = "Kursiv"
            End If
        Next C

        Worksheets("status").Select
        Range("A1").Offset(examinedRow, 0).Select

    Loop Until IsEmpty(ActiveCell.Offset(1, 0))

End Sub
Avatar billede kabbak Professor
14. december 2011 - 12:53 #2
hallo
Avatar billede nopainnogain Nybegynder
01. januar 2012 - 10:54 #3
Hej Kabbak,

Beklager at jeg ikke så dit svar. Jeg fik nogenlunde samme råd udenfor eksperten.dk, men dit svar kvalificerer sig naturligvis til point. Jeg fik løst mit problem :-)

Mvh NPNG
Avatar billede kabbak Professor
01. januar 2012 - 14:31 #4
;-))
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester