Eine Idee war das Hervorheben der gerade aktiven Zeile.
Eine Teilidee in Form eines VBA-Codes lag bereits vor, funktionierte aber noch nicht.
Ich habe dann ein VBA-Makro geschrieben.
Zuerst mit einfärben der Zeile, später mit einem Teilrahmen (nur unten), der wie eine Unterstreichung wirkt.
Beides ist mit VBA möglich und funktioniert auch sehr gut.
Mit einer sehr wichtigen Einschränkung:
Das UnDo (Rückgängigmachen) mit STRG+Z oder über das Icon funktioniert nicht.
Das soll und muss aber funktionieren.
Da ich VBA-Programmierung für mich neu ist, habe ich dann längere Zeit experimentiert und recherchiert.
Das Ergebnis: Es ist nicht möglich, über VBA Änderungen an den Tabellen vorzunehmen, ohne den UnDo-Stack zu löschen. Man kann für sein Makro eigene UnDo-Routinen schreiben. Aber der normale UnDo-Stack wird immer gelöscht.
Und das ist auch für AutoHotkey wichtig. Es betrifft auch den COM-Zugriff (Änderungen) auf Excel und wahrscheinlich alle Office-Programme. -- Nach halweg s. u. funktioniert es bei Word -- Das habe ich allerdings nicht getestet. Auch über den COM-Zugriff (auch Farben, Strichdicken u. a., es gibt kleine Ausnahmen) aus AutoHotkey wird der UnDo-Stack gelöscht. STRG-Z und der Klick auf das Rückgängigmachen-Icon funktioniert nur bis zum nächsten COM-Funktionsaufruf. Nur Auslesen von Daten löscht den Stack nicht.
=========================
Nach dieser langen Erklärung: Das folgende Skript liest die Koordinaten der aktiven Selektion in Excel und macht unter der Selektion über die ganze Zeile einen Strich. Farbe und Dicke lassen sich auswählen. Das Skript pausiert bei Doppelklick auf das Systray-Icon. UnDo bzw. Rückgängigmachen ist möglich. Bei Fensterwechsel wandert die "Unterstreichung" mit.
Einschränkung: Eine (1) "Unterstreichung" im aktiven Excelfenster.
Code: Select all
#Persistent
#SingleInstance
Tiptext =
(
Zieht eine Linie unter die Aktive Excelauswahl
im Menu kann Farbe, Liniendicke ausgewählt werden
Doppelklick = Pause
)
Hilfe =
(
Zieht eine Linie unter die Aktive Excelauswahl
im Menu kann Farbe, Liniendicke und ausgewählt werden
)
Menu, Tray, NoStandard
Menu, tray,add, ExcelHilfsLinie
Menu, tray,Disable,ExcelHilfsLinie
Menu, tray, add
Menu, tray,add, Rot
Menu, tray,add, Gruen
Menu, tray,add, Gelb
Menu, tray,add, Blau
Menu, tray,add, Schwarz
Menu, tray, add
Menu, tray,add, H1
Menu, tray,add, H2
Menu, tray,add, H3
Menu, tray,add, H5
Menu, tray, add
Menu, Tray, Tip, %Tiptext%
Menu, tray, add, Hilfe
Menu, tray, add
Menu, tray,add, Pause
Menu, Tray, Default, Pause
Menu, tray, add, Beenden
Menu, tray, NoStandard
;=================
; Voreinstellung
color:="cc0000"
Menu, Tray, Disable, rot
line:=2
Menu, Tray, Disable, H2
;=================
SetTimer, rule ,100
return
rule:
ruler(color,line)
return
ruler(color,line){
static yold:=0, wold:=0, hold:=0, xold:=0, run:=0
if (r and !WinActive("ahk_class XLMAIN"))
{
SplashImage, off
run:=0
}
If !IsObject(xl)
{
try
xl := ComObjActive("Excel.Application")
catch
{
SplashImage, off
wold:=-1
return
}
}
if hwnd:=WinActive("ahk_class XLMAIN")
{
run:=1
try
{
c:=xl.selection.rows.count ; counts the lines of the selection
y1:=xl.ActiveWindow.ActivePane.PointsToScreenPixelsY(xl.selection.offset(c,0).top) ; Screenposition der Selection um deren Zeilen verschoben
WinGetPos, x, Cy, Width, Height, ahk_id %hwnd%
ControlGetFocus, WhichControl, ahk_id %hwnd%
;MouseGetPos, , , WhichWindow, WhichControl ; Alternativly
if (WhichControl="NetUIHWND1")
{
SplashImage, off
wold:=-1
return
}
if (yold <> y1) or (xold <> x) or (hold <> height) or (wold <> width)
{
r:="a" round(xl.ActiveWindow.ActivePane.ScrollRow //1,0)
yr:=xl.ActiveWindow.ActivePane.PointsToScreenPixelsY(xl.range(r).top)-10
if (y1<yr) or (y1>(cy+height-20))
{
SplashImage, off
return
}
Splashimage,, B W%Width% H%line% Y%y1% X%x% CW%color% ; Linie nur bei Änderung erzeugen
yold:=y1
wold:=width
hold:=height
xold:= x
}
}
}
else
{
SplashImage, off
yold:=0, wold:=0, hold:=0, xold:=0, run:=0
}
return
}
ExitApp
return
rot:
color:="cc0000"
gosub Menuchange1
Menu, Tray, Disable, rot
WinActivate, ahk_class XLMAIN
return
gruen:
color:="00cc00"
gosub Menuchange1
Menu, Tray, Disable, gruen
WinActivate, ahk_class XLMAIN
return
gelb:
color:="efef00"
gosub Menuchange1
Menu, Tray, Disable, gelb
WinActivate, ahk_class XLMAIN
return
blau:
color:="00cccc"
gosub Menuchange1
Menu, Tray, Disable, blau
WinActivate, ahk_class XLMAIN
return
schwarz:
color:="000000"
gosub Menuchange1
Menu, Tray, Disable, schwarz
WinActivate, ahk_class XLMAIN
return
h1:
line:=1
gosub Menuchange2
Menu, Tray, Disable, H1
WinActivate, ahk_class XLMAIN
return
h2:
line:=2
gosub Menuchange2
Menu, Tray, Disable, H2
WinActivate, ahk_class XLMAIN
return
h3:
line:=3
gosub Menuchange2
Menu, Tray, Disable, H3
WinActivate, ahk_class XLMAIN
return
h5:
line:=5
gosub Menuchange2
Menu, Tray, Disable, H5
WinActivate, ahk_class XLMAIN
return
Menuchange1:
Gui, Submit , NoHide
Menu, Tray, Enable, rot
Menu, Tray, Enable, gruen
Menu, Tray, Enable, gelb
Menu, Tray, Enable, blau
Menu, Tray, Enable, schwarz
return
Menuchange2:
Gui, Submit , NoHide
Menu, Tray, Enable, H1
Menu, Tray, Enable, H2
Menu, Tray, Enable, H3
Menu, Tray, Enable, H5
return
hilfe:
Msgbox, %Hilfe%
return
Beenden:
exitapp
ExcelHilfsLinie:
return
Farbe:
return
Liniendicke:
return
Pause:
Pause
WinActivate, ahk_class XLMAIN
return
Der Balken wurde vorher auch im Excelmenu Datei gezeigt.
Manchmal wurde die Hervorherbung nicht beendet.