Live-Forum - Die aktuellen Beiträge
Datum
Titel
18.04.2024 18:04:29
18.04.2024 16:33:24
Anzeige
Archiv - Navigation
1188to1192
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

F2 als Makro

F2 als Makro
Rolli69
Hallo Forum,
Ich möchte folgendes realisieren.
Wenn ich während der Eingabe in eine Zelle eine Tastenkombi (z.B. Strg+ t) drücke, soll das letzte Zeichen
tief gestellt werden.
Folgendes Problem tritt dabei auf:
Während der Cursor in der Zelle bzw. der Eingabeleiste ist, werden Makros nicht ausgeführt.
Als Alternative muss man nun vorher die Zelle verlassen.
Nach verlassen der Zelle wird das makro "Tiefgestellt" ausgeführt, nun hätte ich gerne, dass er
dann wenigsten wieder den Cursor in die zelle an der letzten Stelle platziert.
Mit Sendkeys funzt es nicht.
Hat jmd ne Idee (am besten zum ersten Problem)
Danke schonmal
LG rolli

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Vergiss das alles! Es gibt im Netz mehr oder...
22.11.2010 17:18:28
Luc:-?
…weniger komfortable Makros (auch hier im Archiv)*, Rolli,
die Hoch- und Tief-Stellen nach vollständiger Eingabe bewerkstelligen. Wenn du es partout anders haben willst, musst du es selbst versuchen. Hinweis: Zeichenweise Reaktion während der Eingabe ist nur bei Steuerelement-TextBoxen (auf UForms) möglich. Rückkehr zur Eingabe so wie du es versucht hast, aber wahrscheinlich sitzt der Befehl bei dir an der falschen Stelle oder irgendetwas anderes fehlt…
* von K.Rola, mir u.Anderen
Gruß Luc :-?
AW: F2 als Makro
22.11.2010 19:14:12
JogyB
Hallo Rolli,
anbei mal ein Makro, bei dem sich das Hoch/Tiefstellen mittels Steuerzeichen im Text erledigen lässt:
' Stellt Zeichen in den markierten Zellen hoch und tief
' Markierung:
' Hoch: ^
' Tief: ´
' Ende des zu formatierenden Bereich: |
' Hoch/Tief ignorieren: '
Public Sub HochTief()
' === Definieren der Markierungszeichen ===
Const hochMark = "^"
Const tiefMark = "´"
Const endMark = "|"
Const ignMark = "'"
' === Ende Definition der Markierungszeichen ===
Dim zeLLe As Range
Dim lenGTH As Long
Dim i As Long
Dim j As Long
Dim delMark() As Long
Dim isUp As Boolean
Dim isDown As Boolean
Dim zielRange As Range
Dim preserveFormat() As zellenFormate
'On Error GoTo errorhandler
Application.ScreenUpdating = False
' Speichert den Bereich zwischen
Set zielRange = Selection
' Für jede Zelle im Bereich
For Each zeLLe In zielRange
lenGTH = Len(zeLLe.Value)
isUp = False
isDown = False
j = 1
ReDim delMark(0 To j)
For i = 1 To lenGTH
' Falls ein Ignorierzeichen kommt
If zeLLe.Characters(i, 1).Caption = ignMark And i  lenGTH Then
' Überprüfen, ob das darauffolgende Zeichen überhaupt ein zu ignorierendes Zeichen  _
wäre
' a) nächstes Zeichen Hoch/Tiefmarke, Hochtiefmodus aus
' b) nächstes Zeichen Endmarke, Hochtiefmodus an
' c) nächstes Zeichen Ignoremarke
If (InStr(1, hochMark & tiefMark, zeLLe.Characters(i + 1, 1).Caption) And Not ( _
isUp Or isDown)) _
Or (zeLLe.Characters(i + 1, 1).Caption = endMark And (isUp Or isDown)) _
Or zeLLe.Characters(i + 1, 1).Caption = ignMark Then
' Falls ja
' Zur Löschung markieren
ReDim Preserve delMark(0 To j)
delMark(j) = i
j = j + 1
' Nächstes Zeichen überspringen
i = i + 1
End If
' Falls nein: Nix weiter, Ignoremarke nicht auswerten
' formatierung:
' Fall 1: Da das nächste Zeichen bei der Bearbeitung übersprungen wird, würde es
' nicht formatiert, daher hier formatieren
' Fall 2: Das Ignore-Zeichen ignoriert nichts, bleibt also so stehen, daher muss  _
das
' aktuelle Zeichen formatiert werden
' i steht in jedem Fall auf dem richtigen Zeichen, paßt also.
If isUp = True Then
' Hochstellen
zeLLe.Characters(i, 1).Font.Superscript = True
ElseIf isDown = True Then
' Tiefstellen
zeLLe.Characters(i, 1).Font.Subscript = True
End If
' Falls Endzeichen kommt
ElseIf zeLLe.Characters(i, 1).Caption = endMark Then
' Endzeichen wird ignoriert, wenn zuvor kein Startzeichen vorhanden ist
If isUp = True Or isDown = True Then
isUp = False
isDown = False
' Wenn eine Löschmarke auf einem Zeichen zuvor steht, dann steht direkt vor dem
' Endzeichen ein Hoch/Tiefstellzeichen --> sinnlos, also ignorieren
' Hinweis: Ein Ignorierzeichen kann es nicht gewesen sein, da sonst das
' aktuelle Zeichen gar nicht geprüft worden wäre
If delMark(j - 1)  i - 1 Then
ReDim Preserve delMark(0 To j)
delMark(j) = i
j = j + 1
Else
j = j - 1
ReDim Preserve delMark(0 To j)
delMark(j) = 0
End If
End If
' Wenn im Hochstellmodus, dann...
ElseIf isUp = True Then
' Hochstellen
zeLLe.Characters(i, 1).Font.Superscript = True
' Wenn im Tiefstellmodus, dann...
ElseIf isDown = True Then
' tiefstellen
zeLLe.Characters(i, 1).Font.Subscript = True
ElseIf i  lenGTH Then
' Falls weder im Hoch/Tiefstellmodus, dann nach neuem Zeichen schauen
' (Achtung: Endmarke und Ignoremarke werden oben behandelt)
' ignoriert Steuerzeichen am Ende der Zeichenfolge
Select Case zeLLe.Characters(i, 1).Caption
Case hochMark
isUp = True
ReDim Preserve delMark(0 To j)
delMark(j) = i
j = j + 1
Case tiefMark
isDown = True
ReDim Preserve delMark(0 To j)
delMark(j) = i
j = j + 1
End Select
End If
Next
If lenGTH  delMark(j) Then
zeLLe.Characters(Start:=i, lenGTH:=1).Caption = preserveFormat(i + j - 1). _
zeiCHen
With zeLLe.Characters(Start:=i, lenGTH:=1).Font
.Name = preserveFormat(i + j - 1).Name
.FontStyle = preserveFormat(i + j - 1).FontStyle
.Size = preserveFormat(i + j - 1).Size
.Strikethrough = preserveFormat(i + j - 1).Strikethrough
.Superscript = preserveFormat(i + j - 1).Superscript
.Subscript = preserveFormat(i + j - 1).Subscript
.OutlineFont = preserveFormat(i + j - 1).OutlineFont
.Shadow = preserveFormat(i + j - 1).Shadow
.Underline = preserveFormat(i + j - 1).Underline
.ColorIndex = preserveFormat(i + j - 1).ColorIndex
End With
Else
j = j + 1
i = i - 1
End If
Next
End If
' Überprüfen, ob zellinhalt numerisch ist und ob die Zelle bearbeitet wurde (j>1)
' Wenn ja, dann muss das Zellenformat auf Text gesetzt werden
If IsNumeric(zeLLe.Value) And j > 1 Then zeLLe.NumberFormat = "@"
Next
End Sub

Den Code kann man unter Umständen noch optimieren (ist schon ein paar Jährchen alt), aber er funktioniert.
Gruß, Jogy
Anzeige
AW: F2 als Makro
23.11.2010 06:45:51
Rolli69
Hallo Luc, hallo JogyB,
Danke für Eure Antworten.
Den Ansatz von JogyB finde ich super, hätte man selbst drauf kommen können.
Manchmal sieht man den Wald vor lauter Bäumen nicht.
Ich werde aber bei geraumer Zeit meinen ersten Ansatz auch nochmal aufgreifen.
Also Danke nochmals
Gruß Rolli
Noch ein Vorschlag mit Tagging...
23.11.2010 10:15:05
Renee
Hi,
Hier noch ein Vorschlag. Text gemäss Kommentar im Code für hoch- und tief-stellen taggen.
Code in DieseArbeitsmappe:
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim vTmp
If Target.Count > 1 Or IsNumeric(Target.Cells(1, 1)) Then Exit Sub
Application.EnableEvents = False
vTmp = SuperSub(Target)
Application.EnableEvents = True
End Sub
Private Function SuperSub(Bereich As Range)
' Characters ~^between~^ will be superscripted
' Characters ~vbetween~v will be subscripted
Dim rC As Range
Dim iX As Integer, iStart As Integer, iBegin As Integer, iEnd As Integer
Dim tCtrlCode As String
For Each rC In Bereich
For iX = 0 To 1
tCtrlCode = IIf(iX = 0, "~^", "~v")
iStart = 1
iBegin = InStr(iStart, rC.Text, tCtrlCode)
iEnd = InStr(iBegin + 1, rC.Text, tCtrlCode)
Do While iBegin > 0 And iEnd > 0
rC.Characters(iEnd, Len(tCtrlCode)).Delete
rC.Characters(iBegin, Len(tCtrlCode)).Delete
Select Case iX
Case 0
rC.Characters(iBegin, _
(iEnd - (iBegin + Len(tCtrlCode)))).Font.Superscript = True
Case 1
rC.Characters(iBegin, _
(iEnd - (iBegin + Len(tCtrlCode)))).Font.Subscript = True
End Select
iStart = iEnd - Len(tCtrlCode)
iBegin = InStr(iStart, rC.Text, tCtrlCode)
iEnd = InStr(iStart, rC.Text, tCtrlCode)
Loop
Next iX
Next rC
End Function

GreetZ Renée
Anzeige
Jawollja, alle Lösungen laufen im Prinzip...
23.11.2010 19:03:14
Luc:-?
…in die selbe Richtung: Taggen
Das hatte ich bei chemForm auch gemacht, nur mit anderen Zeichen. Und da das für chemische Formeln geschrieben wurde, reagiert es auch auf Klammern und vorangestellte Ziffern u.Vorzeichen ganz ohne Tags. Außerdem verwende ich [] u.{} um ganze Textteile tief bzw hoch zu setzen.
Dagegen ähnelt K.Rolas Lösung mehr einer anderen im Netz zu findenden Variante, die wahrscheinl einen zeichenpositionsorientierten Tagstring liefert. Ihre Variante kommt sogar wie ein normales xlMenü daher, kostet aber… (vor 2-3 Jahren hier von ihr gepostet)
Gruß Luc :-?
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige