Hallo Dave,
Es sollte so sein als ob er auf die frisch beschriebene Zeile 2 klickt und sagt Zeile oberhalb einfügen.
Und die Fertigmeldung am Ende bräuchte ich auch nicht, die ist im Ablauf eher störend.
Ich habe diese Code-Anweisung falsch interpretiert:
Die Syntax lautet nicht (Zeile, Spalte), sondern:
( [in] long nIndex, [in] long nCount )
Daraus folgt:
Index = Zeile
Count = Anzahl der einzufügenden Zeilen.
Demnach funktioniert diese Änderung:
Hier nochmal der gesamte Code inkl. Änderung:
Code: Alles auswählen
REM ***** BASIC *****
Sub Datenliste2
oDoc = ThisComponent
oCC = oDoc.CurrentController
' Hier ggf. die Tabellenblattnamen anpassen
oSheet1 = oDoc.Sheets.getByName("Tabelle1")
oSheet2 = oDoc.Sheets.getByName("Tabelle2")
REM ------------------------------------------------------------------
REM C4; normales Eingabefeld Inhalt ist eine Zahl (Ziel Tabelle2 A2)
REM C4 --> A2
REM Zahl kopieren
oSheet2.getCellRangeByName("A2").Value=oSheet1.getCellRangeByName("C4").Value
REM ------------------------------------------------------------------
REM E4; Wenn/Zeit Feld Inhalt zum Übertragen Datum und Zeit (Ziel Tabelle2 C2)
REM E4 --> C2
REM Nur Werte (Datum und Uhrzeit) kopieren
With oSheet2
.getCellRangeByName("C2").Value = oSheet1.getCellRangeByName("E4").Value
REM Zelle formatieren (Datum und Uhrzeit)
' 50 = TT.MM.JJ HH:MM
' 107 = TT.MM.JJJJ HH:MM
.getCellRangeByName("C2").NumberFormat=50
REM Zell-Hintergrundfarbe
' .getCellRangeByName("C2").CellBackColor=16777126 ' Farbangabe per long
' .getCellRangeByName("C2").CellBackColor=RGB(255,255,166) ' Farbangabe per RGB(n,n,n)
End With
REM ------------------------------------------------------------------
REM F4; Sverweisfeld, Inhalt den ich brauche ist der Text (Ziel Tabelle2 B2)
REM F4 --> B2
REM Text kopieren
oSheet2.getCellRangeByName("B2").String=oSheet1.getCellRangeByName("F4").String
REM ------------------------------------------------------------------
REM C7; Sverweisfeld, Inhalt den ich brauche ist der Text (Ziel Tabelle2 D2)
REM Text --> C7 --> D2
REM Text kopieren
oSheet2.getCellRangeByName("D2").String=oSheet1.getCellRangeByName("C7").String
REM ------------------------------------------------------------------
REM I4; Wenn/Zeit Feld Inhalt zum Übertragen Datum und Zeit (Ziel Tabelle2 E2)
REM I4 --> E2
REM Nur Werte (Datum und Uhrzeit) kopieren
With oSheet2
.getCellRangeByName("E2").Value = oSheet1.getCellRangeByName("I4").Value
REM Zelle formatieren (Datum und Uhrzeit)
' 50 = TT.MM.JJ HH:MM
' 107 = TT.MM.JJJJ HH:MM
.getCellRangeByName("E2").NumberFormat=50
REM Zell-Hintergrundfarbe
' .getCellRangeByName("E2").CellBackColor=16777126 ' Farbangabe per long
' .getCellRangeByName("E2").CellBackColor=RGB(255,255,166) ' Farbangabe per RGB(n,n,n)
End With
REM ------------------------------------------------------------------
REM Eine Zeile innerhalb Tabelle2 oberhalb Zeile 2 einfügen
oRows=oSheet2.getRows
' Zeile einfügen
' Syntax: ' ( [in] long nIndex, [in] long nCount )
' daraus folgt:
' (1 --> oberhalb welcher Zeile soll eingefügt werden
' ,1) --> Anzahl der einzufügenden Zeilen
oRows.insertbyindex(1,1)
REM ------------------------------------------------------------------
REM Zellinhalte leeren.
REM Betrifft Formeln, Zahlen und Strings, keine Formate.
' Tabelle1 Zellen C4;H5;H8 und A10 leeren
oZiel = oSheet1.getCellRangeByName("A10")
oZiel.String=""
oZiel = oSheet1.getCellRangeByName("C4")
oZiel.String=""
oZiel = oSheet1.getCellRangeByName("H5")
oZiel.String=""
oZiel = oSheet1.getCellRangeByName("H8")
oZiel.String=""
REM ------------------------------------------------------------------
REM Cursor positionieren
REM Position (2,3) =
REM 2 = Spalte C
REM 3 = Zeile 4
oCell = oSheet1.getCellByPosition(2,3)
oCC.Select(oCell)
REM ------------------------------------------------------------------
REM Programmende
Msgbox "Aktion abgeschlossen!" & CHR(10) & _
"Das Programm wird beendet", 64, "Programmende"
End Sub
Zu Deiner neuen Anfrage:
Leider bringt mir das nicht viel wenn das Dokument minimiert ist.
Deshalb suche ich noch eine Möglichkeit das Libre bei Ablauf des Countdowns auf sich aufmerksam macht, PopUp oder Blinken in der Taskleiste z.B.
Gibt es da vielleicht eine Möglichkeit?
Die oberste Instanz der Starbasic-Programmierung ist der StarDesktop.
Diese Instanz spiegelt im Grunde alle geöffneten Office-Applikationen, bzw. Dokumente
wieder, welche gerade geöffnet sind. Dazu gehört auch ein geöffnetes BASIC-IDE-Fenster.
Die Dokumente werden hier mit Frames bezeichnet.
Jedes Frame besitzt einen Index, welcher variabel ist.
Variabel in der Hinsicht, als dass es von der Reihenfolge abhängig ist, wie die
einzelnen Dokumente geöffnet wurden.
Zugriff auf ein Frame:
Code: Alles auswählen
Dim oSD as Object
oSD =Stardesktop
oFrm2=oSD.getFrames.getByIndex(2)
Damit ist aber noch nicht klar was oFrm2 für eine Fenster/ Dokument ist!
Dieses muss im Anschluss geprüft werden oder man nutzt eine Schleife über alle Frames
und filtert so das gesuchte Frame heraus.
Ein Beispiel:
Code: Alles auswählen
Sub FrameTest
Dim oSD as Object
Dim nCnt as Integer
Dim i as Integer
oSD =Stardesktop
' Die Count-Eigenschaft nutzen, um die Anzahl aller geöffneten Frames zu ermitteln
nCnt=oSD.getFrames.count
msgbox "Anzahl Frames = " & nCnt ,64, "Zählen aller geöffneten Frames"
For i = 0 to nCnt-1
oSD.getFrames.getByIndex(i)
msgbox oSD.getFrames.getByIndex(i).Title, 64, "Auslesen der Titel-Eigenschaft der einzelnen Frames"
Next i
End Sub
So kann die Titel-Eigenschaft dazu genutzt werden, dass gewünschte Dokument zu erfassen und den Fokus darauf zu setzen.
Jetzt kann man über den Stardesktop die Window-Eigenschaften beeinflussen.
z.B.
oSD.getFrames.getByIndex(2).windowNormalized
oSD.getFrames.getByIndex(2).Hidden
usw.
Jetzt benötigt man einen Listener. Dieser Zuhörer/ Überwacher läuft nach Makrostart permanent im Hintergrund und wartet auf das ihm zugewiesene Event (Ereignis). Sobald das Event eintritt, wird der Listener aktiv und führt eine Aktion aus.
Das könnte z.B. dieses Ereignis sein:
oSD.getFrames.getByIndex(2).windowNormalized
Soviel zur Theorie.
Ich persönlich stehe etwas auf dem Kriegsfuss mit diesen Listenern.
Im Prinzip einfach, ABER...
Auch bin ich mir nicht sicher, ob der Listener korrekt funktioniert, wenn das Fenster minimiert ist,
da der Fokus auf dem Betreibssystem oder einem anderen Programm liegt.
Deshalb stelle die Frage nochmals in einem eigenen Thread.