Anzeige
Archiv - Navigation
704to708
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
704to708
704to708
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datepart Monat/Jahr ?

Datepart Monat/Jahr ?
03.12.2005 12:01:30
Karin
Hallo,
ich erfasse Daten in einem Datenblatt, die per VBA in eine Übersichtsdatei übertragen werden. Die Übersichtsdatei ist pro Monat vorhanden, also Übersicht Jan 2005, Übersicht Feb 2005, etc. Im Datenblatt steht in Zelle C36 ein Datum, anhand dessen die Daten in die entsprechende Übersichtsdatei übertragen werden soll. Also wenn in C36 das DAtum 15.11.2005 steht, sollen die DAten in die Übersicht Nov 2005 übertragen werden.
Nachdem meine VBA-Kenntnise sehr begrenzt sind, komme ich hier einfach nicht weiter. Meine Versuche mit Datepart sind kläglich gescheitert. Kann mir bitte jemand helfen?
Das wäre toll!
Karin

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datepart Monat/Jahr ?
03.12.2005 12:21:21
Ramses
Hallo

Sub Test()
dim myM as integer, myY as Integer
myM = Month(Range("C36"))
myY = Year(Range("C36"))
msgbox "Monat:" & myM & " und Jahr " & myY
'oder
msgbox "Tabellenname: " & Format(Range("C36"),"MMM") & " " & Year(Range("C36"))
End Sub

Gruss Rainer
AW: Datepart Monat/Jahr ?
03.12.2005 14:52:01
Karin
Hallo Ramses,
danke für deine schnelle Antwort. Ganz ist es das aber nicht. Ich muss die Daten basierend auf C36 in unterschiedliche Arbeitsmappen übertragen. Das ist in deinem Makro nicht berücksichtigt.
Grüße
Karin
AW: Datepart Monat/Jahr ?
03.12.2005 15:54:35
Ramses
Hallo
".. in unterschiedliche Arbeitsmappen..."
Das war auch nicht deine Frage :-)
Dir ging es darum, wie du den Monatsnamen und das Jahr aus dem Datum herausbekommst,... und diese Frage habe ich beantwortet.
Du schreibst auch nicht welche Daten übertragen werden sollen und in welche Mappen.
Hellsehen ist heute nicht mehr ;-)
Gruss Rainer
Anzeige
AW: Datepart Monat/Jahr ?
03.12.2005 12:36:06
Reinhard
Hi Karin,
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim zei As Long, komplett As Boolean, n As Integer, r As Long, zei2 As Long
Dim blatt As Worksheet
If Target.Column < 3 Or Target.Column > 6 Then Exit Sub '3=C, 6=F
komplett = True
For n = 3 To 6
If Cells(r, n) = "" Then komplett = False
Next n
If komplett = True Then
blatt = "Übersicht " & MonthName(Month(Range("C" & r)), True) & " 2005"
zei2 = Worksheets(blatt).Range("C65536").End(xlUp).Row + 1
Range(Cells(r, 3), Cells(r, 6)).Copy Destination:=Worksheets(blatt).Range("C" & zei2)
End If
End Sub

Alt+F11, Doppelklick auf das datenblatt, Code einfügen, Editor schliessen.
Automatisches Makro überprüft Spalten C-F auf Eingaben, wenn alle Felder ausgefüllt sind wird automatisch der Bereich Cx:Fx in das entsprechende Monatsblatt unten angehängt.
Gruß
Reinhard
Anzeige
Hast du's ausprobiert ? :-) o.T..
03.12.2005 12:46:55
Ramses
...
jetzt ja :-)
03.12.2005 13:03:51
Reinhard
Hallo Ramses,
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim zei As Long, komplett As Boolean, n As Integer, r As Long, zei2 As Long
Dim blatt As String
If Target.Column < 3 Or Target.Column > 6 Then Exit Sub '3=C, 6=F
komplett = True
r = Target.Row
For n = 3 To 6
If Cells(r, n) = "" Then komplett = False
Next n
If komplett = True And IsDate(Range("C" & r)) Then
blatt = "Übersicht " & MonthName(Month(Range("C" & r)), True) & " 2005"
zei2 = Worksheets(blatt).Range("C65536").End(xlUp).Row + 1
Range(Cells(r, 3), Cells(r, 6)).Copy Destination:=Worksheets(blatt).Range("C" & zei2)
End If
End Sub

Gruß
Reinhard
Anzeige
AW: Datepart Monat/Jahr ?
03.12.2005 15:05:38
Karin
Hallo Reinhard,
danke für deine Antwort. Irgendwie passiert aber gar nichts. Muss ich das Makro einer Schaltfläche zuweisen? Ich habe im Editor auf "Diese Arbeitsmappe" geklickt, ist das korrekt?
Freundliche Grüße
Karin
nein, Doppelklick auf Tabellenblatttnamen o.w.T.
03.12.2005 15:23:49
Reinhard
Gruß
Reinhard
AW: nein, Doppelklick auf Tabellenblatttnamen o.w.T.
03.12.2005 16:16:08
Karin
Hallo Reinhard,
mit deinem Makro komme ich leider nicht klar. Ich habe mich garantiert auch nicht richtig ausgedrückt. Ich lade die betreffenden Tabellen mal hoch. Im Datenblatt habe ich schon ein Makro, das die DAten übertragt, nur nicht nach dem Kriterium Datum in Zelle 36. In diesem Makro stimmt dann natürlich auch der Workbooks.Open-Befehl nicht, genauso wenig wie "Set wksTarget". Ich wäre dir superdankbar, wenn du mir da auf die Sprünge helfen könntest.
Herzliche Grüße
Karin
https://www.herber.de/bbs/user/28927.xls

Die Datei https://www.herber.de/bbs/user/28928.xls wurde aus Datenschutzgründen gelöscht

Anzeige
AW: nein, Doppelklick auf Tabellenblatttnamen o.w.T.
03.12.2005 18:11:54
Reinhard
Hi Karin,
nachfolgender Code ist ungetestet. Falls Fehler auftreten, brauch ich Fehlernummer und die Zeile wo der gelbe Debugger steht wenn du auf Debuggen im Editor klickst.
Zellen zu verbinden bringt meistens nix als Ärger, warum sind C--K verbunden?
Warum wird beim Schließen des Datenblattes C4:K4 selectiert?
Activate und Seect braiucht man zu 99% nie.
Mein erstes Makrto wäre zum Einsatz gekommen, natürlich angepasst, wenn du einen Automatismus gebraucht hättest dass, wenn alle Zeilen in C4:C52 gefüllt sind diese Daten automatisch abgespeichert würden und dann Spalte C wieder gelöscht wird.
Gruß
Reinhard
Option Explicit
Sub Abspeichern()
Call Eintragen
Call UnterNamenSpeichern
End Sub
Sub Eintragen()
'Das Makro übertragt die Daten vom MA Datenblatt in die geschlossene DAtei MA Übersicht.
'Das Datum in Zelle C36 wird geprüft und anhand der Monats- und Jahreszahl in die
'entsprechende MA Übersicht (Januar bis Dezember) eingetragen.
Dim wksSource As Worksheet, wksTarget As Worksheet, iRow As Long 'Integer geht nur bis 32...
Dim blatt As Worksheet
On Error GoTo Dateifehler
Workbooks.Open Filename:="c:\Übersicht.xls"
Set wksSource = Workbooks("Datenblatt.xls").Worksheets("MA Datenblatt")
iRow = wksSource.Range("A65536").End(xlUp).Row + 1
blatt = "Übersicht " & MonthName(Month(wksSource.Range(C36)), True) & " " & CStr(Year(Range(C36)))
With Workbooks("Übersicht.xls").Worksheets(blatt)
On Error GoTo Fehler
'.Unprotect
wksSource.Range(Cells(4, 3), Cells(5, 3)).Copy Destination:=.Cells(iRow, 1)
wksSource.Range(Cells(35, 3), Cells(35, 3)).Copy Destination:=.Cells(iRow, 3)
wksSource.Range(Cells(19, 3), Cells(5, 3)).Copy Destination:=.Cells(iRow, 4)
wksSource.Range(Cells(9, 3), Cells(10, 3)).Copy Destination:=.Cells(iRow, 5)
wksSource.Range(Cells(26, 3), Cells(5, 3)).Copy Destination:=.Cells(iRow, 7)
wksSource.Range(Cells(42, 3), Cells(45, 3)).Copy Destination:=.Cells(iRow, 8)
wksSource.Range(Cells(36, 3), Cells(5, 3)).Copy Destination:=.Cells(iRow, 12)
'.Protect
End With
Exit Sub
Fehler:
MsgBox "Fehler"
Exit Sub
Dateifehler:
MsgBox "Dateifehler"
End Sub
End If
End Sub
' Das Makro speichert das MA Datenblatt unter dem Namen des Klienten, die Einträge
' der Originaldatei werden gelöscht, das MA Datenblatt wird beim nächsten Aufruf
' wieder leer zur Verfügung gestellt.
Sub UnterNamenSpeichern()
' Datei kopieren und MA Datenblatt.xls leeren
ThisWorkbook.SaveCopyAs Filename:="C:\Personalinnovation\Mitarbeiter in Beratung\" & Range("C4") & "_" & Range("C5") & ".xls"
ActiveSheet.Unprotect
ActiveSheet.Range("C1:K52").ClearContents
'*** Zelle B1 auch leeren
Range("B1").ClearContents
Range("C4:J4").Select '??
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Workbooks.Close savechanges:=True
End Sub

Anzeige
AW: nein, Doppelklick auf Tabellenblatttnamen o.w.T.
03.12.2005 18:41:05
Karin
Hallo Reinhard,
erstmal 1000 Dank für deine Unterstützung. Finde ich toll!
In nachstehender Zeile kommt die Fehlermeldung "Variable nicht deklariert"
blatt = "Übersicht " & MonthName(Month(wksSource.Range(C36)), True) & " " & CStr(Year(Range(C36)))
Gruß
Karin
Sorry, ersetze bitte C36 durch "C36" o.w.T.
03.12.2005 18:42:35
Reinhard
Gruß
Reinhard
AW: Sorry, ersetze bitte C36 durch "C36" o.w.T.
03.12.2005 19:15:48
Karin
Hallo Reinhard,
jetzt kommt die Meldung "Dateifehler". Übertragen wird nichts. Was bedeutet das?
Gruß
Karin
AW: Sorry, ersetze bitte C36 durch "C36" o.w.T.
03.12.2005 19:48:01
Reinhard
Hi Karin,
gehe mal in den Editot, stell den Cursor beliebig innerhalb des Makros und arbeite mit F8, nach welcher Zeile hüpft er nach unten?
Gruß
Reinhard
Anzeige
AW: Sorry, ersetze bitte C36 durch "C36" o.w.T.
03.12.2005 19:54:38
Karin
Hallo Reinhard,
bei
blatt = "Übersicht " & MonthName(Month(wksSource.Range("C36")), True) & " " & CStr(Year(Range("C36")))
springt der Cursor zur DAteifehler.
Gruß
Karin
AW: Sorry, ersetze bitte C36 durch "C36" o.w.T.
03.12.2005 19:59:40
Reinhard
Hi Karin,
Step by Step :-)
Blatt=... austauschen gegen:
blatt = "Übersicht " & MonthName(Month(wksSource.Range("C36")), True) & " " & CStr(Year(wksSource.Range("C36")))
Gruß
Reinhard
AW: Sorry, ersetze bitte C36 durch "C36" o.w.T.
03.12.2005 20:20:09
Karin
Hallo Reinhard,
step by step ist ok! Hauptsache dir geht die Geduld nicht aus ...
Die Änderung hat nichts gebracht, genau bei der Zeile springt der Cursor wieder zu "Dateifehler".
Gruß
Karin Kathegetes
Anzeige
AW: Sorry, ersetze bitte C36 durch "C36" o.w.T.
03.12.2005 20:55:02
Reinhard
Hi Karin,
ich muss jetzt weg.
da ich ja nicht deine Dateinamen habe habe ich es mit
Set wksSoruce=activesheet
blatt = ...
getestet. da kam kein Fehler.
Mache nochmal mit F8 und überprüfe indem du mit der Maus über abgearbeiteten Zeilen "schwebst" die Inhaölte der Variablen, der Inhalt wird dann angezeigt.
Oder füge
msgbox Variablenname vor der kritischen Zeile ein.
ein.
Gruß
Reinhard
AW: Sorry, ersetze bitte C36 durch "C36" o.w.T.
03.12.2005 21:02:47
Karin
Hallo Reinhard,
werde ich versuchen. Herzlichen Dank für deine Unterstützung.
Freundliche Grüße
Karin
AW: Sorry, ersetze bitte C36 durch "C36" o.w.T.
04.12.2005 09:27:21
Karin
Hallo Reinhard,
sorry wenn ich dich noch mal belästige. Kannst du bitte dein Makro noch einmal checken? Ich habe allles versucht, es funktioniert bei mir nicht. Es werden keine Daten übertragen, der Dateifehler kommt nach wie vor bei der zeile "blatt = ... Wenn ich diese Zeile richtig interpretiere, soll doch hier die durch das Makro geöffnete Datei "Übersicht.xls" mit dem Dateinamen "Übersicht" plus Monatsnamen versehen werden. Danach sollen die entsprechenden Daten vom Datenblatt in die Übersicht übertragen werden. Hier verstehe ich auch nicht die geänderten Zeilen zum Übertragen der Daten. So wie ich das als Laie interpretiere, sollen hier ja immer zwei Zellen in eine Zelle der "destination" übertragen werden? Ich habe das mal geändert (auskommentierter Bereich), hat natürlich auch nichts gebracht.
Ich lade dir beide aktuellen Dateien hoch.
Vorab schon herzlichen Dank!!!
Karin
https://www.herber.de/bbs/user/28933.xls (Datenblatt.xls)

Die Datei https://www.herber.de/bbs/user/28934.xls wurde aus Datenschutzgründen gelöscht

(Übersicht.xls)
Anzeige
AW: Sorry, ersetze bitte C36 durch "C36" o.w.T.
04.12.2005 13:56:51
Reinhard
Hi Karin,
die Zuweisungen in Abspeichern dienen nur zm Testen weil ich noch ein problem mit dem Kopieren habe, siehe meine Anfrage dazu hier im Forum. Der Rest scheint aber zu laufen, habe es getestet, natürlich nicht alle Evetualitäten.
Wozu dient eigentlich dieses Doppelklickmakro?
Gruß
Reinhard
Option Explicit
Sub Abspeichern()
[c36] = CDate("1.7.2005")
[c4] = "Hans"
[c5] = "Meier"
If Prüfen = True Then
Call Eintragen
Call UnterNamenSpeichern
Else
MsgBox "C4 oder C5 ist/sind leer, oder C36 ist kein datum"
End If
End Sub
Sub Eintragen()
'Das Makro übertragt die Daten vom MA Datenblatt in die geschlossene DAtei MA Übersicht.
'Das Datum in Zelle C36 wird geprüft und anhand der Monats- und Jahreszahl in die
'entsprechende MA Übersicht (Januar bis Dezember) eingetragen.
Dim wksSource As Worksheet, wksTarget As Worksheet, iRow As Long 'Integer geht nur bis 32...
Dim blatt As String, Tabelle As Worksheet, vorhanden As Boolean, zähler As Integer
Dim Datei
On Error GoTo Dateifehler
vorhanden = False ' wenn Übersicht.xls nicht offen, öffnen
For Each Datei In Workbooks
If Datei.Name = "Übersicht.xls" Then vorhanden = True
Next Datei
If vorhanden = False Then Workbooks.Open Filename:="c:\Übersicht.xls"
Set wksSource = Workbooks("Datenblatt.xls").Worksheets("MA Datenblatt")
blatt = "Übersicht " & MonthName(Month(wksSource.Range("C36")), True) & " " & CStr(Year(wksSource.Range("C36")))
With Workbooks("Übersicht.xls")
vorhanden = False 'wenn Blatt "Übersicht mmm yyyy" nicht existiert, erzeugen und ans Ende stellen
For Each Tabelle In .Worksheets
zähler = zähler + 1
If Tabelle.Name = blatt Then vorhanden = True
Next Tabelle
If vorhanden = False Then
.Worksheets("MA Übersicht").Copy After:=.Worksheets(zähler)
.ActiveSheet.Name = blatt
End If
End With
With Workbooks("Übersicht.xls").Worksheets(blatt)
.Unprotect
ThisWorkbook.Activate
iRow = .Range("A65536").End(xlUp).Row + 1
On Error GoTo Fehler
Range("C4:C5").Copy Destination:=.Range("A" & iRow & ":B" & iRow)
Range("C35").Copy Destination:=.Range("C" & iRow)
Range("C19").Copy Destination:=.Range("D" & iRow)
Range("C9:C10").Copy Destination:=.Range("E" & iRow & ":F" & iRow)
Range("C26").Copy Destination:=.Range("G" & iRow)
Range("C42:C45").Copy Destination:=.Range("H" & iRow & ":K" & iRow)
Range("C36").Copy Destination:=.Range("L" & iRow)
.Protect
End With
Exit Sub
Fehler:
MsgBox "Fehler"
Exit Sub
Dateifehler:
MsgBox "Dateifehler"
End Sub
' Das Makro speichert das MA Datenblatt unter dem Namen des Klienten, die Einträge
' der Originaldatei werden gelöscht, das MA Datenblatt wird beim nächsten Aufruf
' wieder leer zur Verfügung gestellt.
Sub UnterNamenSpeichern()
Dim Antw
' Datei kopieren und MA Datenblatt.xls leeren
'       ThisWorkbook.SaveCopyAs Filename:="C:\Personalinnovation\Mitarbeiter in Beratung\" & Range("C4") & "_" & Range("C5") & ".xls"
ActiveSheet.Unprotect
ActiveSheet.Range("C1:K52").ClearContents
'*** Zelle B1 auch leeren
Range("B1").ClearContents
Range("C4:J4").Select '??
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Workbooks("Übersicht.xls").Close savechanges:=True
Antw = MsgBox("Mappe Dantenblatt.xls schliessen?", vbYesNo)
If Antw = vbYes Then ActiveWorkbook.Close savechanges:=True
End Sub
Function Prüfen() As Boolean
Prüfen = IIf(Range("C4") = "" Or Range("C5") = "" Or IsDate(Range("c36")) = False, False, True)
End Function

Anzeige
AW: Sorry, ersetze bitte C36 durch "C36" o.w.T.
04.12.2005 15:21:36
Reinhard
Hi Karin,
nachfolgender Code scheint zu funktionieren, bitte um Rückmeldung.
Gruß
Reinhard
Option Explicit
Sub Abspeichern()
[c36] = CDate("1.7.2005")
[c4] = "Hans"
[c5] = "Meier"
If Prüfen = True Then
Call Eintragen
Call UnterNamenSpeichern
Else
MsgBox "C4 oder C5 ist/sind leer, oder C36 ist kein datum"
End If
End Sub
Sub Eintragen()
'Das Makro übertragt die Daten vom MA Datenblatt in die geschlossene DAtei MA Übersicht.
'Das Datum in Zelle C36 wird geprüft und anhand der Monats- und Jahreszahl in die
'entsprechende MA Übersicht (Januar bis Dezember) eingetragen.
Dim wksSource As Worksheet, wksTarget As Worksheet, iRow As Long 'Integer geht nur bis 32...
Dim blatt As String, Tabelle As Worksheet, vorhanden As Boolean, zähler As Integer
Dim Datei
On Error GoTo Dateifehler
vorhanden = False ' wenn Übersicht.xls nicht offen, öffnen
For Each Datei In Workbooks
If Datei.Name = "Übersicht.xls" Then vorhanden = True
Next Datei
If vorhanden = False Then Workbooks.Open Filename:="c:\Übersicht.xls"
Set wksSource = Workbooks("Datenblatt.xls").Worksheets("MA Datenblatt")
blatt = "Übersicht " & MonthName(Month(wksSource.Range("C36")), True) & " " & CStr(Year(wksSource.Range("C36")))
With Workbooks("Übersicht.xls")
vorhanden = False 'wenn Blatt "Übersicht mmm yyyy" nicht existiert, erzeugen und ans Ende stellen
For Each Tabelle In .Worksheets
zähler = zähler + 1
If Tabelle.Name = blatt Then vorhanden = True
Next Tabelle
If vorhanden = False Then
.Worksheets("MA Übersicht").Copy After:=.Worksheets(zähler)
.ActiveSheet.Name = blatt
End If
End With
With Workbooks("Übersicht.xls").Worksheets(blatt)
.Unprotect
ThisWorkbook.Activate
iRow = .Range("A65536").End(xlUp).Row + 1
On Error GoTo Fehler
Range("C4:C5").Copy: .Range("A" & iRow & ":B" & iRow).PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Range("C35").Copy Destination:=.Range("C" & iRow)
Range("C19").Copy Destination:=.Range("D" & iRow)
Range("C9:C10").Copy: .Range("E" & iRow & ":F" & iRow).PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Range("C26").Copy Destination:=.Range("G" & iRow)
Range("C42:C45").Copy: .Range("H" & iRow & ":K" & iRow).PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Range("C36").Copy Destination:=.Range("L" & iRow)
.Protect
End With
Exit Sub
Fehler:
MsgBox "Fehler"
Exit Sub
Dateifehler:
MsgBox "Dateifehler"
End Sub
' Das Makro speichert das MA Datenblatt unter dem Namen des Klienten, die Einträge
' der Originaldatei werden gelöscht, das MA Datenblatt wird beim nächsten Aufruf
' wieder leer zur Verfügung gestellt.
Sub UnterNamenSpeichern()
Dim Antw
' Datei kopieren und MA Datenblatt.xls leeren
'       ThisWorkbook.SaveCopyAs Filename:="C:\Personalinnovation\Mitarbeiter in Beratung\" & Range("C4") & "_" & Range("C5") & ".xls"
ActiveSheet.Unprotect
ActiveSheet.Range("C1:K52").ClearContents
'*** Zelle B1 auch leeren
Range("B1").ClearContents
Range("C4:J4").Select '??
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Workbooks("Übersicht.xls").Close savechanges:=True
Antw = MsgBox("Mappe Dantenblatt.xls schliessen?", vbYesNo)
If Antw = vbYes Then ActiveWorkbook.Close savechanges:=True
End Sub
Function Prüfen() As Boolean
Prüfen = IIf(Range("C4") = "" Or Range("C5") = "" Or IsDate(Range("c36")) = False, False, True)
End Function

AW: Sorry, ersetze bitte C36 durch "C36" o.w.T.
04.12.2005 15:22:15
Reinhard
Hi Karin,
nachfolgender Code scheint zu funktionieren, bitte um Rückmeldung.
Gruß
Reinhard
Option Explicit
Sub Abspeichern()
[c36] = CDate("1.7.2005")
[c4] = "Hans"
[c5] = "Meier"
If Prüfen = True Then
Call Eintragen
Call UnterNamenSpeichern
Else
MsgBox "C4 oder C5 ist/sind leer, oder C36 ist kein datum"
End If
End Sub
Sub Eintragen()
'Das Makro übertragt die Daten vom MA Datenblatt in die geschlossene DAtei MA Übersicht.
'Das Datum in Zelle C36 wird geprüft und anhand der Monats- und Jahreszahl in die
'entsprechende MA Übersicht (Januar bis Dezember) eingetragen.
Dim wksSource As Worksheet, wksTarget As Worksheet, iRow As Long 'Integer geht nur bis 32...
Dim blatt As String, Tabelle As Worksheet, vorhanden As Boolean, zähler As Integer
Dim Datei
On Error GoTo Dateifehler
vorhanden = False ' wenn Übersicht.xls nicht offen, öffnen
For Each Datei In Workbooks
If Datei.Name = "Übersicht.xls" Then vorhanden = True
Next Datei
If vorhanden = False Then Workbooks.Open Filename:="c:\Übersicht.xls"
Set wksSource = Workbooks("Datenblatt.xls").Worksheets("MA Datenblatt")
blatt = "Übersicht " & MonthName(Month(wksSource.Range("C36")), True) & " " & CStr(Year(wksSource.Range("C36")))
With Workbooks("Übersicht.xls")
vorhanden = False 'wenn Blatt "Übersicht mmm yyyy" nicht existiert, erzeugen und ans Ende stellen
For Each Tabelle In .Worksheets
zähler = zähler + 1
If Tabelle.Name = blatt Then vorhanden = True
Next Tabelle
If vorhanden = False Then
.Worksheets("MA Übersicht").Copy After:=.Worksheets(zähler)
.ActiveSheet.Name = blatt
End If
End With
With Workbooks("Übersicht.xls").Worksheets(blatt)
.Unprotect
ThisWorkbook.Activate
iRow = .Range("A65536").End(xlUp).Row + 1
On Error GoTo Fehler
Range("C4:C5").Copy: .Range("A" & iRow & ":B" & iRow).PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Range("C35").Copy Destination:=.Range("C" & iRow)
Range("C19").Copy Destination:=.Range("D" & iRow)
Range("C9:C10").Copy: .Range("E" & iRow & ":F" & iRow).PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Range("C26").Copy Destination:=.Range("G" & iRow)
Range("C42:C45").Copy: .Range("H" & iRow & ":K" & iRow).PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Range("C36").Copy Destination:=.Range("L" & iRow)
.Protect
End With
Exit Sub
Fehler:
MsgBox "Fehler"
Exit Sub
Dateifehler:
MsgBox "Dateifehler"
End Sub
' Das Makro speichert das MA Datenblatt unter dem Namen des Klienten, die Einträge
' der Originaldatei werden gelöscht, das MA Datenblatt wird beim nächsten Aufruf
' wieder leer zur Verfügung gestellt.
Sub UnterNamenSpeichern()
Dim Antw
' Datei kopieren und MA Datenblatt.xls leeren
'       ThisWorkbook.SaveCopyAs Filename:="C:\Personalinnovation\Mitarbeiter in Beratung\" & Range("C4") & "_" & Range("C5") & ".xls"
ActiveSheet.Unprotect
ActiveSheet.Range("C1:K52").ClearContents
'*** Zelle B1 auch leeren
Range("B1").ClearContents
Range("C4:J4").Select '??
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Workbooks("Übersicht.xls").Close savechanges:=True
Antw = MsgBox("Mappe Dantenblatt.xls schliessen?", vbYesNo)
If Antw = vbYes Then ActiveWorkbook.Close savechanges:=True
End Sub
Function Prüfen() As Boolean
Prüfen = IIf(Range("C4") = "" Or Range("C5") = "" Or IsDate(Range("c36")) = False, False, True)
End Function

AW: Sorry, ersetze bitte C36 durch "C36" o.w.T.
04.12.2005 16:26:42
Karin
Hallo Reinhard,
klasse dass du dich noch einmal meldest!
Hier ist keine Variable definiert
If Prüfen = True Then
und hier springt der Cursor wieder zu "Dateifehler".
Set wksSource = Workbooks("Datenblatt.xls").Worksheets("MA Datenblatt")
Das "Doppelklick-Makro" war dazu gedacht, durch Doppelklick auf den Namen in A1 die entsprechende Datei zu öffen. Ist aber nicht unbedingt wichtig.
Gruß
Karin
AW: Sorry, ersetze bitte C36 durch "C36" o.w.T.
04.12.2005 17:56:59
Reinhard
Hi Karin,
Ich habe die Datei "Datenblatt.xls" https://www.herber.de/bbs/user/28943.xls in der der nachfolgende Code steht in Modul1.
Die Mappe besitzt das Tabellenblatt "MA Datellenblatt"
es gibt die Mappe "Übersicht.xls"

Die Datei https://www.herber.de/bbs/user/28944.xls wurde aus Datenschutzgründen gelöscht

Sie hat das Tabellenblatt "MA Übersicht" und "Übersicht Jul 2005"
Und mit diesen Mappen funktionierte der Code völlig korrekt.
Prüfen ist keine Variable und da der Code in Datenbank.xls stht, kann m.E.
Set wksSource = Workbooks("Datenblatt.xls").Worksheets("MA Datenblatt")
keinen Fehler erzeugen, außer es gibt kein Blatt dieses Namens.
Gruß
ReinhardPS: Nicht nur wegen Hochladproblemen hier bei Herber, ich würde Umlaute, Sonderzeichen in Dateinamen grundsätzlich immer vermeiden, also Ue anstatt Ü. Auch das Leerzeichen sehe ich kritisch in Dateinamen.
Option Explicit
Sub Abspeichern()
Application.ScreenUpdating = False
[c36] = CDate("1.7.2005")
[c4] = "Hans"
[c5] = "Meier"
If Prüfen = True Then
Call Eintragen
Call UnterNamenSpeichern
Else
MsgBox "C4 oder C5 ist/sind leer, oder C36 ist kein datum"
End If
Application.ScreenUpdating = True
End Sub
Sub Eintragen()
'Das Makro übertragt die Daten vom MA Datenblatt in die geschlossene DAtei MA Übersicht.
'Das Datum in Zelle C36 wird geprüft und anhand der Monats- und Jahreszahl in die
'entsprechende MA Übersicht (Januar bis Dezember) eingetragen.
Dim wksSource As Worksheet, wksTarget As Worksheet, iRow As Long 'Integer geht nur bis 32...
Dim blatt As String, Tabelle As Worksheet, vorhanden As Boolean, zähler As Integer
Dim Datei
On Error GoTo Dateifehler
vorhanden = False ' wenn Übersicht.xls nicht offen, öffnen
For Each Datei In Workbooks
If Datei.Name = "Übersicht.xls" Then vorhanden = True
Next Datei
If vorhanden = False Then Workbooks.Open Filename:="c:\Übersicht.xls"
Set wksSource = Workbooks("Datenblatt.xls").Worksheets("MA Datenblatt")
blatt = "Übersicht " & MonthName(Month(wksSource.Range("C36")), True) & " " & CStr(Year(wksSource.Range("C36")))
With Workbooks("Übersicht.xls")
vorhanden = False 'wenn Blatt "Übersicht mmm yyyy" nicht existiert, erzeugen und ans Ende stellen
For Each Tabelle In .Worksheets
zähler = zähler + 1
If Tabelle.Name = blatt Then vorhanden = True
Next Tabelle
If vorhanden = False Then
.Worksheets("MA Übersicht").Copy After:=.Worksheets(zähler)
.ActiveSheet.Name = blatt
End If
End With
With Workbooks("Übersicht.xls").Worksheets(blatt)
.Unprotect
ThisWorkbook.Activate
iRow = .Range("A65536").End(xlUp).Row + 1
On Error GoTo Fehler
Range("C4:C5").Copy: .Range("A" & iRow & ":B" & iRow).PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Range("C35").Copy Destination:=.Range("C" & iRow)
Range("C19").Copy Destination:=.Range("D" & iRow)
Range("C9:C10").Copy: .Range("E" & iRow & ":F" & iRow).PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Range("C26").Copy Destination:=.Range("G" & iRow)
Range("C42:C45").Copy: .Range("H" & iRow & ":K" & iRow).PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Range("C36").Copy Destination:=.Range("L" & iRow)
.Protect
End With
Exit Sub
Fehler:
MsgBox "Fehler"
Exit Sub
Dateifehler:
MsgBox "Dateifehler"
End Sub
' Das Makro speichert das MA Datenblatt unter dem Namen des Klienten, die Einträge
' der Originaldatei werden gelöscht, das MA Datenblatt wird beim nächsten Aufruf
' wieder leer zur Verfügung gestellt.
Sub UnterNamenSpeichern()
Dim Antw
' Datei kopieren und MA Datenblatt.xls leeren
'       ThisWorkbook.SaveCopyAs Filename:="C:\Personalinnovation\Mitarbeiter in Beratung\" & Range("C4") & "_" & Range("C5") & ".xls"
ActiveSheet.Unprotect
ActiveSheet.Range("C1:K52").ClearContents
'*** Zelle B1 auch leeren
Range("B1").ClearContents
Range("C4:J4").Select '??
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Antw = MsgBox("Mappe Übersicht.xls schliessen?", vbYesNo)
If Antw = vbYes Then Workbooks("Übersicht.xls").Close savechanges:=True
Antw = MsgBox("Mappe Dantenblatt.xls schliessen?", vbYesNo)
If Antw = vbYes Then ActiveWorkbook.Close savechanges:=True
End Sub
Function Prüfen() As Boolean
Prüfen = IIf(Range("C4") = "" Or Range("C5") = "" Or IsDate(Range("c36")) = False, False, True)
End Function

AW: Sorry, ersetze bitte C36 durch "C36" o.w.T.
04.12.2005 19:02:24
Karin
Hallo Reinhard,
1000 Dank für deine Hilfe. Ich teste das alles noch mal durch. Deine Ratschläge bezüglich Dateinamen werde ich berücksichtigen!
Herzliche Grüße
Karin
Nachtrag
03.12.2005 18:15:33
Reinhard
Hi Karin,
der zweite Button kann weg. Rufe mit dem einen Button Abspeichern auf.
Ggfs bau noch das Schliessen von Übersicht.xls mit ein.
Gruß
Reinhard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige