PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerExcelExcelAutomatiskt stora bokstävera på "key words" i alla celler i en kolumn.Automatiskt stora bokstävera på "key words" i alla celler i en kolumn.
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2017-06-12 07:56
 

 Hejsan excel forum!

Jag söker lite hjälp angående en formel eller macro där jag har en "sheet" med ord och vill att dessa orden skall automatisk ändras till STORA BOKSTÄVER när jag kör igång macro. 

 

Jag har en macro idag där den stryker under alla dessa orden.  Den ser ut såhär:

Sub UnderlineKeyWords()

  Dim AllMatches As Object

  Dim itm As Variant

  Dim Cell As Range

  Dim lr As Long

 

  Const myCols As String = "G:I"

  

  Application.ScreenUpdating = False

  lr = Columns(myCols).Find(What:="*", After:=Columns(myCols).Cells(1), LookIn:=xlValues, SearchDirection:=xlPrevious).Row

  Columns(myCols).Resize(lr).Font.Underline = False

  With CreateObject("VBScript.RegExp")

    .Global = True

    .IgnoreCase = True

    .Pattern = "\b(" & Join(Application.Transpose(Sheets("Words").Range("A1", Sheets("Words").Cells(Rows.Count, "A").End(xlUp)).Value), "|") & ")\b"

    For Each Cell In Columns(myCols).Resize(lr).Cells

        Set AllMatches = .Execute(Cell.Text)

        For Each itm In AllMatches

          Cell.Characters(itm.firstIndex + 1, itm.Length).Font.Underline = True

        Next itm

    Next Cell

  End With

  Application.ScreenUpdating = True

End Sub

 

 

Hur kan jag få den att istället ändra till stora bokstäver?
 
Tack på förhand!
Nytt inlägg
 2017-06-12 12:54
 

Byt ut 
Underline = True
mot
UCase

Dvs raden

        Cell.Characters(itm.firstIndex + 1, itm.Length).Font.Underline = True

Mot

        Cell.Characters(itm.firstIndex + 1, itm.Length).Caption = UCase(Cell.Characters(itm.firstIndex + 1, itm.Length).Caption)

 

Nytt inlägg
 2017-06-12 14:07
 

 Funkade suveränt! Tack för hjälpen ano!

Nytt inlägg
 2017-06-13 09:02
 

 Hejsan igen!

 

När jag försöker köra macro på en längre text så verkar den inte förstå att den ska köra stora bokstäver. Den förstår ifall det är enstaka ord i en cell. 

Hur löser jag så att den kör genom hela cellen?

 

Nytt inlägg
 2017-06-13 09:55
 

 Fungerar originalkoden?

De enda jag kan se är att sammanläggningen verkar kräva att det alltid står minst två rader i Words-bladet när den skapar sökvillkoret. Om du bara har fyllt cell A1 så kan du testa att mata in ett mellanslag eller nonsens i A2

Eftersom det är sökningen med reguljära uttryck (eller vad det heter på svenska) som är krångligast (svart hål i min kunskapsbank) så kan du kolla om du hittar någon slags begränsning. T.ex här:

https://www.tutorialspoint.com/vbscript/vbscript_reg_expressions.htm

Nytt inlägg
 2017-06-13 11:33
 

 Orginalkoden fungerar. Den koden som jag fick av dig igår gör jobbet men inte när texten är för lång. Kan man lösa så den kör stora bokstäver hela vägen i cellen?

Koden ser ut såhär i dagsläget:

Sub UnderlineKeyWords()

  Dim AllMatches As Object

  Dim itm As Variant

  Dim Cell As Range

  Dim lr As Long

 

  Const myCols As String = "G:I"

  

  Application.ScreenUpdating = False

  lr = Columns(myCols).Find(What:="*", After:=Columns(myCols).Cells(1), LookIn:=xlValues, SearchDirection:=xlPrevious).Row

  Columns(myCols).Resize(lr).Font.Underline = False

  With CreateObject("VBScript.RegExp")

    .Global = True

    .IgnoreCase = True

    .Pattern = "\b(" & Join(Application.Transpose(Sheets("Words").Range("A1", Sheets("Words").Cells(Rows.Count, "A").End(xlUp)).Value), "|") & ")\b"

    For Each Cell In Columns(myCols).Resize(lr).Cells

        Set AllMatches = .Execute(Cell.Text)

        For Each itm In AllMatches

          Cell.Characters(itm.firstIndex + 1, itm.Length).Caption = UCase(Cell.Characters(itm.firstIndex + 1, itm.Length).Caption)

        Next itm

    Next Cell

  End With

  Application.ScreenUpdating = True

End Sub

Nytt inlägg
 2017-06-13 12:38
 

testa att byta ut

Cell.Characters(itm.firstIndex + 1, itm.Length).Caption = UCase(Cell.Characters(itm.firstIndex + 1, itm.Length).Caption)

mot

Cell.Value = UCase(Cell.Value)

 

Det blir en massa ondödig kod som egentligen inte behövs med det borde fungera.

 

Men jag undrar fortfarande:

1. om originalkoden (understrykning) fungerar när texten blir för lång (om den görd etkand et MÖJLIGTVIS finnas en begränsning för UCase på 65000 tecken)

2. Vad händer om du stegar koden med F8. Vad är det som går fel?

Nytt inlägg
 2017-06-13 12:53
 

 hmmm.. Nu blir all text/ord i stora bokstäver i specifik cell och kolumn. Istället för specifika ord så blev alla ord stora bokstäver när jag bytte ut de du sa.

Förstår tyvärr inte vad du menar med stegar koden med f8.. Orginal koden underströk alla ord så som jag ville, men nu behövs det med stora bokstäver.

 

Tack för hjälpen ano

Nytt inlägg
 2017-06-14 10:19
 

Jag missförstod "kör stora bokstäver hela vägen i cellen" och trodde att du vill ädnra hela cellen.

Nej, det verkar ju inte fungera. Om du vill bygga vidare på din metod så får du nog plocka ut allt till en textsträng och jobba med den. 

 

Föreslår att du börjar om och håller det enkelt. utnyttja Excels "sök och ersätt" istället.

 

Sub UCKeyWords()

Dim rMålceller As Range

Dim OrdCell As Range

Dim strSökEfter As String

Dim strErsättMed As String

 

'ange var du vill söka

Set rMålceller = ActiveSheet.Range("G:I")

' Ett alternativ är att köra markerat område

' Set rMålceller = Selection

 

'Ange var dina sökord börjar (bladet Words, cell A1. ett ord/fras för varje cell, nästa ord nedanför)

Set OrdCell = Sheets("Words").Range("A1")

 

'Loppa igenom sökorden och kör Excel egna sök/ersätt till man kommer till en tom cell i a-kolumnen i WORDS-bladet

Do Until OrdCell.Value = ""

strSökEfter = OrdCell.Value

strErsättMed = UCase(strSökEfter)

    rMålceller.Replace What:=strSökEfter, Replacement:=strErsättMed, LookAt:=xlPart, _

        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _

        ReplaceFormat:=False

Set OrdCell = OrdCell.Offset(1, 0)

Loop

End Sub

 

Om du använder Excels makroinspelare så kan du se koden för att ändra format också (men det blir nog inte riktigt som du vill)

 

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerExcelExcelAutomatiskt stora bokstävera på "key words" i alla celler i en kolumn.Automatiskt stora bokstävera på "key words" i alla celler i en kolumn.

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter