Makro

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

RealmReborn
Beiträge: 8
Registriert: Mi, 25.06.2014 08:04

Makro

Beitrag von RealmReborn »

Ich brauch ma wieder Hilfe bei Makro erstellen. Es soll an das Makro anknüpfen was für Färben der Zeilen da ist.

Code: Alles auswählen

sub Markieren
raus = 10
Spalte = ThisComponent.Sheets().getByName("Test")
i = 4
Do
  tmp = Spalte.getCellByPosition(12,i).FormulaLocal
  If tmp = "x" Then
      for j = 0 to 11
       Spalte.getCellByPosition(j,i).CellBackColor = RGB(220,200,0)REM;Blau,Grün,Rot
     Next j
     raus = 10
   Else
     raus = raus - 1
  End If
  i = i + 1
Loop While raus > 0
end sub
Das Makro soll dann in der Zeile zB das Datum überprüfen ob dieses in Tabelle:Test2 vorhanden sind und falls ja diese löschen.
Ich hab da kein Plan wie ich das bewerkstelligen kann. Ich hab schon gegoogelt aber das meiste is nur Löschen von Zeilen oder suchen nach bestimmten Textabschnitten.
Aber da ja meins immer n anderen Text bzw Zahl/Datum enthält kann ich das nicht nutzen.

Zum Löschen wäre wohl:

Code: Alles auswählen

oRows.removeByIndex
nötig.

Ich hab ne Beispieldatei angehängt.
Sry für den Fall das ich zu viel um Hilfe frag -.-"
Ich bedanke mich schon im Vorraus für Hilfe.
Dateianhänge
Beispieldatei.ods
(12.19 KiB) 83-mal heruntergeladen
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Makro

Beitrag von balu »

Hallo RealmReborn,

erst mal einen Hinweis.
Du hast in der Beispieldatei die Sub

Code: Alles auswählen

Sub MarkierenUndLöschen
benannt, und das führt zu Problemem. Denn in dem Sub-Namen ist ein Sonderzeichen, nämlich der deutsche Umlaut das kleine ö. Sonderzeichen und Umlaute solltest Du vermeiden, und stattdessen lieber den Umlaut ausschreiben, also so:

Code: Alles auswählen

Sub MarkierenUndLoeschen
Das Makro soll dann in der Zeile zB das Datum überprüfen ob dieses in Tabelle:Test2 vorhanden sind und falls ja diese löschen.
Da hast Du dich etwas ungenau ausgedrückt.
Das Makro soll wo was löschen? Soll es im Blatt *Test* z.B. das Datum einlesen und im Blatt *Test2* suchen, und wenn im Blatt *Test2* gefunden auch dort löschen? Oder wie?

Und was ich auch noch nicht so recht versteh, warum die Zeilen einfärben und dann löschen? Den Sinn musst Du mal genauer erklären, bidda schön.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
RealmReborn
Beiträge: 8
Registriert: Mi, 25.06.2014 08:04

Re: Makro

Beitrag von RealmReborn »

Soll es im Blatt *Test* z.B. das Datum einlesen und im Blatt *Test2* suchen, und wenn im Blatt *Test2* gefunden auch dort löschen? Oder wie?
Sry falls ich mich ungenau ausgedrückt hab und das was du vermutet hast ist Richtig. Das Makro soll im Blatt Test das Datum auslesen und in Blatt Test2 suchen und wenns gefunden wird im Blatt Test2 dort rauslöschen.
Und was ich auch noch nicht so recht versteh, warum die Zeilen einfärben und dann löschen? Den Sinn musst Du mal genauer erklären, bidda schön.
Das erste Blatt ist ne Übersicht von allen Aufträgen und die die erledigt sind sollen gefärbt werden damit mann sieht welche noch Offen sind.
Das 2te Blatt enthält Termine und genauere Angaben zum Auftrag. Deswegen soll das Makro wenn es erledigte Aufträge färbt diese dannach aus dem Terminblatt löschen da diese abgearbeitet sind und so dann ne bessere Übersicht übrig bleibt.

Falls noch was unklar ist fragen :3

Gruß
RealmReborn
RealmReborn
Beiträge: 8
Registriert: Mi, 25.06.2014 08:04

Re: Makro

Beitrag von RealmReborn »

Da sich hier nix tut nehm ich mal an das es keine Lösung für das Problem gibt oder es Probleme dazu ergeben?
Sry falls das jetzt Doppelpost ist. Wenn ja Bitte löschen.
Benutzeravatar
lorbass
********
Beiträge: 4116
Registriert: Mo, 01.05.2006 21:29
Wohnort: Bonn

Re: Makro

Beitrag von lorbass »

RealmReborn hat geschrieben:Da sich hier nix tut nehm ich mal an das es keine Lösung für das Problem gibt oder es Probleme dazu ergeben?
Warum so pessimistisch? Ich glaube nicht, dass es keine Lösung gibt und vermute eher, dass der Thread lediglich irgendwie aus dem Blickfeld geraten ist. Es reicht in solchen Fällen, wenn du ihn mit 'ner kurzen Bemerkung in einem neuen Beitrag „aufweckst“.
RealmReborn hat geschrieben:Sry falls das jetzt Doppelpost ist.
Das „Aufwecken“ eines Threads ist kein „Doppelpost“ oder „Crosspost“.
RealmReborn hat geschrieben:Wenn ja Bitte löschen.
Sofern du an anderer Stelle dieses Forums oder in anderen AOO-/LO-Foren tatsächlich Crossposts eingestellt hast, empfiehlt es sich, diese entweder zu löschen, sofern das noch möglich ist, oder zumindest in allen Posts mit demselben Thema Links zu den jeweils anderen Duplikaten anzubringen, also auch hier! Lies dazu bitte die Allgemeinen Hinweise zur Forumsbenutzung, in jedem Bereich dieses Forums ganz oben in den permanenten Bekanntmachungen.

Gruß
lorbass


PS: In der Sache kann ich dir leider nicht weiterhelfen.
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Makro

Beitrag von clag »

Hallo RealmReborn,

habe für dich mal ein Makro erstellt

Code: Alles auswählen

Sub MarkierenUndLoeschen

myDoc = thisComponent
mySheet1 = myDoc.sheets(0)
mySheet2 = myDoc.sheets(1)

    nx = mysheet1.Columns(2).queryEmptyCells() '
    nMax = nx(nx.Count-1).RangeAddress.StartRow - 1
    dx = mysheet2.Columns(0).queryEmptyCells() '
    dMax = dx(dx.Count-1).RangeAddress.StartRow - 1

    for i=0 to nMax 
        checkcell = mysheet1.getCellByPosition(2,i)
        if checkcell.string = "x" then
        deletenumber = mysheet1.getCellByPosition(0,i).string
'        print "in Zeile " & i+1 & " steht ein X und diese Auftragsnummer" & deletenumber
        for d=0 to dMax 
            deletecell = mysheet2.getCellByPosition(0,d)
            if deletecell.string = deletenumber then
                for y=0 to 5
                    texttodelete = texttodelete & "  " & mysheet2.getCellByPosition(y,d).string 
                next
                
                if MsgBox (texttodelete & "wird gelöscht",  260, "    diesen Datensatz löschen?") = 6 then 
                    mysheet2.getrows.removebyindex(d,1)
                    checkcell.string = "Datails gelöscht ~ " & NOW()
                    mySheet1.getRows().getByIndex(i).cellbackcolor = RGB(255,127,0)
                    End IF
                texttodelete = ""
            end if
        next
        end if
    next
End Sub
guckst und probierst du hier

Datei entfernt war nicht 100% ok in der nächsten Antwort ist die korrigierte Version

und hilft das weiter? ;)

edit: code eingefügt
Zuletzt geändert von clag am Di, 15.07.2014 13:18, insgesamt 1-mal geändert.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
RealmReborn
Beiträge: 8
Registriert: Mi, 25.06.2014 08:04

Re: Makro

Beitrag von RealmReborn »

Für die Testtabelle funktioniert es genau so wie ichs wollte :D
Nun ein kleines Problem:
Ich hab es jetzt für die Zieltabelle übernommen und getestet.
Hier kommt die Fehlermeldung:

BASIC-Laufzeitfehler.
"1"
type:com.sun.star.langIndexOutOfBoundsException
Message:


für diese Codezeile

Code: Alles auswählen

dMax = dx(nx.Count-1).RangeAddress.StartRow - 1
Kann es sein das es mit der Zelladresse zusammenhängt die im Makro sind?

Ansonsten DANKE clag für das Makro ^^ (werd ma versuchen die Fehlerquelle selber zu beheben)

Mfg RealmReborn
PS: Die Zieltabelle ist ein vertrauliches Dokument deswegen kann ich diese nicht anbieten.
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Makro

Beitrag von clag »

Hallo RealmReborn,

kann eigentlich nur am Index der Tabellen Blätter liegen
oder an den Spalten in denen X und Nummer gesucht werden

Blatt Index ist 0 und 1 belegt also 1. und 2. Tabelle Name ist egal
Habe noch einen kleinen Fehler im Makro und beseitigt in der Zeile die du aufzeigt hast

versuch mal dieses hier
18_64245_Beispieldatei+Makro_1.ods
(11.57 KiB) 97-mal heruntergeladen
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Antworten