Übersetzung von VBA nach OOo

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Karolus
********
Beiträge: 7531
Registriert: Mo, 02.01.2006 19:48

Re: Übersetzung von VBA nach OOo

Beitrag von Karolus »

Hallo

Wir sind hier kein Übersetzungbüro für lau!
Für was brauchst du das - bzw. was ist die eigentliche Aufgabe

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Karolus
********
Beiträge: 7531
Registriert: Mo, 02.01.2006 19:48

Re: Übersetzung von VBA nach OOo

Beitrag von Karolus »

Hallo

Ich erkenne durchaus daß das Ding vmtl. die erste freie Zelle in Spalte A findet und selektiert - nur dafür brauchts kein Makro - das geht auch direkt mit einer Calcfunktion namens =HYPERLINK("#A" &ANZAHL2(A1:A100000))

Ich fragte nach der eigentlichen Aufgabe nicht nach dem offensichtlichem.

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
lorbass
********
Beiträge: 4116
Registriert: Mo, 01.05.2006 21:29
Wohnort: Bonn

Re: Übersetzung von VBA nach OOo

Beitrag von lorbass »

Gammaray hat geschrieben:nur der Schritt, in welchem das Makro die nächste freie Zelle in Spalte "A" findet und dort hinein springt. […] Mir wäre auch schon geholfen, wenn man mir einfach sagt: Calc, bzw. StarBasic kann das nicht
Das kann du mit StarBasic realisieren, oder auch mit Python, wenn dir das lieber ist, und vermutlich auch mit Java

Tipp am Rande: http://www.dannenhoefer.de/faqstarbasic ... -Calc.html

Gruß
lorbass
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Übersetzung von VBA nach OOo

Beitrag von Stephan »

Geht eben doch nicht.
Dir ist schon klar das lorbass Dir das exakte Gegenteil gesagt hat? StarBasic ist in OO exakt das was in MS Office VBA ist.

Ebenso enthält der Link von Lorbass die Routine nach der Du fragtest, nämlich die nächste freie Zelle ermitteln:
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig214

Gruß
Stephan
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Übersetzung von VBA nach OOo

Beitrag von balu »

Hallo Gammaray,
Geht eben doch nicht.
Was geht nicht?

Lorbass hatte dir schon zu recht einen sehr nützlichen Link gepostet, damit Du dich schon mal mit StarBasic beschäftigen kannst. Denn wenn Du von VBA nach StarBasic umsteigen willst(musst), ist es für dich sehr wichtig gewisse Grundkenntnisse von der für dich neuen Programmiersprache anzueignen. Auch wenn beide Sprachen bis zu einem gewissen Punkt gleich klingen, so sind es doch sprachlich zwei verschiedene Dialekte.

Mir geht es hauptsächlich darum, ob mir jemand sagen kann, ob mein Problem überhaupt gelöst werden kann. Funktioniert das in Calc?
Kann bestimmt gelöst werden. Und Calc wird das wohl schon schaffen, wenn Du es richtig programmiert hast (also nicht mit Makrorecorder aufzeichnest).

Wichtig ist mir eigentlich nur der Schritt, in welchem das Makro die nächste freie Zelle in Spalte "A" findet und dort hinein springt.
Mit ein bisschen logischem überlegen, und dann die passenden Suchbegriffe hättest Du schon eine Lösung dafür hier im Forum finden können. Logische Suchbegriffe wären gewesen: Letzte benutzte Zelle in Spalte.
Hier mal ein einfaches Beispiel

Code: Alles auswählen

Sub Main
	oDok = thisComponent
	oTestSheet = oDok.sheets.getByName("Test")
	
	With oTestSheet 
		x = .Columns(0).queryEmptyCells()
		iLetzteZeile = x(x.Count-1).RangeAddress.StartRow + 1
	End With
	print iLetzteZeile
	oTestSheet.getCellRangeByName("A" & iLetzteZeile).value = iLetzteZeile
End Sub
Mir wäre auch schon geholfen, wenn man mir einfach sagt: Calc, bzw. StarBasic kann das nicht, dann brächte ich mich auch nicht weiter um eine Lösung bemühen.
Ich wüsste nicht warum StarBasic das nicht kann.
Spalten-Verweise
Häh, wie bitte!?
Sache mal, sieh ich das richtig das Du trotz Makro noch zusätzlich mit der Calc-Funktion SVERWEIS() arbeitest? Wenn ich deine Schilderung vom Fr, 16.05.2014 18:19 so lese, muss ich zu dieser Vermutung kommen. Und sollte ich recht haben, dann frag ich mich nur: Warum nicht gleich alles per Makro erledigen?
Oder seh ich da was falsch?

Noch einen tipp wegen dem kopieren von einer Tabelle zur anderen; schau mal bei Dannenhöfer rein.



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
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Übersetzung von VBA nach OOo

Beitrag von Stephan »

ich habe vom Programmieren keine Ahnung


aber lesen kannst Du und mehr wäre hier nicht nötig gewesen
und habe die Makroschnipsel von Excel auch nur zusammengetragen und mit Hilfe des Herbers-Excel Forums erstellt
komisch das Du hier bezüglich OO das gleiche Vorgehen verweigerst und gegebene Hinweise auf eben solche Codeschnipsel ignorierst und stattdessen falsche Behauptungen (="Geht eben doch nicht") aufstellst
aber wer hat mir nun wirklich geholfen?
das kommt wohl darauf an ob Du selbstständig sein willst oder abhängig. das ist bei Programmieren nicht anders als wie im realen Leben und es ist immer diegleiche Frage ob man die Bequemlichkeit, aber eben Abhängigkeit, bevorzugt sich Fische schenken zu lassen oder ob man sich ein Netz schenken lässt um abschliessend selbst fischen zu lernen


Gruß
Stephan
Karolus
********
Beiträge: 7531
Registriert: Mo, 02.01.2006 19:48

Re: Übersetzung von VBA nach OOo

Beitrag von Karolus »

Hallo
Vielen Dank für die Hilfe, habs hingebracht.
Schön, das du dich selbst auch noch ein wenig angestrengt hast - als Belohnung gibts einen Ansatz wie man das vernünftig lösen könnte

Code: Alles auswählen

def iterate(iterable):
    iterable = iterable.createEnumeration()
    while iterable.hasMoreElements():
        yield iterable.nextElement()
        
def nextEmptyRow(cellrange):
    emptys = cellrange.queryEmptyCells()
    last = emptys.getByIndex( emptys.Count -1 )
    return last.RangeAddress.StartRow



def getSelection(  something_selected ):

    sel = something_selected    
    try:  # einzelne Zelle oder Zellbereich
        data = tuple(entry
                     for entry in sel.DataArray
                     if entry[0] )
    except AttributeError:  # mehrere Zellen oder Bereiche
        data = tuple(cell.DataArray[0]
                     for cell in iterate( sel.Cells )
                     if cell.DataArray[0])
    return data

def main():
    doc = XSCRIPTCONTEXT.getDocument()
    sel = doc.CurrentSelection
    data = getSelection(sel)-
    sheetnames = [ 'Materialbestellung', 'Alle_Bestellungen' ]
    for sname in sheetnames:
        sheet = doc.Sheets.getByName( sname )
        aCol = sheet.Columns.A
        fRow = nextEmptyRow( aCol )
        lRow = fRow + len( data ) -1
        target = sheet.getCellRangeByPosition(0, fRow, 0, lRow)
        target.setDataArray( data )
 
@Balu: Du hast natürlich Recht - die Verweis-daten sollte man bei der Gelegenheit auch gleich abholen und eintragen.

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Antworten