Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1404to1408
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
Daten von per Makro geöffneten Datei kopieren
02.02.2015 23:36:21
per
Hallo zusammen
Ich habe ein Problem bei einem bestehenden Makro zum Updaten einer Excel-Datei. Ich habe diesen Updater nicht selbst geschrieben. Auf jeden Fall brauche ich eine Funktion, die von der für das Update bestimmten Datei ein paar Daten (Sheets("Systemblatt").Range ("O2-O8")) in die Zieldatei kopiert. Ich habe das mal unten mit kursiv fett hereingeschrieben, es kommt aber immer ein Fehler. Weiss da jemand weiter, oder was der Fehler ist?
LG Elias
Private Sub CommandButton1_Click()
Dim wkbUpdate As Workbook
Dim wkbAlt As Workbook, wksData As Worksheet
Dim varAuswahl As Variant, arrSheet() As String, intI As Integer
On Error GoTo Beenden
'Dateiauswahldialog anzeigen
varAuswahl = Application.GetOpenFilename( _
Filefilter:="Excel(*.xls;*.xlsx;*.xlsm;*.xlsb),*.xls;*.xlsx;*.xlsm;*.xlsb", _
Title:="Bitte bestehende Datei auswählen")
If varAuswahl = False Then
MsgBox "Die Aktualisierung der bestehnden Datei wurde abgebrochen! " & vbLf _
& "Bitte Update nochmals starten!", _
vbInformation + vbOKOnly, "U P D A T E"
GoTo Beenden
End If
'Main-Datei-Objekte setzen
Set wkbUpdate = ActiveWorkbook
Application.ScreenUpdating = False
'alte Datei schreibgeschützt öffnen
Set wkbAlt = Application.Workbooks.Open(Filename:=varAuswahl, ReadOnly:=True)
With wkbAlt
'Sicherungskopie der alten Datei erstellen
.SaveCopyAs Filename:=.Path & "\" _
& "Update-Sicherheitskopie_" & Format(Now, "YYYY-MM-DD hhmmss") & .Name
i = Sheets.Count
For Z = 1 To i
Sheets(Z).Unprotect
Next Z
 .Sheets(6).Range("O2-O8").Select
Selection.Copy
wkbUpdate.Sheets("Systemblatt").Range ("O2-O8")
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
If .Sheets.Count >= 8 Then
'Namen der zu kopierende Blätter in Array sammeln
ReDim arrSheet(8 To .Sheets.Count)
For intI = 8 To .Sheets.Count
arrSheet(intI) = .Sheets(intI).Name
Next
.Sheets(arrSheet).Copy after:=wkbUpdate.Sheets(wkbUpdate.Sheets.Count)
Erase arrSheet
Else
MsgBox "Keine Datentabellen in Datei vorhanden"
End If
'Daten-Datei wieder schließen
.Close savechanges:=False
End With
Set wkbAlt = Nothing
wkbUpdate.Activate
Application.ScreenUpdating = True
With Application.FileDialog(msoFileDialogSaveAs)
.Title = "Bitte Update-Datei unter neuem Namen speichern"
.InitialFileName = "AktualisierteDatei"
.FilterIndex = 2 '1= xlsx (Standard), 2 = xlsm
If .Show = -1 Then
wkbUpdate.SaveAs Filename:=.SelectedItems(1), addtomru:=True
MsgBox "Datei wurde erfolgreich aktualisiert", _
vbInformation + vbOKOnly, "U P D A T E"
ActiveWorkbook.Sheets("Ansichtspinne").Activate
Sheets("Ansichtspinne").Unprotect
Sheets("Ansichtspinne").Range("A1").Select
Sheets("Ansichtspinne").Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
True
Me.Hide
For ii = 8 To Sheets.Count
Sheets(ii).Cells.Replace What:=" ", Replacement:="", LookAt:=xlWhole
Next ii
Else
MsgBox "Speichern der aktualisierten Datei wurde abgebrochen!"
End If
End With
Beenden:
With Err
Select Case .Number
Case 0 'alles OK
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
If Not wkbAlt Is Nothing Then wkbAlt.Close savechanges:=False
End Select
End With
Application.ScreenUpdating = True
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten von per Makro geöffneten Datei kopieren
02.02.2015 23:56:21
per
Hi Elias
erst mal:
Wenn mir jemand nur sagt, in seiner Datei erscheint ein Fehler, und mich dann fragt, ob ich weiß, was das für ein Fehler ist, muss ihc leider antworten:
"Nein, sorry, ich hab im Moment des Fehlers nicht auf deinen Monitor geschaut. Und so lange du mir nicht verrätst, was das für ein Fehler war - Fehlernr, Fehlertext - kann ich dir auch nicht weiterhelfen."
Aber 1x versuch ich es...
Kann es sein, dass in deinen Code-Konstrukt in dieser Zeile
wkbUpdate.Sheets("Systemblatt").Range ("O2-O8")
am Ende ein
.Select
fehlt?
Denn die nächste Zeile beginnt mit Selection...
Und aktuell würde ich sagen, diese Selection...zeile versucht die noch immer mit .Sheets(6).Range("O2-O8").Select markierten Zellen zu bearbeiten, die aber zuvor schon mit Selection.Copy in die Zwischenablage kopiert wurden.
Zusammengefasst:
Weil vielleicht besagtest .Select fehlt, wird zuerst
.Sheets(6).Range("O2-O8").Select
ausgeführt, dann
Selection.Copy
und die gleichen Zellen, also die kopierten Zellen mit
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
in sich selbst eingefügt.
Und das könnte zu (d)einem Fehler führen.
Hilfts?
Wenn nicht, zeig uns bitte per Upload alle Excel-Dateien, um dein Problem verstehen zu können.
Natürlich kannst du Bsp-Dateien erstellen und uns per Upload zeigen.
Wichtig ist nur, dass Bsp-Daten + der Code vorhanden ist.
Ciao
Thorsten

Anzeige
AW: Daten von per Makro geöffneten Datei kopieren
03.02.2015 08:05:17
per
Hi Thorsten
Vielen Dank erstmal für die Hilfe.
Das mit dem Select habe ich ausprobiert, es hat aber nichts gebracht.
Darum sind hier die Dateien:
1. Updater-Datei
https://www.herber.de/bbs/user/95503.xlsm
2. zu Updatende Datei
https://www.herber.de/bbs/user/95502.xlsm
Das fehlerhafte Makro ist in der Datei 95503, in der UserForm8.
Im Updater geht es darum, dass in der zu updatenden Datei (95502) die Sheets 8-Ende in die neue Datei (95503) kopiert werden. Dies sind alles die Rohdaten. Jetzt habe ich aber gemerkt, dass beim Updaten die Kategorien verloren gehen. Diese will jetzt per Copy - Paste einfügen.
Vielen Dank für die Hilfe.
Beste Grüsse
Elias

Anzeige
AW: Daten von per Makro geöffneten Datei kopieren
03.02.2015 10:27:12
per
Hi Elias
erst mal (das hab ich aber auch nach erst ca 30 Min testen gemerkt :-) ) sind im Code 2 Syntax- oder auch Flüchtigkeitsfehler, und zwar hier:

.Sheets(6).Range("O2-O8").Select
Selection.Copy
wkbUpdate.Sheets("Systemblatt").Range ("O2-O8")
in VBA "heißt" es nicht O2-O8, sondern O2:O8
Ein Range, der sich über mehrere Zellen erstreckt, wird also nicht mit einem - angegeben, sondern MUSS mit einem : angegeben sein.
Wie gesagt, ich brauchte auch einige Zeit, um den Fehler zu sehen ;-)
Das ist aber noch nicht alles.
So, wie dein VBA-Code "gestrickt" ist...so viele Selects + Activates...müssten zuerst alle Sheets Activated sein, bevor du Zellen mit Select ansprichst.
Einfacher geht es vielleicht so:
Ändere diesen Code

.Sheets(6).Range("O2-O8").Select
Selection.Copy
wkbUpdate.Sheets("Systemblatt").Range("O2-O8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

um in

.Sheets(6).Range("O2:O8").Copy wkbUpdate.Sheets("Systemblatt").Range("O2:O8")

So kommt es zumindest hier bei mir nicht mehr zu dem Fehler, der zuvor durch dein Code ausgelöst wurde.
Das ist aber leider noch nicht alles.
Wenn denn die Codezeilen, die vorher Fehler verursachten, nun fehlerfrei durchlaufen, kommt es an einer anderen Stelle - da werden im Code Bereichsnamen vergeben - zu eben zwei "Kollisionen", weil die per Code zu vergebenen Bereichsnamen schon vorhanden sind.
Das hab ich nicht geändert, weil ich nicht weiß, was ich ändern soll.
Da musst du dich also noch drum kümmern.
Hilfts denn erst mal mit meiner Code-Änderung?
Ciao
Thorsten

Anzeige
AW: Daten von per Makro geöffneten Datei kopieren
04.02.2015 22:56:57
per
Woooooowww!!! Danke! Bei mir funktionierts tadellos :-)

202 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige