481 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen,
ich möchte mir in excel eine Datei erstellen, die mir die mtl. Einnahmen den Ausgaben (in einzelnen Bereiche) gegenüberstellt/überträgt. Dazu habe ich mehrere Tabellenblätter erstellt und mit den Namen Eingabe (wo alles eingetragen wird), Auto Essen, Wohnen, Trinken und Sonstiges benannt.

Im Tabellenblatt "Eingabe"in C4 können mittels Datenüberprüfung die Rubriken "Auto", "Essen", "Wohnen" etc. ausgewählt werden. In D4 kann ein Text eingegeben werden, in E4 das Datum (als Datumfeld formatiert) und in F4 der Betrag (als Zahl mit 1000-er Trennzeichen formatiert).

Nun soll mittels eines Makros überprüft werden, ob der Wert in C4 "Essen", "Wohnen" etc. ist und dann die D4 bis F4 kopieren und in das jeweilige Tabellenblatt kopieren. Also als Beispiel : Wenn in C4 "Auto" steht die Felder D4 bis F4 kopieren und in das Tabellenblatt "Auto" kopieren. Als Makro sieht das bei mir dann so aus :

Sheets("Eingabe").Select
Range("C4").Select
If (C4 = "Auto") = True Then Range("D4:F4").Select
Selection.Copy
Sheets("Auto").Select
Range("A4").Select
If IsEmpty(Cells(4, 1)) = True Then Range("a4").Select
If IsEmpty(Cells(4, 1)) = False Then Range("a5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
Sheets("Eingabe").Select
Range("A1").Select

Leider funktioniert das bei mir nicht: Steht in "Eingabe!C4" z.B. Auto, wird dieser Wert in ALLE anderen Arbeitsblätter kopiert und nicht nur die Daten aus den Feldern D4 bis F4 nur in das Tabellenblatt "Auto".

Was mache ich falsch/wo liegt mein Denkfehler ?

Wäre Euch für eine Lösung dankbar.

1 Antwort

0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

das scheint aber nicht dein ganzes Makro zu sein, sondern nur der Teil, mit dem du die Daten in das Tabellenblatt "Auto" kopieren willst.

Dein Fehler dürfte hier liegen:
If (C4 = "Auto") = True Then Range("D4:F4").Select


Ich nehme mal an, du willst prüfen, welches Blatt ausgewählt wurde, das machst du aber nicht. Du prüfst nur, ob in C4 Auto steht und wählst dann D4 bis F4 aus.
Dann kopierst du diese Daten in das Blatt Auto. Wenn du das für die übrigen Blätter mit genau dem selben Code machst, dann werden die Daten natürlich auch in alle anderen Blätter kopiert.
Du willst aber, dass die Daten nur in das ausgewählte Blatt kopiert werden. Also müsstest du deine Abfrage wie folgt ändern

If Worksheets("Eingabe").Range("C4") = "Auto" Then
Range("D4:F4").Copy
Sheets("Auto").Range("A4").Select
If IsEmpty(Cells(4, 1)) = True Then Range("a4").Select
If IsEmpty(Cells(4, 1)) = False Then Range("a5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If


Hier ein Code, der dein Problem lösen sollte:

Sub daten_kopieren()
Dim lngLetzte As Long
Dim strBlatt As String

'Prüfen, ob in C4 etwas ausgewählt wurde
If IsEmpty(Worksheets("Eingabe").Range("C4")) = True Then
'falls C4 leer ist, Meldung anzeigen und Makro verlassen
MsgBox "Es wurde keine Kategorie ausgewählt!", 16, "Fehler!"
Exit Sub
End If

'C4 in Variable für Blatt schreiben
strBlatt = Worksheets("Eingabe").Range("C4").Value

'letzte Zeile in Spalte A im Zielblatt ermitteln und um 1 erhöhen für Einfügezeile
lngLetzte = Worksheets(strBlatt).Cells(Rows.Count, 1).End(xlUp).Row + 1

'Nun Daten kopieren
With Worksheets("Eingabe").Range("D4:F4")
.Copy Destination:=Worksheets(strBlatt).Cells(lngLetzte, 1)
'Eingaben in D4 bis F4 löschen auf Eingabeblatt löschen
.ClearContents
End With

End Sub


Ich gehe mal davon aus, dass die Tabellenblätter genauso heißen, wie deine Rubriken aus der Liste.

Gruß

M.O.
...