[calc] Befehl zum überspringen eines aufrufs?[nich erledigt]

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [calc] Befehl zum überspringen eines aufrufs?[nich erledigt]

Re: [basic calc] Befehl zum überspringen eines aufrufs?

von schnubber » Mi, 06.04.2011 14:31

Danke schööön, hätt mich schon fast totgegooglet xD mit diesem exit sub...überspringt er es einfach oder beendet er komplett alles? denn beenden soll er nix richtig, er soll was auslassen, weil wenn er den sub beendet, werden alle columns die nach country_column aufgelistet sind (im script ) einfach stehen gelassen und nicht bearbeitet =( (würde nur klappen wenn das country_column als letztes im script stehen würde).das ist dann so als würde man auf dem weg nach hause auf einmal ein riesen berg sehen und dann sich umdrehen und wieder zur arbeit gehen anstatt ihn zu umzulaufen und dem weiteren weg nach hause folgen xD(es sei denn der berg ist am ende des weges , hinter dem zuhause)

Re: [basic calc] Befehl zum überspringen eines aufrufs?

von DPunch » Mi, 06.04.2011 14:21

Aloha
schnubber hat geschrieben:meine idee ist die if schleife zu bearbeiten und da ein befehl rein zubauen der sagt: wenn du den gewünschten begriff country nicht findest dann überspringe den aufruf, wenn du ihn findest dann mach den aufruf.
In aller Regel macht man das über den Rückgabewert der entsprechenden Funktion.
Wenn Du also Deine Funktion "findeSpalte" folgendermassen abänderst

Code: Alles auswählen

Function findeSpalte(suchbegriff As String, oZeile As Object)
    findeSpalte = -1 '<----------
    oSearch = oZeile.createSearchDescriptor
    oSearch.SearchString = suchbegriff
    oSearch.SearchRegularExpression = true
    oResult = oZeile.findAll(oSearch)
    If isNull(oResult) Then Exit Function '<-------
    For n = 0 To oResult.count - 1
        oFound = oResult(n)
        if oFound.supportsservice("com.sun.star.table.Cell") then    'einzelne Fundzelle
            findeSpalte = ofound.celladdress.column
        end if
    next
End Function
kannst Du eine entsprechende Sicherheitsabfrage einbauen

Code: Alles auswählen

(...) 
   'country spalte finden
    country_column = findeSpalte("country",oZeile)
    If country_column = -1 Then '<-------
        MsgBox "Spalte ""country"" nicht gefunden",16,"Fehler"
        Exit Sub '<-------
    End If
    'country färben

[calc] Befehl zum überspringen eines aufrufs?[nich erledigt]

von schnubber » Mi, 06.04.2011 14:12

hey ho forum habn folgendes problem:

mein makro script sucht eine zeile nach bestimmten begriffen(spaltenname) wenn er die gefunden hat , macht das makro jeweils verschiedene prozeduren un der spalte wo der der begriff gefunden wurde
das problem ist, wenn in der zeile der gewünschte begriff(spaltenname) nicht gefunden wird (zb weil die spalte mit diesem namen nicht mehr existiert), bricht mein makro zusammen und kann nicht weiter arbeiten (fehlermeldung)
in diesem fall ist der spaltenname "country" nicht vorhanden
meine idee ist die if schleife zu bearbeiten und da ein befehl rein zubauen der sagt: wenn du den gewünschten begriff country nicht findest dann überspringe den aufruf und mach mit dem nächsten aufruf weiter, wenn du ihn findest dann mach den aufruf.
hier der code (hab ihn so gebaut dass es nur für eine spalte gilt, weil sonst wäre er zu lang weil ich 14 spalten habe xD):

Code: Alles auswählen

sub spaltenDurchsuchen

   'variablen Festlegen
    Dim oDoc as Object
    Dim oSheet as Object
    Dim oSearch as Object, oResult as Object
    Dim oFound as Object
    Dim n as Long
    Dim oSpalte as Object
    Dim oZeile as Object
    Dim column_index as Object
    Dim country_title as String
    Dim country_regex as String
    Dim country_column as Integer 
    Dim mycolor as Long
    
    
    
    
    'Dokument ansprechen
    oDoc = ThisComponent
    oSheet = oDoc.Sheets.getByIndex(0)
    oSpalte = ThisComponent.Sheets(0).Columns
    oZeile = ThisComponent.Sheets(0).Rows(0)
    
    mycolor = RGB(255,0,0)
    country_title = "country"
    country_regex = "[a-zA-ZÄÜÖäüöß \-\\/]{1,}"
    leer_regex = "."
    
    'country spalte finden
    country_column = findeSpalte("country",oZeile)
    'country spalte färben
    faerbeSpalte(mycolor,leer_regex,country_column,country_regex)
    
    oZeile.CellBackColor = RGB(255,255,255)
End Sub

Function findeSpalte(suchbegriff As String, oZeile As Object)

    oSearch = oZeile.createSearchDescriptor
    oSearch.SearchString = suchbegriff
    oSearch.SearchRegularExpression = true
    oResult = oZeile.findAll(oSearch)
    For n = 0 To oResult.count - 1
        oFound = oResult(n)
        if oFound.supportsservice("com.sun.star.table.Cell") then    
            findeSpalte = ofound.celladdress.column
        end if
    next 

End Function


Sub faerbeSpalte(mycolor as Long,leer_regex as String,column as Integer,regex as String)
   
    oSpalte = ThisComponent.Sheets(0).Columns(column)
    oSearch = oSpalte.createSearchDescriptor
    oSearch.SearchString = leer_regex
    oSearch.SearchRegularExpression = true 
    oResult = oSpalte.findAll(oSearch)
    For n = 0 To oResult.count - 1
        oFound = oResult(n)
        oFound.CellBackColor = mycolor
    Next n
    oSearch = oSpalte.createSearchDescriptor
    oSearch.SearchString = regex
    oSearch.SearchRegularExpression = TRUE
    oResult = oSpalte.findAll(oSearch)
    For n = 0 To oResult.count - 1
        oFound = oResult(n)
        oFound.CellBackColor = RGB(255,255,255) 
    Next n
     
   
End Sub
als beispiel mals so erklärt:

1. tabelle die spalte namens "country" gibts
2. tabelle die spalte namens "country" gibts nicht
script arbeitet in beiden tabellen
ich weis net wie ich den befehl zum überspringen 7auslassen des aufrufs schreiben soll
danke voraus
gruß schnubber

Nach oben