Anzeige
Archiv - Navigation
1844to1848
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Libre Basic in VBA wandeln

Libre Basic in VBA wandeln
20.08.2021 13:58:33
Marcus
Hallo an alle,
ich benutze in der Firma Libre Office und verwende dort ein Star Basic Macro welches mir viel Klickerei erspart. Jetzt wechseln wir zu Excel und es geht mir darum die Routine in VBA auszuführen. Folgendes passiert:
Eine offene Datenauskopplung wird geprüft wo die letzte gefüllte Zelle bis Spalte J ist. Dieser Bereich wird kopiert und danach wird die Datei geschlossen. In der parallel geöffneten Zieldatei wird der Zielbereich gelöscht und die Daten werden eingesetzt. Das Starbasic Macro sieht folgendermaßen aus.
  • 
    Sub Vorlage_Baugruppen
    Dim osheet as Object,  oZelle as Object, sheets as Object
    Dim oInhalt As string
    'Anwenden auf aktuelles Dokument
    odoc=thiscomponent
    'Nimm aktuellen Tabellennamen
    Tabellenname=odoc.currentcontroller.activesheet.name
    oSheet = oDoc.Sheets.GetByName(Tabellenname)
    'Zähle Zeilen und kopiere in Zwischenablage
    x = oSheet.Columns(1).queryEmptyCells()
    z = x(x.Count-1).RangeAddress.StartRow
    'Nimm ermittelte Zeilen und markiere die Inhalte
    oRange = oSheet.getCellRangeByName("A1:J"+Z)
    oDoc.CurrentController.Select(oRange)
    oRangeAddress =  oDoc.CurrentController.getTransferable
    'Zieldatei siehe Angabe im Target
    odoc.close(true)
    TargetFrame  = "TMM_Vorlage.ods - LibreOffice Calc"
    Frames = StarDesktop.GetFrames()
    fTally = Frames.Count
    For j = 0 To fTally - 1
    Frame = Frames(j)
    'Fensterwahl
    If Frame.Title  = TargetFrame Then
    If Frame.Controller.Model.SupportsService("com.sun.star.sheet.SpreadsheetDocument") Then
    Frame.Activate
    Frame.ContainerWindow.Visible = True
    Frame.ContainerWindow.ToFront()
    Exit For
    Else
    End If
    End IF
    fTally=fTally-1
    Next j
    ' wenn Datei nicht offen ist, soll jetzt geöffnet werden. Inhalte werden eingetragen.
    if fTally = 0 then
    oDesktop = createUnoService("com.sun.star.frame.Desktop")
    URL = ConvertToURL ("Z:\TMM_Vorlage.ods")
    Dim b(0) As New com.sun.star.beans.PropertyValue
    b(0).name="MacroExecutionMode"
    b(0).value =com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN
    myDoc = oDesktop.loadComponentFromURL(URL,"_blank",0,b())
    endif
    odoc=thiscomponent
    oSheet1 = ThisComponent.sheets.getByName("Baugruppen")
    x1 = oSheet1.Columns(1).queryEmptyCells()
    z1 = x1(x1.Count-1).RangeAddress.StartRow
    Z1=Z1+1
    oRange = oSheet1.getCellRangeByName("A1:J"+Z1)
    oRange.clearContents(15)
    oRange = oSheet1.getCellRangeByName("A1")
    oDoc.CurrentController.Select(oRange)
    oDoc.CurrentController.insertTransferable(oRangeAddress)
    End Sub
    

  • Mir geht es jetzt darum zu erfahren ob es Converter gibt die sowas jetzt umschreiben oder ob man sich das aus Codeschnipseln zusammenbauen kann ?
    Gruß Marcus

    6
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Libre Basic in VBA wandeln
    20.08.2021 14:37:45
    Oberschlumpf
    Hi Marcus,
    ob es Converter gibt, kannst du doch auch selbst googeln, oder?!
    Und hier bist du ja in einem Excel-Forum, nicht StarBasic-Forum. Natürlich kann es sein, dass es ExcelProfis gibt, die auch StarBasic kennen, aber ich denke eher, dem ist nicht so.
    Auch dir könnte besser helfen, wenn du uns jeweils von
    "offene Datenauskopplung"
    und
    "geöffnete Zieldatei"
    eine EXCEL!-Bsp-Datei per Upload zeigst.
    In beiden Dateien kannst du ja noch mal genau zeigen/beschreiben, welche Daten genau aus "Auskopplung" kopiert und an welcher Stelle genau in "Zieldatei" eingefügt werden sollen.
    Ciao
    Thorsten
    Anzeige
    AW: Libre Basic in VBA wandeln
    20.08.2021 19:01:11
    Marcus
    Hallo
    ich habe etwas gefunden was schon annähernd passt.
  • 
    Sub BedingteKopieZeilen()
    Dim Zeile As Long
    Dim ZeileMax As Long
    Dim n As Long
    With Tabelle1
    ZeileMax = .UsedRange.Rows.Count
    n = 1
    For Zeile = 2 To ZeileMax
    If .Cells(Zeile, 3).Value = "" Then
    .Rows(Zeile).Copy Destination:=Tabelle2.Rows(n)
    n = n + 1
    End If
    Next Zeile
    End With
    End Sub
    

  • Das Makro kopiert bei positiver Bedingung die Daten in Tabelle 2. Wie muss ich es ändern das es in eine andere Datei(Tabelle) kopiert wird ?
    Gruß Marcus
    AW: Libre Basic in VBA wandeln
    20.08.2021 20:34:36
    Oberschlumpf
    wie viele Andere vor dir hast auch du den Teil mit "Bsp-Dateien per Upload zeigen" überlesen
    Klar, niemand muss Bsp-Dateien zeigen. Das is auch kein Problem. Nur zumindest ich hab keine Lust, für Andere Bsp-Dateien erstellen zu müssen, die ich ja brauche, um VBA-Code daran zu testen.
    Weiter viel Erfolg für dich!
    Anzeige
    Weshalb Testdateien? Kann er doch selber ...
    21.08.2021 03:51:54
    Luc:-?
    …testen, Thorsten!
    Hi, Marcus;
    im Code steht Destination:=Tabelle2.Rows(n) - das musst du schon mal ändern, nämlich weg vom internen Blatt-CodeName zum Blatt der anderen Datei und das geht idR nur mit externen (direkten) Namen (Titeln). Die andere Datei sollte dabei geöffnet sein:
    Destination:=Workbooks("dateiname").Sheets(index oder "blatttitel").Rows(n)
    Morhn, Luc :-?
    AW: Weshalb Testdateien? Kann er doch selber ...
    22.08.2021 17:02:35
    Marcus
    Hallo Luc:-?
    Genau diese Zeile habe ich gebraucht !!!
  • 
    Sub BedingteKopieZeilen()
    Dim Zeile As Long
    Dim ZeileMax As Long
    Dim n As Long
    With Tabelle1
    ZeileMax = .UsedRange.Rows.Count
    n = 2
    For Zeile = 2 To ZeileMax
    If .Cells(Zeile, 11).Value = "" Then
    .Rows(Zeile).Copy Destination:=Workbooks("Mappe2").Sheets("Tabelle2").Rows(n)
    n = n + 1
    End If
    Next Zeile
    End With
    End Sub
    

  • Vielen Dank für die Hilfe.
    Gruß Marcus
    Anzeige
    Bitte sehr, gern geschehen! ;-) owT
    23.08.2021 01:12:33
    Luc:-?
    :-?

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige