Seite 1 von 1

Tabellenblatt in neues Dokument kopieren

Verfasst: Mo 22. Jun 2015, 11:05
von toni007
Hallo zusammen,

ich möchte per Makro ein Tabellenblatt in ein neues Dokument kopieren. Die Formatierung soll übernommen werden.
Anstelle der Formeln sollen aber nur die Werte kopiert werden.

Ich habe schon verschiedenes probiert:

mit

Code: Alles auswählen

Sub Export()
Dim Sheet As Object


Sheet = ThisComponent.Sheets.getByName("xxx")
ThisComponent.CurrentController.setActiveSheet(Sheet)

dim document   as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
Dim args1(2) as new com.sun.star.beans.PropertyValue
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
args1(0).Name = "DocName"
args1(0).Value = ""
args1(1).Name = "Index"
args1(1).Value = 1
args1(2).Name = "Copy"
args1(2).Value = true
dispatcher.executeDispatch(document, ".uno:Move", "", 0, args1())

' CopyPaste(Sheet , oSheet_Ziel , "A1:AA100", "A1:AA100")
End Sub
wird schon mal das aktive Tabellenblatt in eine neue Datei kopiert, aber da sind ja jetzt noch die Formeln drin und nicht die Werte...

mit

Code: Alles auswählen

Sub CopyPaste(oSheet_Quelle As Object, oSheet_Ziel As Object, Range_Quelle As String, Range_Ziel As String)
	Dim DatArray
	DatArray = oSheet_Quelle.getCellRangeByName(Range_Quelle).getDataArray
	oSheet_Ziel.getCellRangeByName(Range_Ziel).setDataArray(DatArray) 	
End Sub
wollte ich nun auch die Werte kopieren, weiß aber nicht wie ich 'oSheet_Ziel' zu packen bekomme...

laut A. Pitonyak sollte es folgendermaßen gehen

Code: Alles auswählen

Sub Main
  Dim sNewURL$    'URL For a NEW calc document "private:factory/scalc"
  Dim oNewDoc     'New Document
  Dim oFrame      'Frame that can perform the dispatch
  Dim oDispatcher 'The dispatcher to use
  Dim oSheet      'The current active sheet
  Dim i%          'General Index Variable
  Dim iActive%    'Currently active sheet
  REM This will copy FROM ThisComponent
  oFrame = ThisComponent.CurrentController.Frame
  oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  oSheet = ThisComponent.CurrentController.getActiveSheet()
  iActive = -1 : i = 0
  Do While iActive < 0
    If ThisComponent.Sheets(i).Name = oSheet.Name Then
      iActive = i
    Else
      i = i + 1
    End If
  Loop

  sNewURL = "private:factory/scalc"
  oNewDoc = StarDesktop.loadComponentFromURL(sNewURL, "_blank", 0, Array())

  Dim args(2) as new com.sun.star.beans.PropertyValue
  args(0).Name  = "DocName"               
  args(0).Value = "Untitled1"   'This copies to the document named Untitled1
  args(1).Name  = "Index"
  args(1).Value = iActive
  args(2).Name  = "Copy"
  args(2).Value = True          'Set to Flase to perform a Move
     
  oDispatcher.executeDispatch(oFrame, ".uno:Move", "", 0, args())
End Sub
ich habe es mit

args(0).Value = "Unbenannt 1" versucht, das klappt aber so nicht.

Code: Alles auswählen

CopyByName
klappt wohl nur innerhalb eines Dokuments und mit

Code: Alles auswählen

importsheet
bin ich auch nicht zurecht gekommen.

In Excel sieht der funktionierende Code folgendermaßen aus:

Code: Alles auswählen

Sub Export()
'
' Export Makro
' Ausschließlicher Export des Blattes "xxx"
'

'
    Sheets("Klassifizierung").Select    ' Auswahl des Tabellenblatts mit Namen "xxx"
    Cells.Select                        ' alle Zellen des Blatts auswählen
    Selection.Copy                      ' alle Zellen kopieren
    Workbooks.Add                       ' neue Datei erstellen und hinzufügen
                                        ' Blattinhalte und -formatierungen einfügen
                                        
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Sheets("Tabelle1").Select           'Tabellenblatt umbenennen
    Sheets("Tabelle1").Name = "Export"
    Range("B1").Select
    Application.CutCopyMode = False
    ActiveWorkbook.Close savechanges:=True
    
End Sub
Netterweise öffnet sich danach noch ein 'Speichern Unter' - Dialog für die neue Datei.

Hat wohl jemand nen Tip für mich...?

Gruß Thomas

Re: Tabellenblatt in neues Dokument kopieren

Verfasst: Di 23. Jun 2015, 17:50
von komma4
toni007 hat geschrieben:laut A. Pitonyak sollte es folgendermaßen gehen
Der Code von Andrew läuft und funktioniert bei mir: was geht bei Dir nicht? Welche Fehlermeldung?

Nach dem Kopieren des Tabellenblatts habe ich mit dem Makrorekorder ein Bearbeiten>Kopieren und anschliessend ein Bearbeiten>Inhalte einfügen... aufgezeichnet (das nicht die Formeln einfügt). Auch das funktioniert problemlos.

Ich denke, dass Du lernen musst Deinen Basic-Code zu debuggen. :geek:

Dein Excel-Code schaue ich mir gar nicht an - bin froh, dass ich mit dem Sch*** nix mehr zu tun habe.