Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 64708 Skopiuj do schowka Zmiana dowolnego znaku w komórce na wielką/małą literę
Autor Wiadomość
Speedy
Starszy Forumowicz


Posty: 29
Wysłany: 10-04-2019, 11:22   Zmiana dowolnego znaku w komórce na wielką/małą literę

Cześć

Zastanawiam się nad makrem, które pozwoliłoby na zmianę jak w temacie: zaznaczenie w komórce jednego znaku lub fragmentu tekstu i zamienienie go na duże lub małe litery.

Problem polega na tym, że przerobienie znacznej partii tekstu w całości z dużych liter na małe jest stosunkowo proste, czy to makrem czy to funkcjami arkusza. Ale w tekście zdarzają się takie sytuacje jak "odczynnik Grignarda" albo "kabel HDMI" albo "dekoder DVB-C/DVB-T" albo "inwerter o mocy 7,5 kVA". I w tym momencie trzeba już je poprawiać w troszkę żmudny sposób.

Znalazłem sobie kiedyś takie makro do poprawiania dowolnego znaku/fragmentu tekstu na format w indeksie górnym lub dolnym. Opiera się ono na zrobieniu formularza UserForm1 z czterema przyciskami CommandButton: btnSuper, btnSub, btnNormal i btnExit oraz oknem tekstowym TextBox. A następnie przypisania do nich następującego kodu:

Kod:

Private Sub UserForm_Activate()
    TextBox1.Text = ActiveCell.Formula
End Sub
Private Sub btnSuper_Click()
Dim intStart As Integer
    Dim intLength As Integer
    intLength = TextBox1.SelLength
    If intLength > 0 Then
        intStart = TextBox1.SelStart + 1
        ActiveCell.Characters(intStart, intLength).Font.Superscript = True
    End If
End Sub
Private Sub btnSub_Click()
    Dim intStart As Integer
    Dim intLength As Integer
    intLength = TextBox1.SelLength
    If intLength > 0 Then
        intStart = TextBox1.SelStart + 1
        ActiveCell.Characters(intStart, intLength).Font.Subscript = True
    End If
End Sub
Private Sub btnExit_Click()
    Unload UserForm1
End Sub
Private Sub btnNormal_Click()
    Dim intStart As Integer
    Dim intLength As Integer
    intLength = TextBox1.SelLength
    If intLength > 0 Then
        intStart = TextBox1.SelStart + 1
        ActiveCell.Characters(intStart, intLength).Font.Superscript = False
        ActiveCell.Characters(intStart, intLength).Font.Subscript = False
    End If
End Sub


No i kodu uruchamiającego cały kram.
Kod:
Sub DoForm()
    UserForm1.Show
End Sub


Formularz działa w ten sposób, że po kliknięciu na komórkę i uruchomieniu go, w jego oknie tekstowym pojawia się tekst z komórki; można zaznaczyć tam jakiś znak, nacisnąć przycisk np. indeksu górnego, zamknąć i już. Znak w komórce będzie w indeksie górnym.

No i chciałem sobie zrobić analogiczny (albo przerobić ten) aby w ten sam sposób było można zaznaczyć znak i zamienić go w wielką lub małą literę. Ale nie bardzo wiem jak to zrobić. Myślałem że jest jakaś właściwość (property) fontu, podobna do tego Superscript czy Subscript, mówiąca o tym że jest wielką lub małą literą. Wiem że jest np. Bold (pogrubienie tekstu) czy Color (kolor tekstu). Wtedy to by było bardzo łatwe, przerobiłbym sobie takiego Private Sub jak wyżej, zamieniając np. Subscript na tę właśnie właściwość. Ale niestety wygląda że takiej "property" nie ma. Jest tylko funkcja LCase i UCase, ale nią potrafię zamienić tylko cały tekst w komórce.

Czy mógłby ktoś mi podpowiedzieć jak to zrobić? Czy w ogóle się da w ten sposób?
_________________
Pozdrawiam
Speedy
ID posta: 365780 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2647 razy
Posty: 8778
Wysłany: 10-04-2019, 11:57   

Speedy napisał/a:
Myślałem że jest jakaś właściwość (property) fontu
Blisko, blisko tyle że nie właściwość fontu, a obiektu Characters. I nie Font a Text. :-)

Makro symulujące naciśnięcie odpowiedniego przycisku, po zaznaczeniu fragmentu tekstu:
Kod:
Sub AAA()
  Dim intStart As Long
  Dim intLength As Long
  Dim strSelect As String
 
  intStart = 2
  intLength = 5
 
  strSelect = Mid(ActiveCell.Value, intStart, intLength)
 
  'Z Wielkiej Litery
  strSelect = StrConv(strSelect, vbProperCase)
  'lub
  'małe litery
  'strSelect = StrConv(strSelect, vbLowerCase)
  'lub
  'WIELKIE LITERY
  'strSelect = StrConv(strSelect, vbUpperCase)
 
  ActiveCell.Characters(intStart, intLength).Text = strSelect
End Sub

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 365784 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe