Autor
|
Thema: VBA hilfe copy paste (4587 mal gelesen)
|
Sepsis Mitglied
Beiträge: 399 Registriert: 19.03.2009
|
erstellt am: 30. Jun. 2011 13:15 <-- editieren / zitieren --> Unities abgeben:
Folgendes ich habe eine Excel Datei die die Arbeitsblätter von Jänner bis Dezember enthält. Über einen Knopf im Arbeitsblatt Jänner kann ich mit dem Hinterlegten Makro eine Datei öffnen, dann soll er aus der XLS Datei aus dem Arbeitsblatt Jänner den Bereich AD90:AG399 rauskopieren und in die zuvor ausgewählte Datei in die Registerkarte Eingabe in den Bereich A7: D90 reinkopieren. Klappt alles bis aufs reinkopieren kommt eine Bereichsverlezung. Jemand eine Idee? "Kann die Quelle des Makros nicht mehr nachvollziehen also keine Credits angeben" Code: Sub Jänner_Klicken() '24.05.2007, NoNet, modifiziert am 18.06.2008 und 21.07.2008 Dim strdateiname, strAlleNamen As String, n As Integer strdateiname = Dateiauswahl() If IsArray(strdateiname) Then 'Mehrere Dateien ausgewählt 'Alle Namen in Eine Variable mit Zeilenumbruch zusammenfügen strAlleNamen = Join(strdateiname, vbLf) 'Anzeige der ausgewählten Dateinamen If MsgBox(strAlleNamen, vbYesNo, "Diese Dateein bearbeiten ?") = vbYes Then 'Alternativ : Zugriff auf einzelne Namen per Schleife : For n = 1 To UBound(strdateiname) 'MsgBox strDateiname(n), vbOKOnly, "Datei Nr. " & n DateiBearbeiten strdateiname(n) Next End If Else If strdateiname <> "" Then DateiBearbeiten strdateiname End If End Sub Function Dateiauswahl() Dim strdateiname 'Multiselect:=TRUE bedeutet : Es können mehrere Dateien ausgewählt werden 'Multiselect:=FALSE bedeutet : Es kann nur EINE Datei ausgewählt werden strdateiname = Application.GetOpenFilename( _ FileFilter:="Excel-Dateien (*.xlsx), *.xlsx", _ Title:="Datei auswählen", MultiSelect:=True) If TypeName(strdateiname) = "Boolean" Then 'Abgebrochen Dateiauswahl = "" Else Dateiauswahl = strdateiname End If End Function Sub DateiBearbeiten(strdateiname) Application.DisplayAlerts = False ActiveWorkbook.Sheets("Jänner").Range [AD90:AG399].Copy Workbooks.Open strdateiname strdateiname.Sheets("Eingabe").Range [A1:D310].xlPasteValues ActiveWorkbook.Close False End Sub
------------------ The Man Who Knew Too Much Am Ende der Evolution steht ein schwarzes Loch und alle schwarzen Löcher die wir beobachten sind Kulturen die auch mit dem Atom gespielt haben. [Diese Nachricht wurde von Sepsis am 30. Jun. 2011 editiert.] [Diese Nachricht wurde von Sepsis am 30. Jun. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 30. Jun. 2011 13:31 <-- editieren / zitieren --> Unities abgeben: Nur für Sepsis
Klar: du willst 309 Zeilen kopieren, die er in nur 83 Zeilen einfügen darf. Wie soll das funktionieren? Lass ihn doch mal bis D316 einfügen. Mal sehen, was dann passiert. Grüße und HTH Tobias ------------------ Besucht mich doch mal in meiner Tischlerei "...Kommunikation ist nur so gut wie ihr Ergebnis..." - frei nach Richard Bandler / John Grinder "...Wenn du das tust, was du schon immer tust, wirst du auch nur das erhalten, was du schon immer erhalten hast..." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sepsis Mitglied
Beiträge: 399 Registriert: 19.03.2009 Epl 5.70 SC1 Epl P8 v 1.9 Int Sp1 Epl P8 v 2.0 Epl v 2.0 SP1 Epl P8 v 2.1 SP1 Epl P8 v 2.3 Office 2003;2007;2010 ACAD 2004;2006;2010,2014 WSCAD;Gimp
|
erstellt am: 30. Jun. 2011 13:58 <-- editieren / zitieren --> Unities abgeben:
Er steigt mir dem Fehler Objekt unterstützt diese Eigenschaft oder Methode nicht aus nachdem er die Zellen bereits in den Arbeitsspeicher kopiert hat! Warum?? Sub DateiBearbeiten(strdateiname) Application.DisplayAlerts = False ActiveWorkbook.Sheets("Jänner").Range [AD90:AG399].Copy Workbooks.Open strdateiname strdateiname.Sheets("Eingabe").Range [A1: D310].xlPasteValues ActiveWorkbook.Close False End Sub ------------------ The Man Who Knew Too Much Am Ende der Evolution steht ein schwarzes Loch und alle schwarzen Löcher die wir beobachten sind Kulturen die auch mit dem Atom gespielt haben.
[Diese Nachricht wurde von Sepsis am 30. Jun. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 30. Jun. 2011 15:37 <-- editieren / zitieren --> Unities abgeben: Nur für Sepsis
weil strdateiname als String definiert ist und somit keine Eigenschaft "Sheets" besitzt. Probier statt Zitat: strdateiname.Sheets("Eingabe").Range [A1: D310].xlPasteValues
einfach mal: Code: Excel.ActiveWorkbook.Sheets("Eingabe").Range [A1: D310].xlPasteValues
Das Ganze ist allerdings ungetestet. GrüßeTobias ------------------ Besucht mich doch mal in meiner Tischlerei "...Kommunikation ist nur so gut wie ihr Ergebnis..." - frei nach Richard Bandler / John Grinder "...Wenn du das tust, was du schon immer tust, wirst du auch nur das erhalten, was du schon immer erhalten hast..." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sepsis Mitglied
Beiträge: 399 Registriert: 19.03.2009 Epl 5.70 SC1 Epl P8 v 1.9 Int Sp1 Epl P8 v 2.0 Epl v 2.0 SP1 Epl P8 v 2.1 SP1 Epl P8 v 2.3 Office 2003;2007;2010 ACAD 2004;2006;2010,2014 WSCAD;Gimp
|
erstellt am: 30. Jun. 2011 16:09 <-- editieren / zitieren --> Unities abgeben:
Geht auch nicht. Wobei die ausgewählte Datei in die in kopieren will doch sicher nicht mit ActiveWorkbook.Sheets("Eingabe").Range [A1: D310].xlPasteValues angesprochen werden kann! Das ActiveWorkbook ist doch das erste Excel File oder? Der Pfad des Excel files in welches ich die Zellen kopieren will ist in strdateiname reingeschrieben oder? ------------------ The Man Who Knew Too Much Am Ende der Evolution steht ein schwarzes Loch und alle schwarzen Löcher die wir beobachten sind Kulturen die auch mit dem Atom gespielt haben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 30. Jun. 2011 16:39 <-- editieren / zitieren --> Unities abgeben: Nur für Sepsis
Hallo Sepsis, Zitat: Das ActiveWorkbook ist doch das erste Excel File oder?
Nein - bzw. nur dann, wenn es in der aktuellen Instanz nur ein Workbook gibt. Wie der Name schon sagt: Das ActiveWorkbook ist die aktive Arbeitsmappe ;). Im Falle des Öffnens: Die gerade geöffnete, so weit OK. Noch drei andere Dinge, die mir auffallen, ohne tiefer einzusteigen. Du schreibst Code: Sub DateiBearbeiten(strdateiname) Application.DisplayAlerts = False ActiveWorkbook.Sheets("Jänner").Range [AD90:AG399].Copy Workbooks.Open strdateiname strdateiname.Sheets("Eingabe").Range [A1:D310].xlPasteValues ActiveWorkbook.Close False End Sub
1. Solange Deine Routine nicht sauber läuft, kommentier' das DisplayAlerts aus! So bekommst Du ggf. schon frühzeitig Fehlermeldungen angezeigt, die sonst unterdrückt werden. Ich vermisse ein ... True für das Re-Aktivieren! ... False sollte IMHO nicht ohne Not eingesetzt werden.Wenn die Sache "rund" ist, kannst Du es ja wieder - falls erforderlich - mit reinnehmen. 2. Du kopierst einen Bereich (Range) mit mehreren Zellen Umfang. Wie ist es, wenn Du für das Einfügen nur eine einzige Zelle angibst (entweder über Range oder gar über Cells())? Klappt's dann? 3. Warum willst Du nicht speichern (ActiveWorkbook.Close False)? [Edit: strdateiname ist zum Zeitpunkt des Einfügens Dein ActiveWorkbook. So gewollt? /Edit] ------------------ DIN1055.de | Lastannahmen für Anwender [Diese Nachricht wurde von Paulchen am 30. Jun. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sepsis Mitglied
Beiträge: 399 Registriert: 19.03.2009
|
erstellt am: 30. Jun. 2011 16:58 <-- editieren / zitieren --> Unities abgeben:
Das Excelfile welches mir über Dateiauswahl in strdateiname geschrieben wird also quasi mein Ziel wird nie zum Aktiv Workbook, da es nicht geöffnet wird obwohl ich Workbooks.Open strdateiname eingebaut habe! Sprich er kopiert den Bereich ActiveWorkbook.Sheets("Jänner").Range [AD90:AG399].Copy in den Arbeitsspeicher und steigt dann mit besagtem Fehler aus, da die Bereiche mit der Zieldatei nicht Funktionieren! Ich muss exakt diesen Bereich kopieren und auch in das zweite Excel file in das Arbeitsblatt "Eingabe" in exakt diesen Bereich einfügen, da die Zieldatei wiederum für einen Import verwendet wird und die Formatierung stimmen muss. ------------------ The Man Who Knew Too Much Am Ende der Evolution steht ein schwarzes Loch und alle schwarzen Löcher die wir beobachten sind Kulturen die auch mit dem Atom gespielt haben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 30. Jun. 2011 17:17 <-- editieren / zitieren --> Unities abgeben: Nur für Sepsis
Zitat: da es (strdateiname) nicht geöffnet wird
Sicher? Wie sieht denn Dein strdateiname zur Laufzeit aus: Laufwerksangabe enthalten? Was verlangt der .Open-Befehl genau? Möglicherweise wird die Datei im Hintergrund oder Minimiert geöffnet? Zitat: wird nie zum Aktiv Workbook
Falls es denn mal geöffnet würde, wäre es das ActiveWorkbook! Bau' Dir mal ein Debug.Print ActiveWorkbook.Fullname (oder so ähnlich) ein, dann bekommst Du den Namen des ActiveWorkbook im Direktbereich ausgegeben. Zitat: da die Bereiche mit der Zieldatei nicht Funktionieren!
Glaube ich so nicht. Hast Du's mit einer Zelle als Ziel probiert? Warum sollte das nicht gehen - mit Excel-Bordmitteln klappt Copy & Paste doch auch, wenn Du einen Bereich kopierst und nur eine Zelle als Ziel eingibst . Zitat: Ich muss exakt diesen Bereich kopieren
Klar soweit. Zitat: und auch in das zweite Excel file in das Arbeitsblatt "Eingabe" in exakt diesen Bereich einfügen
Das sehe ich anders, wie bereits angedeutet;) . Zitat: und die Formatierung stimmen muss
Dann ist xlPasteValues aber nicht zielführend, denn Values=Werte, also ohne Formatierung. Hilft vielleicht ein "normales" Einfügen (nimmt Formate mit) und anschließend ein erneutes Paste mit "Values"? ------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sepsis Mitglied
Beiträge: 399 Registriert: 19.03.2009
|
erstellt am: 30. Jun. 2011 17:50 <-- editieren / zitieren --> Unities abgeben:
Mein Fehler will ja Werte ohne Formate kopieren! Ich bin kein VB Profi eventl. könntest du mir kurz erklären wie man einen String in der Laufzeit ansehen kann .
Zitat: Bau' Dir mal ein Debug.Print ActiveWorkbook.Fullname (oder so ähnlich) ein, dann bekommst Du den Namen des ActiveWorkbook im Direktbereich ausgegeben. [/B]
Bezugnehmen auf "Ich bin kein VB Profi" habe ich atm keinen Plan was du mir damit sagen willst ! Wie gesagt dieses Script habe ich gefunden ohne credits also kann ich den Ersteller nicht fragen. Ich bin mir nicht sicher ob über die Auswahl der Datei der Speicherort derselbigen auch richtig in strdateiname geschrieben werden bzw.: ob sich nicht da irgendwo ein Fehler eingeschlichen hat.
------------------ The Man Who Knew Too Much Am Ende der Evolution steht ein schwarzes Loch und alle schwarzen Löcher die wir beobachten sind Kulturen die auch mit dem Atom gespielt haben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 30. Jun. 2011 18:08 <-- editieren / zitieren --> Unities abgeben: Nur für Sepsis
Na, dann kommen wir der Sache ja näher ! Drück in der VBA-Umgebung Strg+G, das zeigt - in der Regel unten - den Direktbereich an. Du kannst auch zur Laufzeit mit dem Mauszeiger über die Variable gehen, ein PopUp gibt Infos. Tastatur: Starten und laufen lassen mit F5, Einzelschritt (sehr empfohlen) mit Taste F8, Haltepunkt setzen mit F9 (d. h. Ausführung per z. B. F5 stoppt an dieser Stelle im Code).
Code: Sub DateiBearbeiten(strdateiname) Debug.Print ActiveWorkbook.Fullname 'Application.DisplayAlerts = False '<-- Auskommentiert mit Hochkomma! ActiveWorkbook.Sheets("Jänner").Range [AD90:AG399].Copy 'Welches ist hier das aktive ;-)? Workbooks.Open strdateiname 'Und nun ist das aktive ein anderes! strdateiname.Sheets("Eingabe").Range("A1").xlPasteValues'?tuts das? ActiveWorkbook.Close False 'guck' in die Hilfe: Taste F1 mit Cursor in ActiveWorkbook End Sub
Jetzt kanns Du im Direktbereich schön den Namen mit Pfad lesen. Den Debug.Print... kommentierst Du später wieder aus, damit der Code nicht ausgeführt wird.Kopier' Dir den Code und teste mal. Ach so: Alles ungetestet meinerseits. Bin dann mal weg, viel Erfolg! ------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sepsis Mitglied
Beiträge: 399 Registriert: 19.03.2009
|
erstellt am: 01. Jul. 2011 08:01 <-- editieren / zitieren --> Unities abgeben:
Ja er schreibt nach der Auswahl der Datei den Pfad der Datei in den Direkt bereich rein! Frage warum schreibt er nur diesen Wert rein? Weil es meine einzige Variable in diesem Script ist? strAlleNamen hat doch auc einen Wert.... Frage dürfen im Pfad der Zieldatei Umlaute vorkommen ist dieses handicap aus vergangenen Zeiten noch immer ein Problem? Übrigends bricht er auch mit A1 den Vorgang mit "Objekt unterstützt diese Eigenschaft oder Methode nicht" ab. Beim Punkt Workbooks.Open strdateiname bricht er ab. Wenn ich mit Schritt für Schritt durchlaufen lasse. Sprich er kann den Pfad mit diesem Befehl nicht öffnen! ------------------ The Man Who Knew Too Much Am Ende der Evolution steht ein schwarzes Loch und alle schwarzen Löcher die wir beobachten sind Kulturen die auch mit dem Atom gespielt haben. [Diese Nachricht wurde von Sepsis am 01. Jul. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 01. Jul. 2011 08:23 <-- editieren / zitieren --> Unities abgeben: Nur für Sepsis
Guten Morgen! Hm... oben in Function Dateiauswahl() steht Multiselect auf True - warum auch immer können hier auch mehrere gewählt werden, stell das mal auf False. Zur Sache: Zitat: Frage warum schreibt er nur diesen Wert rein?
Debug.Print... . Lass Dir doch auch mal den Inhalt von strDateiname im Direktbereich ausgeben. Und dann guck in die Hilfe zu Workbook(s).Open - Dir reicht wohl das Öffnen einer Datei. Evtl. wird das ganze einfacher, wenn Du hier eine/zwei Dummy-Mappe(n) hochlädst: Sensible Daten vorher 'rausnehmen. Ich baue mir Dein(e) Sheet(s) hier sicher nicht nach ;-(. ------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sepsis Mitglied
Beiträge: 399 Registriert: 19.03.2009
|
erstellt am: 01. Jul. 2011 09:03 <-- editieren / zitieren --> Unities abgeben:
Du muss dir in Prinzip nur eine Excelmappe erstellen ein Blatt mit Jänner benennen einen Button einfügen diesem Button das Makro reinkopieren/hinterlegen und fertig! Den Bereich halt mit A10:A10 oder definieren, diesen Bereich mit igendwelchen Werten füllen ist ja im Prinzip egal. Damit sollte das Prinzip zum testen gehen. Ein zweites Excel file braucht man halt als Auswahl für die Zieldatei mit einem Blatt welches mit Eingabe benannt wurde. Den Befehl "Debug.Print ActiveWorkbook.Fullname" schreibe ich Quasi in jeden Sub, dann kann ich die Variablen beobachten? Ist eine Interessante Geschichte bin atm etwas knapp mit meiner Zeit werde ich bei Gelegenheit mal testen. ------------------ The Man Who Knew Too Much Am Ende der Evolution steht ein schwarzes Loch und alle schwarzen Löcher die wir beobachten sind Kulturen die auch mit dem Atom gespielt haben. [Diese Nachricht wurde von Sepsis am 01. Jul. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 01. Jul. 2011 09:38 <-- editieren / zitieren --> Unities abgeben: Nur für Sepsis
Zitat: Du muss dir in Prinzip nur eine Excelmappe erstellen...
Nein. Ich muss hier gar nix ; ich bin lediglich der Meinung, dass die Bereitschaft, Dir zu helfen, auch bei anderen steigt, wenn Du zeigst, dass es Dir wichtig ist und Du Dich bemühst. Dazu gehört IMHO eine Beispielmappe.Zum "Debuggen": Da gibt es noch deutlich mehr Möglichkeiten. Wenn Du mehr Zeit hast: Google Suche nach debug vba, ein Treffer - Abschnitt Werkzeuge für Debugger. ------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sepsis Mitglied
Beiträge: 399 Registriert: 19.03.2009
|
erstellt am: 01. Jul. 2011 11:59 <-- editieren / zitieren --> Unities abgeben:
Bitte A zum exportieren in B oder irgend ein File mit einem Blatt Eingabe die Dateiauswahl ist gefilter zu xslx also eventl. ändern falls die Office version niedriger ist ------------------ The Man Who Knew Too Much Am Ende der Evolution steht ein schwarzes Loch und alle schwarzen Löcher die wir beobachten sind Kulturen die auch mit dem Atom gespielt haben. [Diese Nachricht wurde von Sepsis am 01. Jul. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 01. Jul. 2011 13:25 <-- editieren / zitieren --> Unities abgeben: Nur für Sepsis
Code: Sub DateiBearbeiten(strdateiname) Dim wkb As Worksheet 'Aktive WS Dim dwkb As Worksheet 'Destination WS Dim AName 'aktive Mappe Dim ABlatt 'aktives Blatt Set wkb = ActiveWorkbook.ActiveSheet AName = ActiveWorkbook.Name ABlatt = ActiveSheet.Name Workbooks.Open strdateiname Set dwkb = ActiveWorkbook.ActiveSheet With dwkb Workbooks(AName).Worksheets(ABlatt).Range("A1:E20").Copy Destination:=.Range("A1") End With End Sub
try this...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sepsis Mitglied
Beiträge: 399 Registriert: 19.03.2009
|
erstellt am: 01. Jul. 2011 14:32 <-- editieren / zitieren --> Unities abgeben:
@Thomas Harmening There is an Error says "Object doesn't support this property or method"! I found some examples with ur "Destination Code" but it gets me always the same error..... The Copy code works and the open code works if i delete the rest, so there must be another reason. ------------------ The Man Who Knew Too Much Am Ende der Evolution steht ein schwarzes Loch und alle schwarzen Löcher die wir beobachten sind Kulturen die auch mit dem Atom gespielt haben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 04. Jul. 2011 16:37 <-- editieren / zitieren --> Unities abgeben: Nur für Sepsis
Hallo Sepsis, Thomas spricht Deutsch . An welcher Stelle genau bekommst Du den Fehler? Bei mir (Office 2010) läuft er sauber durch und fügt ein wie gewünscht. Thomas' Code, etwas modifiziert: Code: Sub DateiBearbeiten(strdateiname)Dim AName As String'aktive Mappe Dim ABlatt As String 'aktives Blatt AName = ThisWorkbook.Name If Not ThisWorkbook.Name = ActiveWorkbook.Name Then ThisWorkbook.Activate ABlatt = ActiveSheet.Name Debug.Print "Aktives WB VOR öffnen: " & ActiveWorkbook.FullName Workbooks.Open strdateiname Debug.Print "Aname: " & AName Debug.Print "ABlatt: " & ABlatt Debug.Print "Aktives WB NACH öffnen: " & ActiveWorkbook.FullName Workbooks(AName).Worksheets(ABlatt).Range("A1:E20").Copy Destination:=ActiveWorkbook.ActiveSheet.Range("A1") End Sub
Klar sind da noch ein paar mögliche Fehlerquellen drin. Von wo aus startest Du das Makro? Ich gehe davon aus, dass es in der Quellmappe liegt (ThisWorkbook).[Edit: Aktive Mappe abfragen schnell und schmutzig /Edit] ------------------ DIN1055.de | Lastannahmen für Anwender [Diese Nachricht wurde von Paulchen am 04. Jul. 2011 editiert.] [Diese Nachricht wurde von Paulchen am 04. Jul. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sepsis Mitglied
Beiträge: 399 Registriert: 19.03.2009
|
erstellt am: 04. Jul. 2011 16:47 <-- editieren / zitieren --> Unities abgeben:
Kann atm nicht testen, aber hast du meine Beispielmappen mit Office 2010 geöffnet und bei dir gehts? ------------------ The Man Who Knew Too Much Am Ende der Evolution steht ein schwarzes Loch und alle schwarzen Löcher die wir beobachten sind Kulturen die auch mit dem Atom gespielt haben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 04. Jul. 2011 18:30 <-- editieren / zitieren --> Unities abgeben: Nur für Sepsis
Hi, ne - ging nicht. Deine eckigen Klammern mag der Range nicht, da hilft F8. Nimm diesen - sicher ausbaufähigen Code: Private Sub Kopiererei()Dim strdateiname strdateiname = Dateiauswahl() If strdateiname <> "" Then DateiBearbeiten (strdateiname) End Sub Private Function Dateiauswahl() Dim tmpFile tmpFile = Application.GetOpenFilename(FileFilter:="Excel-Dateien (*.xlsx), *.xlsx", _ Title:="Datei auswählen", MultiSelect:=False) If tmpFile = False Then Dateiauswahl = "" Else Dateiauswahl = tmpFile End If End Function Private Sub DateiBearbeiten(strFilename) Dim wbSource As Workbook Dim wbPaste As Workbook Dim wsSource As Worksheet Dim wsPaste As Worksheet Set wbSource = ThisWorkbook Set wsSource = wbSource.ActiveSheet Debug.Print wsSource.Name Set wbPaste = Workbooks.Open(strFilename) Application.Wait 100 Set wsPaste = wbPaste.Sheets("Eingabe") wsSource.Range("A1:E20").Copy ' Destination:=wsPaste.Range("A1") wsPaste.Range("A1").PasteSpecial xlPasteValues wsPaste.Activate Set wbSource = Nothing Set wsSource = Nothing Set wbSource = Nothing Set wbPaste = Nothing End Sub
kopier in ein Modul, verknüpfe ihn mit den Buttons - oder siehe Anhang.------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sepsis Mitglied
Beiträge: 399 Registriert: 19.03.2009
|
erstellt am: 05. Jul. 2011 08:50 <-- editieren / zitieren --> Unities abgeben:
THX, Super funktioniert! Hatte in dem alten Script die Eckigenklammern auch entfernt funktioniert trotzdem nicht hmmm. Auf jeden dein Script geht. Im Zuge dessen ist mir noch was eingefallen, wie kann man Zeilen auslassen wenn die erste Zelle der Zeile im Bereich keinen INhalt hat? Sodas er keine leeren Zeilen ins Zielfile einfügt! Sprich wenn ich in der Mitte des Bereichs den Inhalt einer Zeile lösche soll er in Zielfile nur die Zeilen mit Inhalt einfügen. Ohne die leere Zeile dazwischen. Wobei er für dieses Kriterium nur auf die Erste Zelle einer Zeile schauen soll . ------------------ The Man Who Knew Too Much Am Ende der Evolution steht ein schwarzes Loch und alle schwarzen Löcher die wir beobachten sind Kulturen die auch mit dem Atom gespielt haben. [Diese Nachricht wurde von Sepsis am 05. Jul. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 05. Jul. 2011 09:34 <-- editieren / zitieren --> Unities abgeben: Nur für Sepsis
Moin, freut mich ! Zu Deiner Frage mit den "Zeilen löschen": Das ist ein völlig anderes Thema. Geht auch über VBA. Ich würde erstmal alles kopieren (und natürlich einfügen), einschließlich der leeren Zeilen. Dann - in einer gesonderten Routine - in der Zielmappe die leeren Zeilen rausnehmen lassen. Das ist zwar nicht allzu elegant, jeodch deutlich sicherer, weil Du Dir sonst ggf. die Quellmappe verbiegst. Dazu gibt es sicher hier im Forum und auch bei Google zahlreiche Hinweise. Dein Kriterium: If Cells(i, 1) = ""... (ungetestet), das ganze in einer Schleife über alle Zeilen der Zielmappe. Teste bitte selbst ein bisschen, bei konkreten Fragen geht's hier bestimmt weiter; Edit: Sinnvollerweise jedoch in einem anderen (eigenen) Thread?! /Edit ------------------ DIN1055.de | Lastannahmen für Anwender [Diese Nachricht wurde von Paulchen am 05. Jul. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sepsis Mitglied
Beiträge: 399 Registriert: 19.03.2009
|
erstellt am: 05. Jul. 2011 11:08 <-- editieren / zitieren --> Unities abgeben:
Jo Danke ------------------ The Man Who Knew Too Much Am Ende der Evolution steht ein schwarzes Loch und alle schwarzen Löcher die wir beobachten sind Kulturen die auch mit dem Atom gespielt haben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |