Anzeige
Archiv - Navigation
1580to1584
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
Zurück zur "Startseite"
21.09.2017 13:56:31
Nordwestler
Hallo mal wieder,
eine vermutlich einfache Frage für die Füchse unter den Forianern, für mich leider nicht!
Mit einem Schalter in Datei X auf Tabellenblatt1 mit unten stehendem Code werden aus Tabellenblatt "Exportdaten" diese in eine andere Datei Y kopiert, gespeichert und geschlossen. Klappt wunderbar!
Nun ist aber in der Steuerungsdatei X das Tabellenblatt "Exportdaten" aktiv und die exportierten Daten sind noch markiert. Nach dem Kopiervorgang soll aber wieder Tabelle1 mit der zuletzt ausgewählten Zelle sichtbar sein.
Wie lässt sich Excel dazu überreden?
Viele Grüße aus dem endlich mal sonnigen Nordwesten
Reinhard
Sub Tabellenbereich_in_externe_Datei_kopieren_und_unter_neuem_Namen_speichern()
Dim strDateiname As String
Sheets("Exportdaten").Select
Range("a1:bz300").Select
' im aktiven Tabellenblatt die zu kopierenden Zellen definieren und kopieren
Selection.Copy
' Zieldatei öffnen
Workbooks.Open Filename:=Environ("USERPROFILE") & "\Desktop\Exceltest\Master\VP Neu.xlsx"
' Ziel zum Einfügen definieren
Sheets("Importdaten").Select
Range("a1:bz300").Select
' Zwischenablage als Werte einfügen
Cells.PasteSpecial Paste:=xlPasteValues
' Startseite der Zieldatei festlegen
Sheets("Menü").Select
' Die Zelle(n) definieren, aus denen der neue Dateiname ausgelesen werden soll
strDateiname = Range("a1").Value & ".xlsx"
ActiveWorkbook.SaveAs Filename:=Environ("USERPROFILE") & "\Desktop\Exceltest\Ergebnisse\" &  _
_
strDateiname
Application.CutCopyMode = False
ActiveWorkbook.Close
End Sub

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zurück zur "Startseite"
21.09.2017 14:06:22
yummi
Hallo Nordwestler,
indem du mal den ganzen select Mist weglässt, das brauchst du nämlich nicht.

Sub Tabellenbereich_in_externe_Datei_kopieren_und_unter_neuem_Namen_speichern()
Dim strDateiname As String
Dim wksD as Worksheet
' im aktiven Tabellenblatt die zu kopierenden Zellen definieren und kopieren
Sheets("Exportdaten").Range("a1:bz300").Copy
' Zieldatei öffnen
set wksD = Workbooks.Open Filename:=Environ("USERPROFILE") & "\Desktop\Exceltest\Master\VP  _
Neu.xlsx"
' Ziel zum Einfügen definieren
' Zwischenablage als Werte einfügen
wksD.Sheets("Importdaten").Range("a1:bz300").PasteSpecial Paste:=xlPasteValues
' Startseite der Zieldatei festlegen
'    Sheets("Menü").Select
' Die Zelle(n) definieren, aus denen der neue Dateiname ausgelesen werden soll
strDateiname = wksD.Sheets("Menü").Range("a1").Value & ".xlsx"
wksD.SaveAs Filename:=Environ("USERPROFILE") & "\Desktop\Exceltest\Ergebnisse\" &  _
strDateiname
Application.CutCopyMode = False
wksD.Close
End Sub
ungetestet, sollte so gehen
Gruß
yummi
Anzeige
AW: Zurück zur "Startseite"
21.09.2017 14:24:12
Nordwestler
Hallo Yummi,
vielen Dank - auch für die Bereinigung des Selection-Mülls :-)
Allerdings bleibt der Code hängen mit Syntaxfehler in Zeile
set wksD = Workbooks.Open Filename:=Environ("USERPROFILE") & "\Desktop\Exceltest\Master\VP _
Neu.xlsx"
bzw. bei Filename - Erwartet: Anweisungsende.
Schreibfehler finde ich keine. Wieso klemmt's?
Gruß
Reinhard
AW: Zurück zur "Startseite"
21.09.2017 14:26:57
yummi
Hallo reinhard,

set wksD = Workbooks.Open( Filename:=Environ("USERPROFILE") & "\Desktop\Exceltest\Master\VP _
Neu.xlsx" )
ich hab nur den Müll beseitigt, aber da gibt es wie du anhand der anderen Antworten erkennen kannst noch ein wenig Optimierungsbedarf.
Gruß
yummi
Anzeige
AW: Zurück zur "Startseite"
21.09.2017 14:35:12
Nordwestler
Ja, Problem ist gelöst und nie wieder Select(ion) ;-)
Danke
Reinhard
AW: Klammerfehler
21.09.2017 14:33:46
Daniel
Hi
hier hat sich folgender Fehler eingeschlichen:
- steht eine Anweisung für sich alleine in einer Programmzeile, so werden die Parameter für diese Anweisung direkt anschließend geschrieben.
Beispiel:
Workbooks.Open "Dateiname.xlsx"
- steht die Anweisung jedoch in einem Kontext, müssen die Parameter in Klammern gesetzt werden, damit der Interpreter erkennen kann, welche Teile der Befehlszeile zur Parameterliste gehören und welche nicht mehr
Beispiel:
Set wskD = Workbooks.Open("Dateiname.xlsx")
yummi hat dein Beispiel erweitert, in dem er eine Variable für die geöffnete Datei eingeführt hat, hat dann aber vergessen, dass er dann die Parameter in Klammern setzen muss.
sowas fällt beim Testen normalerweise sofort auf, da aber dein Code auf einem fremden Rechner nicht ohne größere Veränderungen getestet werden kann, passiert so was halt gelegentlich und da musst du dann eben das Testkaninchen spielen.
Gruß Daniel
Anzeige
AW: Klammerfehler
21.09.2017 14:36:53
Nordwestler
Danke für die Erklärung, wieder was dazu gelernt :-)
Ein guter Tag mit Sonne und Erleuchtung :-)
AW: Zurück zur "Startseite"
21.09.2017 14:12:25
Daniel
Hi
gewöhne dir an, die Aktionen direkt mit den Zellen auszuführen, ohne sie vorher zu selektieren, auch wenn der Recorder das so aufzeichnet.
Das Selektieren ist eine Vorgehensweise, die wir "Mausschubser" so machen müssen, aber in VBA ist es nicht notwendig
Sub Tabellenbereich_in_externe_Datei_kopieren_und_unter_neuem_Namen_speichern()
Dim strDateiname As String
' im aktiven Tabellenblatt die zu kopierenden Zellen definieren und kopieren
Sheets("Exportdaten").Range("a1:bz300").Copy
' Zieldatei öffnen
Workbooks.Open Filename:=Environ("USERPROFILE") & "\Desktop\Exceltest\Master\VP Neu.xlsx"
' Ziel zum Einfügen definieren
' Zwischenablage als Werte einfügen
ActiveWorkbook.Sheets("Importdaten").Range("a1:bz300").PasteSpecial Paste:=xlPasteValues
' Die Zelle(n) definieren, aus denen der neue Dateiname ausgelesen werden soll
strDateiname = ActiveWorkbook.Sheets("Menü").Range("a1").Value & ".xlsx"
ActiveWorkbook.SaveAs Filename:=Environ("USERPROFILE") & _
"\Desktop\Exceltest\Ergebnisse\" & strDateiname
Application.CutCopyMode = False
ActiveWorkbook.Close
End Sub
nach dem Schließen der Datei sollte dann wieder das Blatt aktiv sein, von dem aus du das Makro gestartet hast.
Wenn du auf die Selects nicht verzichten magst (oder ganz sicher gehen willst)
dann ergänze deinen Code am Anfang und Ende mit diesen Zeilen:
Dim BereichAlt as range
Set BereichAlt = Selection
Application.Goto BereichAlt
Gruß Daniel
Anzeige
AW: Zurück zur "Startseite"
21.09.2017 14:29:31
Nordwestler
Hallo Daniel,
select(ion) muss ja wohl ein ganz großes Übel sein, das habe ich jetzt verstanden :-)
Vielen Dank, klappt wirklich wunderbar :-)
Reinhard
AW: Zurück zur "Startseite"
21.09.2017 14:24:00
EtoPHG
Hallo Reinhard,
Wer hat dir denn zu diesen völlig überflüssigen, kontraproduktiven .Select(s) geraten?
Sub Tabellenbereich_in_externe_Datei_kopieren_und_unter_neuem_Namen_speichern()
ThisWorkbook.Worksheets("Exportdaten").Range("a1:bz300").Copy
' Zieldatei öffnen, einfügen, sichern als, schliessen
With Workbooks.Open(Filename:=Environ("USERPROFILE") & _
"\Desktop\Exceltest\Master\VP Neu.xlsx")
.Worksheets("Importdaten").Range("a1:bz300").PasteSpecial Paste:=xlPasteValues
' Die Zelle(n) definieren, aus denen der neue Dateiname ausgelesen werden soll
.SaveAs Filename:=Environ("USERPROFILE") & "\Desktop\Exceltest\Ergebnisse\" & _
.Worksheets("Menü").Cells(1, 1).Text & ".xlsx"
.Close False
End With
Application.CutCopyMode = False
End Sub
Gruess Hansueli
Anzeige
AW: Zurück zur "Startseite"
21.09.2017 14:33:29
Nordwestler
Danke, Hansueli,
wie ich grad schon Daniel geschrieben habe, habe ich nun auch verstanden, wie es ohne select(ion) geht :-). (Das war mal ein Makrorecorder-Ergebnis, daher der Müll)
Ohne Selection- und siehe da, schon geht alles wie von selbst ;-)
Danke
Reinhard

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige