Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
972to976
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
972to976
972to976
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Daten kopieren - @beverly

Daten kopieren - @beverly
05.05.2008 10:58:12
Stephan
Hallo Beverly & Co.,
ich habe mal wieder folgendes Problem:
in einer geschlossenen Datei, Name: "04.2008", Pfad: H:\MDE geprüft\2008\Artikellaufzeiten\3.5A\Monat soll im Tabellenblatt "Tabelle1" in Spalte A, geprüft werden, ob ein Datum (z. B. "29.04.2008") bereits vorhanden ist. Falls ja, MsgBox "Datensatz bereits vorhanden", sonst soll der Bereich B2:AF30 des aktiven Tabellenblattes ("PD`s") ohne Leerzeilen kopiert und in Spalte A in der letzten freien Zeile eingefügt werden.
Die Datei "04.2008" soll anschließend (unter gleichen Namen) gespeichert und wieder geschlossen werden. Das Datum steht in Zelle A37 des aktiven Tabellenblattes ("PD`s").
Vielleicht kannst Du mir mal wieder auf die Sprünge helfen.....Vielen Dank schon mal im Voraus!!! Grüße, Stephan

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten kopieren - @beverly
05.05.2008 11:45:06
Beverly
Hi Stephan,
etwas eintragen geht nur, wenn die Arbeitsmappe geöffnet wird. Das kann man aber "unsichtbar" im Hintergrund machen, indem man an den Beginn des Codes Application.ScreenUpdating = False setzt (am Ende dann wieder auf True). Zeichne den Code zum Öffnen, Speichern und schließen mit dem Makrorecorder auf.
Was das Suchen des Datums betrifft, kann man den Befehl Find verwenden. Dazu müsste man aber wissen, ob die Spalte A benutzerdefiniert formatiert ist oder nicht.


AW: Daten kopieren - @beverly
05.05.2008 12:06:52
Stephan
Hi Beverly,
Vielen Dank für Deine schnelle Antwort!! Die Spalte A im TabBlatt ("PD´s") ist mit Datum (*14.03.2001)formatiert. Also nicht benutzerdefiniert. Die Spalte A in der Zieldatei ("04.2008") ist zu Anfang unformatiert. Das ändert sich wahrscheinlich nach dem ersten Kopiervorgang. Ist aber auch nicht weiter tragisch. Den Rest werde ich, wie du vorgeschlagen hast, mit dem Makrorecorder aufzeichnen. Es soll halt hier so eine Art Monatsarchiv entstehen. LG, Stephan

Anzeige
AW: Daten kopieren - @beverly
05.05.2008 13:26:09
Stephan
Hallo Beverly,
unten mein aktuelles Makro. Ab Range("B2:AF30").Select beginnt das mit dem Makrorecorder erfasste Makro. Kannnst du mir bei der Find-Methode vielleicht noch weiterhelfen? Vielen Dank!! Gruß, Stephan

Sub Monatsdatei_speichern()
' Monatsdatei_speichern Makro
Dim Datum As String
Dim Linie As String
Dim i As Integer
Dim Monat As String
Monat = ActiveSheet.Range("A37", Right(" & Datum & ", 1, Len(Datum) - 11))
Datum = ActiveSheet.Range("A37").Value
Linie = ActiveSheet.Range("A39").Value
i = MsgBox("Datei [" & Datum & "] ist nach Speicherung nicht mehr editierbar." & Chr(10) & " _
Wollen Sie wirklich speichern?", vbOKCancel + vbExclamation)
'falls der "Abbrechen" Button gedrückt wird, Prozedur abbrechen
If i = 2 Then
Exit Sub
End If
If i = 1 Then
Application.ScreenUpdating = False
Workbooks.Open Filename:="H:\MDE geprüft\2008\Artikellaufzeiten\" & Linie & "\Monat\" &  _
Monat & ".xls"
Worksheet("Tabelle1").Activate
Find(" & Datum & ").Range ("A1:A300")
Range("B2:AF30").Select
Selection.Copy
Workbooks.Open Filename:="H:\MDE geprüft\2008\Artikellaufzeiten\" & Linie & "\Monat\" &  _
Monat & ".xls"
ActiveSheet.Paste
ActiveWorkbook.Save
ActiveWindow.Close
Range("A2").Select
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub


Anzeige
AW: Daten kopieren
05.05.2008 13:34:51
Beverly
Hi Stephan,
mir ist nur der Tabellenaufbau der Arbeitsmappe, in die kopiert werden soll, nicht ganz klar. In Spalte A steht das Datum (s. dein erster Beitrag). Nun soll B2:F30 nach Spalte A kopiert werden - stehen in Spalte B ebenfalls Datumswerte? Andernfalls werden die Datumswerte in A doch überschrieben.

Sub monatsarchiv()
Dim loLetzte As Long
Dim raZelle As Range
Application.ScreenUpdating = False
Workbooks.Open Filename:="C:\Test\Mappe5.xls"
With Workbooks("Mappe5.xls").Worksheets("Tabelle1")
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count)
Set raZelle = .Range("A1:A" & loLetzte).Find(ThisWorkbook.Worksheets("PD's").Range("A37" _
), lookat:=xlWhole)
If raZelle Is Nothing Then Range("B2:AF30").Copy .Cells(loLetzte + 1, 1)
End With
Application.DisplayAlerts = False
Workbooks("Mappe5.xls").Close True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub




Anzeige
AW: Daten kopieren
05.05.2008 14:33:00
Stephan
Hi Beverly,
vielen Dank zunächst für deine Bemühungen!!!
Die Arbeitsmappe (Name: "04.2008"), in die kopiert werden soll, ist zum jetzigen Zeitpunkt komplett leer. Diese Ziel-Arbeitsmappe ("Tabelle1", Spalte A1) soll mit den Daten aus der geöffneten Arbeitsmappe ("Überprüfung MDE", Tabellenblatt "PD´S", Bereich B2:AF30) befüllt werden.
Ich habe also in Zelle A37, TabBlatt "PD`s" der geöffneten Arbeitsmappe "Überprüfung MDE" ein Datum stehen. In Spalte A der Ziel-Arbeitsmappe ("04.2008") soll nun geprüft werden, ob dieses Datum schon vorhanden ist. Falls ja, MsgBox "Datensatz schon vorhanden", falls nein soll der Bereich B2:AF30 (ohne Leerzeilen) kopiert und in die letzte freie Zeile (in diesem Fall ja A1, da TabBlatt ja noch leer) in Spalte A der Ziel-Arbeitsmappe eingefügt/untereinander weggeschrieben werden.
Zur Info: im kopierten Bereich B2:AF30 ist jeweils in B2, B3, B4.....usw. ein Datum hinterlegt. Dieses Datum steht in der Ziel-Arbeitsmappe nach dem ersten Kopiervorgang in Spalte A1, A2.....usw. Dort soll dann, wie du vorhin vorgeschlagen hast, durch "Find" nach dem Datum aus A37 gesucht werden
Also einfach gesagt: ich habe eine geöffnete Datei A mit einem Datum in Zelle A37 und eine Datei B die momentan noch leer ist. Anhand des Datums soll in Datei B, Spalte A geprüft werden, ob dieses Datum bereits vorhanden ist. Falls nein, in Datei A den Bereich B2:AF30 kopieren und in Datei B in die letzte freie Zeile in Spalte A einfügen, falls ja, MsgBox "Datensatz bereits vorhanden" und Exit Sub. Ich hoffe, ich konnte es einigermaßen verständlich beschreiben. Grüße, Stephan

Anzeige
AW: Daten kopieren
05.05.2008 14:53:25
Beverly
Hi Stephan,
wenn Spalte B auch Datumswerte sind, dann ist es Ok.

Sub monatsarchiv()
Dim loLetzte As Long
Dim raZelle As Range
Application.ScreenUpdating = False
Workbooks.Open Filename:="C:\Test\Mappe5.xls"
With Workbooks("Mappe5.xls").Worksheets("Tabelle1")
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count)
Set raZelle = .Range("A1:A" & loLetzte).Find(ThisWorkbook.Worksheets("PD's").Range("A37" _
), lookat:=xlWhole)
If raZelle Is Nothing Then
ThisWorkbook.Worksheets("PD's").Range("B2:AF30").Copy .Cells(loLetzte + 1, 1)
Application.DisplayAlerts = False
Workbooks("Mappe5.xls").Close True
Application.DisplayAlerts = True
Else
MsgBox "Datensatz bereits vorhanden"
End If
End With
Application.ScreenUpdating = True
End Sub


PS: Die Beschreibung war sehr gut und verständlich :-).



Anzeige
AW: Daten kopieren
05.05.2008 15:33:20
Stephan
Hi Beverly,
mal wieder vielen Dank für deine Bemühungen! Anbei das (angepasste) Script. Er bricht allerdings schon bei "Monat = ActiveSheet.Range("A37", Right("A37", 1, -7))" ab und wirft die Fehlermeldung "Fehler beim kompilieren - Falsche Anzahl an Argumenten oder ungültige Zuweisung einer Eigenschaft" aus und markiert mir "Right". Wahrscheinlich habe ich einen Fehler beim "einkürzen" der Variable "Monat" gemacht. Das Datum in Zelle A37 sieht so aus: 29.04.2008 und er soll ja nur nach 04.2008.xls suchen. Wie muss ich das denn sonst begrenzen? Vielleicht mit Left oder Mid? Vielen Dank! Gruß, Stephan

Sub monatsarchiv_neu()
Dim loLetzte As Long
Dim raZelle As Range
Dim Datum As String
Dim Linie As String
Dim i As Integer
Dim Monat As String
Monat = ActiveSheet.Range("A37", Right("A37", 1, -7))
Datum = ActiveSheet.Range("A37").Value
Linie = ActiveSheet.Range("A39").Value
i = MsgBox("Datei [" & Datum & "] ist nach Speicherung nicht mehr editierbar." & Chr(10) & " _
Wollen Sie wirklich speichern?", vbOKCancel + vbExclamation)
Application.ScreenUpdating = False
Workbooks.Open Filename:="H:\MDE geprüft\2008\Artikellaufzeiten\" & Linie & "\Monat\" &  _
Monat & ".xls"
With Workbooks(" & Monat & .xls").Worksheets("Tabelle1")
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count)
Set raZelle = .Range("A1:A" & loLetzte).Find(ThisWorkbook.Worksheets("PD's").Range("A37" _
), lookat:=xlWhole)
If raZelle Is Nothing Then
ThisWorkbook.Worksheets("PD's").Range("B2:AF30").Copy .Cells(loLetzte + 1, 1)
Application.DisplayAlerts = False
Workbooks(" & Monat & .xls").Close True
Application.DisplayAlerts = True
Else
MsgBox "Datensatz bereits vorhanden"
End If
End With
Application.ScreenUpdating = True
End Sub


Anzeige
AW: Daten kopieren
05.05.2008 17:03:00
Beverly
Hi Stephan,
schau dir auch mal in der Hilfe die Beschreibung zur Funktion Right an.

Monat = Right(ActiveSheet.Range("A37"), 7)


Aktiviere außerdem im VBA-Editor unter Extras -&gt Optionen -&gt Reiter: Editor die Option "Automatische QuickInfo".
VBA-Hilfe: Automatische QuickInfo - Zeigt bei der Eingabe Informationen zu Funktionen und deren Parametern an.



AW: Daten kopieren
05.05.2008 18:56:28
Stephan
Hi Beverly,
Danke für deine Antwort und dafür, dass Du so viel Geduld mit mir hast!!! Habe den String entsprechend geändert und Quickinfos aktiviert. Jetzt bekomme ich allerdings die Fehlermeldung "Fehler beim kompilieren - Projekt oder Bibliothek nicht gefunden" und er markiert mir "Right". Gruß, Stephan

Sub monatsarchiv_neu()
Dim loLetzte As Long
Dim raZelle As Range
Dim Datum As String
Dim Linie As String
Dim i As Integer
Dim Monat As String
Monat = Right(ActiveSheet.Range("A37"), 7)
Datum = ActiveSheet.Range("A37").Value
Linie = ActiveSheet.Range("A39").Value
i = MsgBox("Datei [" & Datum & "] ist nach Speicherung nicht mehr editierbar." & Chr(10) & " _
Wollen Sie wirklich speichern?", vbOKCancel + vbExclamation)
Application.ScreenUpdating = False
Workbooks.Open Filename:="H:\MDE geprüft\2008\Artikellaufzeiten\" & Linie & "\Monat\" &  _
Monat & ".xls"
With Workbooks(" & Monat & .xls").Worksheets("Tabelle1")
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count)
Set raZelle = .Range("A1:A" & loLetzte).Find(ThisWorkbook.Worksheets("PD's").Range("A37" _
), lookat:=xlWhole)
If raZelle Is Nothing Then
ThisWorkbook.Worksheets("PD's").Range("B2:AF30").Copy .Cells(loLetzte + 1, 1)
Application.DisplayAlerts = False
Workbooks(" & Monat & .xls").Close True
Application.DisplayAlerts = True
Else
MsgBox "Datensatz bereits vorhanden"
End If
End With
Application.ScreenUpdating = True
End Sub


Anzeige
AW: Daten kopieren
06.05.2008 09:29:00
Stephan
Hi Beverly,
vielen Dank für den Link! Jetzt erkennt er "Right" wieder.
Das Makro läuft soweit, allerdings bekomme ich bei Workbooks(" & Monat & .xls").Close den Laufzeitfehler 9 ausgeworfen. Das bedeutet ja anscheinend, dass er irgend etwas nicht erkennt. Muss "Workbooks" vielleicht noch deklariert werden? Und wenn ja, als was? Er öffnet zwar die entsprechende Datei und fügt auch den kopierten Bereich ein (allerdings erst ab Zelle A2). Nur er schließt sie halt wieder nicht. Gruß, Stephan

Sub monatsarchiv_neu()
Dim loLetzte As Long
Dim raZelle As Range
Dim Datum As String
Dim Linie As String
Dim i As Integer
Dim Monat As String
Monat = Right(ActiveSheet.Range("A37"), 7)
Datum = ActiveSheet.Range("A37").Value
Linie = ActiveSheet.Range("A39").Value
i = MsgBox("Datei [" & Datum & "] ist nach Speicherung nicht mehr editierbar." & Chr(10) & " _
Wollen Sie wirklich speichern?", vbOKCancel + vbExclamation)
Application.ScreenUpdating = False
Workbooks.Open Filename:="H:\MDE geprüft\2008\Artikellaufzeiten\" & Linie & "\Monat\" &  _
Monat & ".xls"
With Worksheets("Tabelle1")
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count)
Set raZelle = Range("A1:A" & loLetzte).Find(ThisWorkbook.Worksheets("PD`s").Range("A37") _
, lookat:=xlWhole)
If raZelle Is Nothing Then
ThisWorkbook.Worksheets("PD`s").Range("B2:AF30").Copy .Cells(loLetzte + 1, 1)
Application.DisplayAlerts = False
Workbooks(" & Monat & .xls").Close
Application.DisplayAlerts = True
MsgBox "Daten wurden gespeichert!"
Else
MsgBox "Datensatz bereits vorhanden"
End If
End With
Application.ScreenUpdating = True
End Sub


Anzeige
AW: Daten kopieren
06.05.2008 11:30:00
Beverly
Hi Stephan,
es muss heißen

Workbooks(Monat & ".xls").Close




AW: Daten kopieren
06.05.2008 12:28:30
Stephan
Hallo Beverly,
vielen Dank für Deinen Tipp!! Die Kombination hatte ich noch nicht ausprobiert und wäre auch nie drauf gekommen;-) Ich habe hinter Workbooks(Monat & ".xls").Close noch ein SaveChanges:=True gesetzt, damit die kopierten Werte auch gespeichert werden und es funktioniert!!!
Das Einzige, was er noch macht, was er aber nicht machen sollte, ist: Wenn ich versuche den gleichen Datensatz erneut abzuspeichern, fügt er mir diesen auch erneut unter den bereits vorhandenen (gleichen!) in Spalte A ein. Das sollte ja eigentlich durch die "Find"-Funktion und die anschließende MsgBox "Datensatz bereits vorhanden" verhindert werden. Was kann man da noch machen? Vielen, vielen Dank!! Grüße, Stephan
aktueller Code:

Sub monatsarchiv_neu()
Dim loLetzte As Long
Dim raZelle As Range
Dim Datum As String
Dim Linie As String
Dim i As Integer
Dim Monat As String
Monat = Right(ActiveSheet.Range("A37"), 7)
Datum = ActiveSheet.Range("A37").Value
Linie = ActiveSheet.Range("A39").Value
i = MsgBox("Datei [" & Datum & "] ist nach Speicherung nicht mehr editierbar." & Chr(10) & " _
Wollen Sie wirklich speichern?", vbOKCancel + vbExclamation)
If i = 2 Then
Exit Sub
End If
If i = 1 Then
Application.ScreenUpdating = False
Workbooks.Open Filename:="H:\MDE geprüft\2008\Artikellaufzeiten\" & Linie & "\Monat\" &  _
Monat & ".xls"
With Worksheets("Tabelle1")
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count)
Set raZelle = Range("A1:A" & loLetzte).Find(ThisWorkbook.Worksheets("PD`s").Range("A37") _
, lookat:=xlWhole)
If raZelle Is Nothing Then
ThisWorkbook.Worksheets("PD`s").Range("B2:AF30").Copy .Cells(loLetzte + 1, 1)
Application.DisplayAlerts = False
Workbooks(Monat & ".xls").Close SaveChanges:=True
Application.DisplayAlerts = True
MsgBox "Daten wurden gespeichert!"
Else
MsgBox "Datensatz bereits vorhanden"
End If
End With
Application.ScreenUpdating = True
End If
End 

Sub

Anzeige
AW: Daten kopieren
06.05.2008 14:07:17
Beverly
Hi Stephan,
das stand auch schon in meinem Code, nur dass ich SaveChanges:= weggelassen habe.
Ich habe jetzt deinen Code 1:1 übernommen (nur den Speicherpfad habe ich angepasst) und bei mir wird nur ein Mal übertragen. Wurde der Daternbereich bereits kopiert, erscheint die 2. MsgBox "Datensatz bereits gespeichert"

Sub monatsarchiv_neu()
Dim loLetzte As Long
Dim raZelle As Range
Dim Datum As String
Dim Linie As String
Dim i As Integer
Dim Monat As String
Monat = Right(ActiveSheet.Range("A37"), 7)
Datum = ActiveSheet.Range("A37").Value
Linie = ActiveSheet.Range("A39").Value
i = MsgBox("Datei [" & Datum & "] ist nach Speicherung nicht mehr editierbar." & Chr(10) &  _
_
" Wollen Sie wirklich speichern?", vbOKCancel + vbExclamation)
If i = 2 Then Exit Sub
If i = 1 Then
Application.ScreenUpdating = False
'    Workbooks.Open Filename:="H:\MDE geprüft\2008\Artikellaufzeiten\" & Linie & "\Monat\" & _
Monat & ".xls"
Workbooks.Open Filename:="C:\Test\" & Monat & ".xls"
With Worksheets("Tabelle1")
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp). _
Row, .Rows.Count)
Set raZelle = Range("A1:A" & loLetzte).Find(ThisWorkbook.Worksheets("PD's").Range(" _
A37"), lookat:=xlWhole)
If raZelle Is Nothing Then
ThisWorkbook.Worksheets("PD's").Range("B2:AF30").Copy .Cells(loLetzte + 1, 1)
Application.DisplayAlerts = False
Workbooks(Monat & ".xls").Close True
Application.DisplayAlerts = True
MsgBox "Daten wurden gespeichert!"
Else
MsgBox "Datensatz bereits vorhanden"
End If
End With
Application.ScreenUpdating = True
End If
End Sub




AW: Daten kopieren
06.05.2008 15:43:29
Stephan
Hallo Beverly,
ach so, ich wusste nicht, dass das True alleine hinter dem Close als Speicherbefehl ausreicht. Wieder was dazu gelernt;-)
Ich habe beide Codes jetzt mal genau miteinander verglichen, weil er trotzdem noch doppelt speichert. Aber ich kann keinen Unterschied erkennen. Ich habe mal die Zieldatei (hier: "05.2008") mit hochgeladen. Der gelb markierte Teil ist ein Datensatz und wurde korrekt eingefügt. Beim zweiten Speicherversuch hat er mir den gleichen erneut darunter gesetzt. Ich wüsste jetzt nicht mehr, woran das liegen könnte. Vielleicht hat das ja was mit der Excel Version zu tun (ich habe 2003) oder irgendwelche Verweise müssen noch aktiviert werden....... Vielen Dank!! Grüße, Stephan
https://www.herber.de/bbs/user/52153.xls

Sub monatsarchiv_neu()
Dim loLetzte As Long
Dim raZelle As Range
Dim Datum As String
Dim Linie As String
Dim i As Integer
Dim Monat As String
Monat = Right(ActiveSheet.Range("A37"), 7)
Datum = ActiveSheet.Range("A37").Value
Linie = ActiveSheet.Range("A39").Value
i = MsgBox("Datei [" & Datum & "] ist nach Speicherung nicht mehr editierbar." & Chr(10) & " _
Wollen Sie wirklich speichern?", vbOKCancel + vbExclamation)
If i = 2 Then Exit Sub
If i = 1 Then
Application.ScreenUpdating = False
Workbooks.Open Filename:="H:\MDE geprüft\2008\Artikellaufzeiten\" & Linie & "\Monat\" &  _
Monat & ".xls"
With Worksheets("Tabelle1")
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count)
Set raZelle = Range("A1:A" & loLetzte).Find(ThisWorkbook.Worksheets("PD`s").Range(" A37" _
), lookat:=xlWhole)
If raZelle Is Nothing Then
ThisWorkbook.Worksheets("PD`s").Range("B2:AF30").Copy .Cells(loLetzte + 1, 1)
Application.DisplayAlerts = False
Workbooks(Monat & ".xls").Close SaveChanges:=True
Application.DisplayAlerts = True
MsgBox "Daten wurden gespeichert!"
Else
MsgBox "Datensatz bereits vorhanden"
End If
End With
Application.ScreenUpdating = True
End If
End Sub


AW: Daten kopieren
06.05.2008 16:07:00
Beverly
Hi Stephan,
da müsstest du aber auch die Arbeitsmappe mit dem Code hochladen, damit man die Ausgangssituation kennt.


AW: Daten kopieren
06.05.2008 16:47:00
Stephan
Hi Beverly,
anbei der Link zur Arbeitsmappe. In das TabBlatt "PD`s", B2:AF30 werden die Daten über den Start-Button im TabBlatt "Start" hochgeladen und nach Bearbeitung über das Disketten-Symbol im Blatt "PD`s" "als Monatsdatei in die entsprechenden Dateien gespeichert. Das dazugehörige Makro findest Du im Modul6. Ich hoffe, ich konnte Dir damit weiterhelfen. Ich musste die Datei etwas stutzen, da ja nur bis ca. 300kb hochgeladen werden kann. An dieser Stelle mal wieder ein dickes Dankeschön!!! Gruß, Stephan
https://www.herber.de/bbs/user/52155.xls

AW: Daten kopieren
06.05.2008 21:33:00
Beverly
Hi Stephan,
es wäre schon gut gewesen, wenn da auch wenigstens ein paar Daten (zumindest in Spalte B) dringestanden hätten. So kann ich nur allgemein schreiben: der Bereich wird immer dann kopiert, wenn das Datum aus A37 nicht in Spalte A der Monatsdatei gefunden wird - so ist der Code aufgebaut.
In deinen Beispiel steht in A37 09.04.2008, in der Monatdatei gibt es in Spate A dieses Datum jedoch nicht (es steht nur 06.05.2008 drin), ergo - es wird kopiert. Und das wird immer wieder so sein, solange in Spalte B der Tabelle "PD's" kein Datum steht, welches dem in A37 entspricht.


AW: Daten kopieren
07.05.2008 10:42:00
Beverly
Hi Stephan,
ich habe es jetzt in Excel2007 und 2002 getestet (das Einzige, was ich verändert habe ist der Pfad) - bei mir erscheint die MsgBox, dass der Datensatz schon vorhanden ist.
Da die Monats-Arbeitsmappe auch wieder geschlossen werden muss wenn der Datensatz schon vorhanden ist, solltest du den Code wie folgt verändern:

Sub monatsarchiv_neu()
Dim loLetzte As Long
Dim raZelle As Range
Dim Datum As String
Dim Linie As String
Dim i As Integer
Dim Monat As String
Monat = Right(ActiveSheet.Range("A37"), 7)
Datum = ActiveSheet.Range("A37").Value
Linie = ActiveSheet.Range("A39").Value
i = MsgBox("Datei [" & Datum & "] ist nach Speicherung nicht mehr editierbar." & Chr(10) & " _
Wollen Sie wirklich speichern?", vbOKCancel + vbExclamation)
If i = 2 Then Exit Sub
If i = 1 Then
Application.ScreenUpdating = False
'    Workbooks.Open Filename:="H:\MDE geprüft\2008\Artikellaufzeiten\" & Linie & "\Monat\" &  _
Monat & ".xls"
Workbooks.Open Filename:="C:\Test\" & Linie & "\Monat\" & Monat & ".xls"
        With Worksheets("Tabelle1")
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp). _
Row, .Rows.Count)
Set raZelle = Range("A1:A" & loLetzte).Find(ThisWorkbook.Worksheets("PD`s").Range("  _
A37"), lookat:=xlWhole)
If raZelle Is Nothing Then
ThisWorkbook.Worksheets("PD`s").Range("B2:AF30").Copy .Cells(loLetzte + 1, 1)
MsgBox "Daten wurden gespeichert!"
Else
MsgBox "Datensatz bereits vorhanden"
End If
End With
Application.DisplayAlerts = False
Workbooks(Monat & ".xls").Close SaveChanges:=True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End If
End Sub




AW: Daten kopieren
07.05.2008 11:41:00
Stephan
Hallo Beverly,
Danke für Deine Bemühungen und die Geduld mit mir;-)
Anbei nochmal die zwei Dateien. Habe den Code so übernommen und beim zweiten betätigen des "als Monatsdatei speichern" Buttons hat er den Datensatz in der Datei "05.2008" erneut unter den zuerst gespeicherten eingefügt. Könnte es vielleicht an der Formatierung des Datums oder an meiner Excel-Version (2003 mit Servicepack3) liegen?
https://www.herber.de/bbs/user/52179.xls
https://www.herber.de/bbs/user/52180.xls

Sub monatsarchiv_neu()
Dim loLetzte As Long
Dim raZelle As Range
Dim Datum As String
Dim Linie As String
Dim i As Integer
Dim Monat As String
Monat = Right(ActiveSheet.Range("A37"), 7)
Datum = ActiveSheet.Range("A37").Value
Linie = ActiveSheet.Range("A39").Value
i = MsgBox("Datei [" & Datum & "] ist nach Speicherung nicht mehr editierbar." & Chr(10) & " _
_
Wollen Sie wirklich speichern?", vbOKCancel + vbExclamation)
If i = 2 Then Exit Sub
If i = 1 Then
Application.ScreenUpdating = False
Workbooks.Open Filename:="H:\MDE geprüft\2008\Artikellaufzeiten\" & Linie & "\Monat\" &  _
Monat & ".xls"
'  Workbooks.Open Filename:="C:\Test\" & Linie & "\Monat\" & Monat & ".xls"
With Worksheets("Tabelle1")
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp). _
Row, .Rows.Count)
Set raZelle = Range("A1:A" & loLetzte).Find(ThisWorkbook.Worksheets("PD`s").Range("  _
_
A37"), lookat:=xlWhole)
If raZelle Is Nothing Then
ThisWorkbook.Worksheets("PD`s").Range("B2:AF30").Copy .Cells(loLetzte + 1, 1)
MsgBox "Daten wurden gespeichert!"
Else
MsgBox "Datensatz bereits vorhanden"
End If
End With
Application.DisplayAlerts = False
Workbooks(Monat & ".xls").Close SaveChanges:=True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End If
End Sub


AW: Daten kopieren
07.05.2008 17:29:00
Beverly
Hi Stephan,
wenn du im jetzigen Zustand den Code im Einzelschrittmodus ablaufen lässt und den Cursor auf die Variable Datum in der Zeile Datum = ActiveSheet.Range("A37").Value setzt, dann siehst du "07.05.2008" es müsste aber angezeigt werden 07.05.2008. Ergo - deine Zelle A37 ist als Text formatiert und deshalb wird das Datum nicht gefunden, weil halt nach dem Text "07.05.2008" gesucht wird.
Eine Formatierung als Text lässt sich nicht zurücksetzen, auch wenn man ein anderes Format einstellt. Mache folgendes: schreibe eine 1 in eine noch nicht formatierte Zelle (am besten in einer neuen Tabelle), kopiere diese Zelle, markiere A37 -&gt Einfügen -&gt Inhalte Einfügen -&gt Multiplizieren. Dann sollte der auch Code funktioneren.
Übrigens: .Value kannst du in deinem Code weglassen, weil dies eine Standardeigenschaft iat, wenn man den Inhalt einer Zelle ausliest.


Danke!!!
08.05.2008 10:07:00
Stephan
Hi Beverly,
du hattest Recht! Das "Datum" in A37 wurde nämlich per Makro aus der TextBox der UserForm1 übernommen und somit als Text erkannt, obwohl es als Datum formatiert war. Ich habe dieses Makro nun gelöscht, da er ja bei jedem neuen Datenabruf A37 wieder mit dem aktuellen TextBox-Eintrag (halt nur in Datumsformat) überschrieben hat und den Datensatz deswegen beliebig oft speicherte.
Statt Makro habe ich jetzt in A37 einen einfachen Verweis (=A128) eingefügt, in dem auf ein anderes TabBlatt mit dem per Makro eingefügten Datum verwiesen wird. Anschließend habe ich deinen Tipp in Form eines kleinen Makros (siehe fett gedruckt) vorangesetzt und es funktioniert!!
Aber auf die Sache mit der 1 und multiplizieren wäre ich nie gekommen!! Anscheinend taucht dieses Problem aber wohl öfter auf, oder woher wußtest Du das?
An dieser Stelle vielen, vielen Dank und ein dickes "Respekt" für Deine Bemühungen und dafür, dass Du es so geduldig mit mir ausgehalten hast!!;-)
Vielleicht darf ich Dich noch mit einem anderem Problem "belästigen";-). Aber dazu werde ich heute hier im Forum noch einen neuen Beitrag schreiben. Wenn Du mal Zeit und Lust hast, kannst Du dort ja vielleicht mal reinschauen. Grüße, Stephan

Sub monatsarchiv_neu()
'!!!als Monatsdatei speichern!!!
Dim loLetzte As Long
Dim raZelle As Range
Dim Datum As String
Dim Linie As String
Dim i As Integer
Dim Monat As String
Monat = Right(ActiveSheet.Range("A37"), 7)
Datum = ActiveSheet.Range("A37")
Linie = ActiveSheet.Range("A39")
i = MsgBox("Datei [" & Datum & "] ist nach Speicherung nicht mehr editierbar." & Chr(10) & "  _
Wollen Sie wirklich speichern?", vbOKCancel + vbExclamation)
If i = 2 Then Exit Sub
If i = 1 Then
Application.ScreenUpdating = False
Range("A129").Select    'hier steht die 1
Selection.Copy
Range("A128").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, SkipBlanks:=False,  _
Transpose:=False
Application.CutCopyMode = False
Selection.NumberFormat = "m/d/yyyy"
Workbooks.Open Filename:="H:\MDE geprüft\2008\Artikellaufzeiten\" & Linie & "\Monat\" &  _
Monat & ".xls"
With Worksheets("Tabelle1")
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count)
Set raZelle = .Range("A1:A" & loLetzte).Find(ThisWorkbook.Worksheets("PD`s").Range("A37"), _
Lookat:=xlWhole)
If raZelle Is Nothing Then
ThisWorkbook.Worksheets("PD`s").Range("B2:AF30").Copy .Cells(loLetzte + 1, 1)
MsgBox "Daten wurden gespeichert!"
Else
MsgBox "Datensatz ist bereits vorhanden!", vbCritical, "Achtung!"
End If
End With
Application.DisplayAlerts = False
Workbooks(Monat & ".xls").Close SaveChanges:=True
Application.DisplayAlerts = True
Range("I50").Select
Application.ScreenUpdating = True
End If
End 

Sub

AW: Danke!!!
08.05.2008 14:04:00
Beverly
Hi Stephan,
ein Datum aus einer TextBox kann man auf diese Weise problemlos in eine Zelle bekommen

Range("A37") = DateValue(TextBox1)


Das Problem mit der als Text formatieren Zelle kommt wirklich häufiger vor. Als ich das erste Mal damit konfrontiert war, habe ich auch verzweifelt nach der Ursache gesucht. Aber ein Gutes hat das - man merkt sich das ein für alle Mal ;-).



AW: Danke!!!
08.05.2008 16:06:00
Stephan
Hi Beverly,
vielen Dank für den Tipp!! Schreibe gerade den neuen Beitrag in Sachen Protokollierung...... Danke nochmals.....!! Gruß, Stephan

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige