🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Kopieren einer Tabelle und Wert erhöhen per Makro

Alles zur Programmierung im LibreOffice.
Antworten
spielmacher
Beiträge: 21
Registriert: Di 25. Okt 2011, 13:36

Kopieren einer Tabelle und Wert erhöhen per Makro

Beitrag von spielmacher » Di 3. Jan 2012, 14:10

Servus,
ich stöbere nun schon seit 2 Stunden in Foren und Google um mein altes Excel-Makro für LibreOffice flott zu machen. Aber es will mir nicht gelingen.

Code: Alles auswählen

Sub Makro3()
    ActiveSheet.Select
    ActiveSheet.Copy After:=ActiveSheet
    Range("D9:F24").Select
    a = ActiveCell
    ActiveCell.FormulaR1C1 = a + 7
End Sub
Es scheitert schon allein daran, dass ich den Zellinhalt einer Zelle, in meinem Fall eine verbundene Zelle "D9:F24", nicht in eine Variable überführen kann. Irgendwie weigert sich mein Hirn, sich von Excel-Basic auf LO-Basic umzustellen.

Ich möchte eigentlich nur erreichen, dass das aktive Tabellenblatt kopiert wird und in der Kopie das Datum in einer bestimmten Zelle um 7 Tage erhöht wird.

Könnt Ihr mir vielleicht weiterhelfen?
Danke.
Gruß
Jens
*Win7-64, LO 3.5.4*

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Kopieren einer Tabelle und Wert erhöhen per Makro

Beitrag von F3K Total » Di 3. Jan 2012, 22:27

Hallo, hier eine einfache Version,
es wird nicht die Formel geändert, sondern das Datum fest eingetragen.
Ich habe das eingefügte Blatt "Copy_of_..." genannt, den Abschnitt kannst Du sicher für Dich besser anpassen.

Code: Alles auswählen

Sub S_copy_activesheet_and_add_week
ocontroller = Thiscomponent.currentController
osheet = ocontroller.ActiveSheet'Aktive Tabelle finden
nSheetnumber=osheet.Rangeaddress.Sheet
dvalue = osheet.getcellrangebyname("D9").value'Datum aulesen
ssheetname = osheet.name 'Name der Tabelle auslesen
osheets = thiscomponent.sheets
osheets.copybyname(ssheetname, "Copy_of_"+ssheetname,nSheetnumber+1 )' Kopieren, und an der nachfolgenden (nSheetnumber+1) Stelle einfügen
osheet = osheets(nSheetnumber+1)' eingefügte Tabelle wählen
osheet.getcellrangebyname("D9").value = dvalue+7'Datum um 7 erhöhen
End Sub
Edit: Version2, kürzer
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

spielmacher
Beiträge: 21
Registriert: Di 25. Okt 2011, 13:36

Re: Kopieren einer Tabelle und Wert erhöhen per Makro

Beitrag von spielmacher » Mi 4. Jan 2012, 08:32

Vielen Dank.
Ich habe am Ende noch die Aktivierung der kopierten Tabelle eingefügt, sonst könnte man das Makro nicht mehrmals hintereinander laufen lassen.
das sieht dann so aus.

Code: Alles auswählen

Sub S_copy_activesheet_and_add_week
ocontroller = ThisComponent.CurrentController
osheet = ocontroller.ActiveSheet 'Aktive Tabelle finden
nSheetnumber=osheet.Rangeaddress.Sheet
dvalue = osheet.getcellrangebyname("B5").value 'Datum aulesen
ssheetname = osheet.name 'Name der Tabelle auslesen
osheets = thiscomponent.sheets
osheets.copybyname(ssheetname, ssheetname+1,nSheetnumber+1 ) ' Kopieren, und an der nachfolgenden (nSheetnumber+1) Stelle einfügen
osheet = osheets(nSheetnumber+1) ' eingefügte Tabelle wählen
osheet.getcellrangebyname("B5").value = dvalue+7 'Datum um 7 erhöhen
ssheetname = ThisComponent.Sheets.getByName(ssheetname+1)
ocontroller.setActiveSheet(ssheetname)
End Sub
Die Änderung des Tabellennamens "Copy_of_"... habe ich auf ein Minimum verkürzt und lasse einfach eine 1 hinten dran schreiben.
Jetzt kann ich dank Deiner Hilfe an den Details feilen. So soll sich zB. der neue Tabellenname aus dem Inhalt einer Zelle ergeben.

Vielen, Vielen Dank. So fängt das neue Jahr bestens an.
Gruß
Jens
*Win7-64, LO 3.5.4*

newbee
Beiträge: 2
Registriert: Sa 28. Jan 2012, 11:29

Re: Kopieren einer Tabelle und Wert erhöhen per Makro

Beitrag von newbee » Sa 28. Jan 2012, 11:43

Hallo,
würde gerne das letzte macro ändern und den Namen der Tabelle jeweils um 1 erhöhen (KW 5 -> KW 6...).
Das Macro AddNewSheetName sollte dies lösen, es bricht aber an der Stelle "iSheetNameLength = Len(SheetName)" ab.
Müßte es Length(SheetName) heißen?

Könnt ihr mir hier helfen?

Was muß ich bei dem Makro ändern um den Namen der kopierten Tabelle auf die Kalenderwoche zu setzen?

Grüße
Martin

Sub AddNewSheetName(oSheets as Object, ByVal SheetName as String)
Dim Count as Integer
Dim bSheetIsThere as Boolean
Dim iSheetNameLength as Integer
iSheetNameLength = Len(SheetName)
Count = 2
Do
bSheetIsThere = oSheets.HasByName(SheetName)
If bSheetIsThere Then
SheetName = Right(SheetName,iSheetNameLength) & "_" & Count
Count = Count + 1
End If
Loop Until Not bSheetIsThere
AddNewSheetname = SheetName
End Sub

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Kopieren einer Tabelle und Wert erhöhen per Makro

Beitrag von F3K Total » Sa 28. Jan 2012, 13:36

Hi,
nun im obigen Makro heißt die Variable ssheetname, vielleicht liegt es daran?
... wenn Du den Wert AddNewSheetname als Ergebnis zurückhaben willst, solltest Du da nicht besser eine function verwenden?
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

newbee
Beiträge: 2
Registriert: Sa 28. Jan 2012, 11:29

Re: Kopieren einer Tabelle und Wert erhöhen per Makro

Beitrag von newbee » Mi 8. Feb 2012, 09:33

Hi,
danke für den Tip, leider habe ich seit 25 Jahren nicht mehr programmiert und davor nur mit Pascal.
Wie kann ich aus dem Sub-programm eine Funktion machen?
Gruß Martin

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Kopieren einer Tabelle und Wert erhöhen per Makro

Beitrag von gogo » Mi 8. Feb 2012, 12:58

Statt

Sub AddNewSheetName(oSheets as Object, ByVal SheetName as String)

Function AddNewSheetName(oSheets as Object, ByVal SheetName as String)

irgendwo musst Du dann auch noch einen Wert zuweisen, das geht mit dem Namen der Funktion:

AddNewSheetName = true
oder
AddNewSheetName = "OK"
oder
AddNewSheetName="Fehler!"
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten