Seite 1 von 1
Kopieren einer Tabelle und Wert erhöhen per Makro
Verfasst: Di 3. Jan 2012, 14:10
von spielmacher
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.
Re: Kopieren einer Tabelle und Wert erhöhen per Makro
Verfasst: Di 3. Jan 2012, 22:27
von F3K Total
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
Re: Kopieren einer Tabelle und Wert erhöhen per Makro
Verfasst: Mi 4. Jan 2012, 08:32
von spielmacher
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.
Re: Kopieren einer Tabelle und Wert erhöhen per Makro
Verfasst: Sa 28. Jan 2012, 11:43
von newbee
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
Re: Kopieren einer Tabelle und Wert erhöhen per Makro
Verfasst: Sa 28. Jan 2012, 13:36
von F3K Total
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
Re: Kopieren einer Tabelle und Wert erhöhen per Makro
Verfasst: Mi 8. Feb 2012, 09:33
von newbee
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
Re: Kopieren einer Tabelle und Wert erhöhen per Makro
Verfasst: Mi 8. Feb 2012, 12:58
von gogo
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!"