Ein Excel Makro zum vorbereiten einer Excel Datei für Filemaker
#1
Hallo,

ich möchte eine Excel Datei die aus einem anderem Programm als Report exportiert werden kann so modifizieren dass Ich Sie bequemer in Filemaker importieren kann.
Jetzt habe Ich schon ein wenig mit Makro aufzeichnen herumgespielt und es so hinbekommen dann Ich eine Excel Datei mit einem einzigen Button habe der dann die entsprechende Datei automatisch öffnet, Sie optimiert, speichert und dann beide Dateien wieder schließt.

Allerdings funktioniert das bislang nur wenn die Datei exakt immer gleich heißt und am gleichen Speicherort liegt. Außerdem funktioniert es nur auf meinem Mac, wenn Ich den Computer Wechsel findet er mein Benutzerverzeichnis natürlich nicht mehr und ich bekomme eine Fehlermeldung.
Ich muss dazu sagen dass Ich sonst nie mit excel arbeite es allerdings keine Alternative in diesem Fall gibt das die Daten in denExcel Datei wie Sie aus dem Export kommt für Filemaker nicht verwertbar ist.

Es sollte bestenfalls so laufen:

1. Klick auf den Button
2. Fenster zum auswählen und öffnen der Datei wird angezeigt (bestenfalls darf die Datei auch anders heissen :)
3. Die Datei wird in den Vordergrund geholt und modifiziert (das mit dem Vordergrund weiß ich nicht aber die Modifikationen funktionieren)
4. die Datei wird gespeichert
5. alle beiden Datei werden geschlossen

Das ist mein Makro das im Moment nur auf meinem Mac und nur wenn die Datei an der richtigen Stelle mit dem Richtigen Namen liegen.
Solltest Ihr mir helfen können dann währe es cool dass Ihr den Text unten gleich wenn möglich verändert da ich mit Textschnipseln nicht viel anfangen kann da Ich Excel Makros 0 verstehe XD





Code:
Sub Import_vorbereiten()
'
' Import_vorbereiten Macro
'

'
    ExecuteExcel4Macro "WINDOW.MOVE(16,-35,"""")"
    Workbooks.Open Filename:= _
        "Macintosh HD:Users:Philipp:Documents:Kronos Viewer:OpenReport.xls"
    ActiveWindow.SmallScroll Down:=-56
    Cells.Select
    Selection.UnMerge
    Rows("1:13").Select
    Selection.Delete Shift:=xlUp
    Range("E9").Select
    ActiveWindow.SmallScroll Down:=-72
    Columns("A:A").Select
    Selection.Delete Shift:=xlToLeft
    Columns("A:AW").Select
    Selection.ColumnWidth = 2.83
    Selection.ColumnWidth = 9.67
    Range("E11").Select
    ActiveWindow.SmallScroll Down:=-97
    Rows("2:2").Select
    Selection.UnMerge
    Range("B:I,K:K,L:L,M:M,N:N,P:P,Q:Q,R:R,S:S").Select
    Range("S1").Activate
    ActiveWindow.SmallScroll ToRight:=5
    Range("B:I,K:K,L:L,M:M,N:N,P:P,Q:Q,R:R,S:S,U:U,V:V,W:W,X:X").Select
    Range("X1").Activate
    ActiveWindow.SmallScroll ToRight:=13
    Range( _
        "B:I,K:K,L:L,M:M,N:N,P:P,Q:Q,R:R,S:S,U:U,V:V,W:W,X:X,Z:Z,AA:AA,AB:AB,AC:AC,AE:AE,AF:AF,AG:AG,AH:AH,AJ:AJ,AK:AK,AL:AL,AM:AM,AN:AN,AO:AO" _
        ).Select
    Range("AO1").Activate
    ActiveWindow.SmallScroll ToRight:=10
    Union(Range( _
        "AV:AV,AW:AW,B:I,K:K,L:L,M:M,N:N,P:P,Q:Q,R:R,S:S,U:U,V:V,W:W,X:X,Z:Z,AA:AA,AB:AB,AC:AC,AE:AE,AF:AF,AG:AG,AH:AH,AJ:AJ,AK:AK,AL:AL,AM:AM,AN:AN,AO:AO,AQ:AQ,AR:AR,AS:AS" _
        ), Range("AT:AT,AU:AU")).Select
    Range("AW1").Activate
    ActiveWindow.SmallScroll ToRight:=12
    Range("AW6").Select
    ActiveWindow.SmallScroll ToRight:=-222
    Range("B:B,C:C,D:D,E:E,F:F,G:G,H:H,I:I").Select
    Range("I1").Activate
    Selection.Delete Shift:=xlToLeft
    Range("C:C,D:D,E:E,F:F,H:H,I:I,J:J,K:K").Select
    Range("K1").Activate
    Selection.Delete Shift:=xlToLeft
    Range("E:E,F:F,G:G,H:H,J:J,K:K,L:L,M:M,O:O,P:P,Q:Q,R:R").Select
    Range("R1").Activate
    Selection.Delete Shift:=xlToLeft
    Range("H:H,I:I,J:J,K:K,L:L,M:M,O:O,P:P,Q:Q,R:R,S:S,T:T").Select
    Range("T1").Activate
    Selection.Delete Shift:=xlToLeft
    Columns("I:X").Select
    Selection.Delete Shift:=xlToLeft
    Range("M11").Select
    ActiveWindow.SmallScroll ToRight:=-15
    ActiveWindow.SmallScroll Down:=-18
    ActiveWindow.SmallScroll ToRight:=-223
    Rows("4:4").Select
    Selection.Delete Shift:=xlUp
    Rows("1:7").Select
    Range("A7").Activate
    Selection.RowHeight = 16
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp
    Rows("2:2").Select
    Selection.Delete Shift:=xlUp
    Range("B7").Select
    ActiveWorkbook.SaveAs Filename:= _
        "Macintosh HD:Users:Philipp:Documents:Kronos Viewer:Systemdatein:Import.xls", FileFormat:= _
        xlExcel8, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
        , CreateBackup:=False
    ActiveWindow.Close
    Windows("Import vorbereiten.xlsm").Close False
Application.Quit
End Sub
Top
#2
Hallo

ich habe den Code seitweit ich ihn verstanden habe mal verkürzt.  Anfaenger typisch ist das der Makro Recorder immer Select aufzeichnet, was zu 95% überflüssig ist.  Programmierer arbeiten ohne Select, indem man das Ereignis wie .Copy oder .Delete direkt hinten anhaengt. 

Es ist ein grosser Bereich der nur Selektiert wird, aber sonst keine Funktion hat.  Den kann/ sollte man m.E. löschen, es sei denn er wird doch benötigt. Das Öffnen und Speichern erfolgt jetzt über ein Diaogfeld. Bitte zuerst in einer Testdatei testen, das Makro ist ungetestet, ich kann nicht garantieren das alles fehlerfrei klappt. 

mfg  Gast 123

Code:
Sub Import_vorbereiten()
' Import_vorbereiten Macro

  'Datei über Dialog Öffnen
   Datei = Application.GetOpenFilename
   If Datei = Empty Then Exit Sub

   'wofür ist der 1.Befehl ???  wird er gebraucht??
   ExecuteExcel4Macro "WINDOW.MOVE(16,-35,"""")"
   Workbooks.Open Filename:=Datei
   
   Cells.UnMerge  'verbundene Zellen auflösen
   
   'Zeilen + Spalten löschen
   Rows("1:13").Delete Shift:=xlUp
   Columns("A:A").Delete Shift:=xlToLeft
   
   'Spalten Breite einstellen
   Columns("A:AW").ColumnWidth = 2.83
   Columns("A:AW").ColumnWidth = 9.67
   
   
   '** welche Sinn macht das Selektieren ???
   '   ausser zum Ansehen gibt es hier keine Funktion !!
   Range("B:I,K:K,L:L,M:M,N:N,P:P,Q:Q,R:R,S:S").Select
   Range("S1").Activate
   ActiveWindow.SmallScroll ToRight:=5
   Range("B:I,K:K,L:L,M:M,N:N,P:P,Q:Q,R:R,S:S,U:U,V:V,W:W,X:X").Select
   Range("X1").Activate
   ActiveWindow.SmallScroll ToRight:=13
   Range("B:I,K:K,L:L,M:M,N:N,P:P,Q:Q,R:R,S:S,U:U,V:V,W:W,X:X,Z:Z,AA:AA," & _
     "AB:AB,AC:AC,AE:AE,AF:AF,AG:AG,AH:AH,AJ:AJ,AK:AK,AL:AL,AM:AM,AN:AN,AO:AO").Select
   Range("AO1").Activate
   ActiveWindow.SmallScroll ToRight:=10
   Union(Range("AV:AV,AW:AW,B:I,K:K,L:L,M:M,N:N,P:P,Q:Q,R:R,S:S,U:U,V:V,W:W,X:X,Z:Z,AA:AA,AB:AB," & _
      "AC:AC,AE:AE,AF:AF,AG:AG,AH:AH,AJ:AJ,AK:AK,AL:AL,AM:AM,AN:AN,AO:AO,AQ:AQ,AR:AR,AS:AS"), _
      Range("AT:AT,AU:AU")).Select
   Range("AW1").Activate
   ActiveWindow.SmallScroll ToRight:=12
   Range("AW6").Select
   ActiveWindow.SmallScroll ToRight:=-222
   '** ganzer Block unnütze Funktionen, am besten löschen !!
       
   'Spalten Bereich gezielt löschen
   Range("B:B,C:C,D:D,E:E,F:F,G:G,H:H,I:I").Delete Shift:=xlToLeft
   Range("C:C,D:D,E:E,F:F,H:H,I:I,J:J,K:K").Delete Shift:=xlToLeft
   Range("E:E,F:F,G:G,H:H,J:J,K:K,L:L,M:M,O:O,P:P,Q:Q,R:R").Delete Shift:=xlToLeft
   Range("H:H,I:I,J:J,K:K,L:L,M:M,O:O,P:P,Q:Q,R:R,S:S,T:T").Delete Shift:=xlToLeft
   
   'Spalten + Zeilen löschen
   Columns("I:X").Delete Shift:=xlToLeft
   Rows("4:4").Delete Shift:=xlUp
   Rows("1:2").Delete Shift:=xlUp
   
   'Zeilenhöhe einstellen
   Rows("1:7").RowHeight = 16
   
  'Datei Vorgabe zum Speichern  (oder Empty)
  strDateiname = Empty '("Testmappe.xls")
 
  'Datei über Dialog speichern
  Application.Dialogs(xlDialogSaveAs).Show (strDateiname)
  ActiveWindow.Close
 
  Windows("Import vorbereiten.xlsm").Close False
Application.Quit
End Sub
Top
#3
Super vielen Dank für die schnelle Hilfe.
Also am Ende kommt schonmal die gleiche verwertbare Datei raus wie mit meinem Makro.

Aber das ein oder andere funktioniert noch nicht ganz, alt könnt Ihr mir ein weiteres mal helfen?

1. Wenn sich durch klick auf den Button und nach Auswahl der Datei (das funktioniert) die andere Tabelle öffnet, dann kommt die Fehlermeldung in Anhang 1
2. Wenn Ich diese Meldung dann irgendwie weggeklickt habe dann währ es cool wenn der Dateiname schon vorgegeben ist um anschließende Fehler auszuschließen
3. Beim Speichern kommt dann die Meldung in Anhang 2

Ansonsten bin ich damit schonmal einen ganzen Schritt voraus :)


Angehängte Dateien Thumbnail(s)
       
Top
#4
Hallo

bei der 1. Warnung bin ich überfragt was genau damit gemeint ist und um welche Personenbezogene Daten es da geht??  Mit Sicherheitseinstellungen kenne ich mich nicht aus.  Vielleicht weiss das ein Kollege.

Zur zweiten Meldung:  prüfe bitte mal ob der Windows Name korrekt stimmt?  =  Windows("Import vorbereiten.xlsm").Close False
Vielleicht kann man den Befehl auch ganz weglassen, denn danach kommt ja der letzte Befehl zum schliessen:  "Application Quit"!   
  
mfg  Gast 123
Top
#5
Auch Hallo,

zu 1. seit Excel 2007 muss eine Makrodatei als xlsm bzw. xlsb abgespeichert werden.

zu 2. nehme anstatt Windows Workbooks

Code:
Workbooks("Import vorbereiten.xlsm").Close False
Gruß Stefan
Win 10 / Office 2016
Top
#6
Hallo noch mal ....

schön das eine Antwort von Stefan vorliegt, ich habe gerade noch einen Fragepunkt gesehen.
Zitat:dann währ es cool wenn der Dateiname schon vorgegeben ist um anschließende Fehler auszuschließen

Diese Möglichkeit ist in meinem Makro schon vorgesehen, und zwar genau hier. wenn du Empty durch einen Datei Namen ersetzt.  Da kann auch eine Celle als Range drinstehen, um den Dateinamen aus einer Zelle zu laden.  Oder schreibe den Dateinamen ganz oben vor Sub Import in eine Const Anweisung. Wie du es machst ist egal!  Enthalten die Dateien die du Öffnest den Makros??

'Datei Vorgabe zum Speichern  (oder Empty)
  strDateiname = Empty '("Testmappe.xls")     '## Empty löschen und direkt eine Namen angeben, oder
  strDateiname = Range("xxx").Value           '## Const ganz oben vpr Sub Import einfügen!!
  strDateiname = Datei                        '## Const Datei = "Meine Datei.xls"    

mfg  Gast 123
Top
#7
(03.05.2017, 19:51)Steffl schrieb: Auch Hallo,

zu 1. seit Excel 2007 muss eine Makrodatei als xlsm bzw. xlsb abgespeichert werden.

zu 2. nehme anstatt Windows Workbooks

Code:
Workbooks("Import vorbereiten.xlsm").Close False

Hallo Steffi, vielen Dank die anderen Fehlermeldungen sind jetzt weg allerdings stürzt beim Speichern das komplette Excel jetzt ab als ich Windows gegen Workbooks getauscht habe.
Die Datei wird zwar gespeichert aber es wird wohl recht verwirrend für den späteren Anwender sein :)


Angehängte Dateien Thumbnail(s)
   

.pdf   Fehlerbericht.pdf (Größe: 182,67 KB / Downloads: 2)
Top
#8
(03.05.2017, 23:30)Gast 123 schrieb: Hallo noch mal ....

schön das eine Antwort von Stefan vorliegt, ich habe gerade noch einen Fragepunkt gesehen.

Diese Möglichkeit ist in meinem Makro schon vorgesehen, und zwar genau hier. wenn du Empty durch einen Datei Namen ersetzt.  Da kann auch eine Celle als Range drinstehen, um den Dateinamen aus einer Zelle zu laden.  Oder schreibe den Dateinamen ganz oben vor Sub Import in eine Const Anweisung. Wie du es machst ist egal!  Enthalten die Dateien die du Öffnest den Makros??

'Datei Vorgabe zum Speichern  (oder Empty)
  strDateiname = Empty '("Testmappe.xls")     '## Empty löschen und direkt eine Namen angeben, oder
  strDateiname = Range("xxx").Value           '## Const ganz oben vpr Sub Import einfügen!!
  strDateiname = Datei                        '## Const Datei = "Meine Datei.xls"    

mfg  Gast 123

Da ich immer das Gefühl habe das Ich irgendeine Klammer vergesse oder ein Leerzeichen nicht richtig setzte könntest du mir den kompletten Code schicken wenn das möglich ist?
Und in der neuen Excel Version schreibt er die Datei immer als xlsx, kann man das automatisch auf xls stellen?
Top
#9
Hi,

Zitat:Und in der neuen Excel Version schreibt er die Datei immer als xlsx, kann man das automatisch auf xls stellen?

unter "Speichern unter" kannst du bei "Dateityp" einstellen, wie gespeichert werden soll.

[
Bild bitte so als Datei hochladen: Klick mich!
]

Aber warum willst du dir eine .xlx antun? Du hast anstelle 1.048.576 Zeilen und 16.384 Spalten nur noch 65.536 Zeilen und 256 Spalten zur Verfügung. Außerdem funktionieren einige Feature nicht.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Top
#10
Hallo

bezüglich der Datei Endung verweise ich auf den Moderator.  Die Entscheidung liegt bei dir.  Mein Tipp zum Code:

Setze bitte vor Sub Import_vorbereiten()  noch den Befehl:  Const Datei = "Hier dein Dateiname.xl."  und bitte mit der Excel Endung!! 
Dann im Makro diesen nur Teil aendern   strDateiname = Datei 

Die Const Anwesiung vor Sub hat den Vorteil das du dort den Datei Namen jederzeit manuell aendern kannst, wie du willst!

mfg  Gast 123
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 3 Gast/Gäste