Gdy edytujesz komórkę w Excelu masz dostęp tylko do zdefiniowanych wewnętrznie i prezentowanych na paskach narzędzi przycisków. Np możesz użyć pogrubienia, pochylenia, itp. I tu chciałbyś też posiadać przyciski do innych (niż wymyślił Microsoft) opcji formatowania np indeksu górnego czy dolnego. Jednakże Excel, gdy edytujesz tekst nie pozwala skorzystać z Twoich narzędzi edytowania! Dzieje się tak dlatego, że podczas edycji komórki zostają zdeaktywowane wszystkie zdefiniowane przez użytkownika makra. Pozostaje Ci zmienić format poprzez uroczą kombinację FORMAT|Komórka - okno dialogowe, lub dojść tam, gdy jesteś oblatany, poprzez kombinację CTRL+"1"
Istniej jednak sposób na obejście problemu! Można stworzyć swoje własne narzędzie do formatowania. Podstawą pomysłu jest stworzenie własnego okna dialogowego formatowania (nie prawdziwego tylko oczywiście udającej je formy). Nie jest to wbrew pozorom strasznie trudny problem. Aby tego dokonać musisz wykonać następujące kroki:
1.WÅ‚Ä…cz edytor VBA (np: ALT+"F11")
2.W edytorze z menu INSERT wybierz UserForm (wyświetli Ci się nowa"czysta" forma).
3. Używając Paska narzędziowego Toolbox dodaj trzy przyciski typu CommandButton najlepiej u samej góry formy.
4.Zmień własności lewego przycisku nadając mu nazwę
btnSuper a własności Caption nadaj wartość Index górny
5.Zmień własności środkowego przycisku nadając mu nazwę
btnSub a własności Caption nadaj wartość Index dolny
6.Zmień własności lewego przycisku nadając mu nazwę
btnNormal a własności Caption nadaj wartość Normalny.
7. Tuż pod przyciskami dodaj TextBox. I tu nic nie trzeba zmieniać.
8. Pod okienkiem tekstowym dodaj czwarty przycisk typu CommandButton. Zmień mu nazwę na btnExit a własność Caption na Exit.
Utworzyłeś wiec swoją własną formę. Teraz należy przypisać do niego obsługujące makro. Z wybraną formą kliknij F7 a zobaczysz okno kodowe. Będzie ono zawierać jedną dwie linijki kodu. Zamień je na poniższy 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
Zamknij okienko kodowe i okienko Twojej formy. Teraz trzeba napisać naprawdę krótkie makro wyświetljące tę formę. Tworzysz je jak każde inne makro, a powinno wyglądać tak:
Sub DoForm()
UserForm1.Show
End Sub
Możesz teraz zamknąć okno edytora VBA. Jeżeli teraz wskażesz jakąś komórkę i wywołasz to ostatnie makro (możesz go podpiąć pod jakąś ikonkę!) będziesz mógł poprawiać zawartość komórki lub pisać nową używając ikonek indeksu górnego i dolnego tak jak chcesz! Pamiętaj makro daje efekt w komórce nie w formie użytkownika.