Makro Hilfe

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Makro Hilfe
von: CaptainFlounder
Geschrieben am: 15.09.2015 16:10:24

Hallo,
nachdem ich nun die letzten Tage ohne Ende Beiträge in diesem Forum gelesen habe um mir meine Tabelle zusammen zu kratzen, muss ich nun doch eine Frage selber stellen:
Ich habe ein Datum, welches per Dropdown Ausgewählt wird und eine Datenbank, die sich bei Benutzung nach und nach erweitert. Dabei wird eine neue Spalte mit Datum und Werten eingetragen (funktioniert auch Alles).
Jetzt möchte ich, dass per Makro diejenige Spalte in eine andere Tabelle kopiert wird, die das Ausgewählte vorher ausgewählte Datum enthält.
Mein Makro sieht bisher folgendermaßen aus:

Sub Datum1WerteInHilfe()
Dim Datum As Variant
Dim Alle_Daten As Variant
Dim pos_des_Datums As Double
Dim Quelltab As Worksheet
Dim Zieltab As Worksheet
Dim Zelle As Range
Alle_Daten = Array("Tabelle!$B$2:$ZZ$2")
Datum = Range("Ausgabe!$N$7")
pos_des_Datums = WorksheetFunction.Match(Datum, Alle_Daten)
Zaehler = 32
Bereich = "&pos_des_Datums,2:&pos_des_Datums,14"
Set Quelltab = ActiveWorkbook.Worksheets("Tabelle")
Set Zieltab = ActiveWorkbook.Worksheets("Tabelle")
For Each Zelle In Quelltab.Range("&pos_des_Datums,2:&pos_des_Datums,14")
 Zieltab.Cells(Zaehler, 2) = Zelle
 Zaehler = Zaehler + 1
Next Zelle
End Sub
Ich hab mir das alles irgendwie zusammenkopiert.
Variant Alle_Daten ost die Zeile im Datensatz in der das DAtum steht
Variant Datum ist die Zelle, in der das Datum ausgewählt wird
und pos_des_Datums soll die Spalte sein wo das ausgewählte Datum im Datensatz steht
Ich hab mal die Problemzeilen fett gemacht
Entschuldigung im Vorraus für meine Unfähigkeit in Excel und Vielen Dank für jedewede Hilfe
Liebe Grüße,
Johann

Bild

Betrifft: AW: Makro Hilfe
von: matthias
Geschrieben am: 16.09.2015 12:41:20
Hallo Johann,
.Range("&pos_des_Datums,2:&pos_des_Datums,14") wird so nicht funktionieren, weil alles was zwischen Anführungszeichen steht als Text interpretiert wird.
Zudem arbeitet die Range-Anweisung mit Spalten als Buchstaben angegeben (Bsp.: Range("C3")). Was du nutzen solltest ist daher Cells(Zeile, Spalte), wobei Zeile und Spalte als Zahlenwert angegeben werden. Um ein "von Zelle 1 bis Zelle X" zu erzeugen musst du beide daher in Cells angeben und mit einer Range-Anweisung kombinieren. In deinem Fall konkret:

.Range(Cells(2,pos_des_Datums),Cells(14,pos_des_Datums))

Bereich = "&pos_des_Datums,2:&pos_des_Datums,14"
Zunächst einmal ist die Variable Bereich als Range zu deklarieren:
Dim Bereich As Range
Um der Variable die Zellen zuzuweisen geht man gehst du genau wie beim Quell-/Zieltab vor:
Set Bereich = Quelltab.Range(...)
Gleiches gilt für Datum, welches ja ebenfalls eine Range darstellt.
Mit Match im Zusammenhang mit Array kenne ich mich nicht so gut aus, daher habe ich das ganze mit einer Suchfunktion gelöst:

Sub Datum1WerteInHilfe()
Dim dDatum As Date
Dim rZelle As Range
Dim Quelltab As Worksheet, Zieltab As Worksheet
dDatum = Range("Ausgabe!$N$7").Value
Set Quelltab = Worksheets("Tabelle1")
Set Zieltab = Worksheets("Tabelle2")
Set rZelle = Quelltab.Range("A:XFD").Find(What:=dDatum, LookIn:=xlValues, _
            LookAt:=xlWhole)
    'Position des Datums ist nun mit rZelle.Address/rZelle.Row/rZelle.Column abrufbar
If Not rZelle Is Nothing Then 'Wenn nicht Nichts gefunden wurde, _
                               dann kopiere Zeile 2 bis 14 in Spalte der gefundenen Zelle
    Quelltab.Range(Cells(2, rZelle.Column),Cells(14, rZelle.Column)).Copy _
    Destination:=Zieltab.Range("B32")
Else: MsgBox "Datum nicht gefunden."
End If
End Sub
lg Matthias

Bild

Betrifft: AW: Makro Hilfe
von: CaptainFlounder
Geschrieben am: 16.09.2015 15:22:17
Hallo,
erstmal vielen Dank dafür, dass du dir die Zeit genommen hast mir so ausführlich zu Helfen!
Leider habe ich immer noch ein Problem:
Wenn ich das angepasste Makro laufen lasse, gibt es die Meldung: Datum nicht gefunden.
Wahrscheinlich sitzt der Fehler vor dem PC aber wie kann das denn jetzt sein?
Das feld "N7" in dem Worksheet "Ausgabe" hat definitiv einen Inhalt, (1.Jan 15)
oder hab ich beim copy pasten des codes was kaputtgemacht?
Vielen Dank für die Hilfe!
Wo bin ich denn jetzt zu wieder zu dumm?

Bild

Betrifft: AW: Makro Hilfe
von: Matthias
Geschrieben am: 17.09.2015 15:25:13
Hallo Johann,
das Makro läuft bei mir ohne Probleme. Hast du auch geprüft, ob Quell- und Zieltab im Makro genauso heißen, wie in deiner Mappe? Zur Not im Makro umschreiben.
Das Format des Datums in beiden Zellen muss identisch sein, sonst kann es zu Problemen kommen.
lg Matthias

Bild

Betrifft: AW: Makro Hilfe
von: CaptainFlounder
Geschrieben am: 18.09.2015 10:09:34
Hallo,
Ich hab jetzt mal die Datei hochgeladen vieleicht kann mir ja nochmal jemand helfen und mir sagen wo der Fehler liegt:
https://www.herber.de/bbs/user/100253.xlsm
(Das ist natürlich nur eine Besipeildatei in der ich rumprobiere, ich beschäftige mich nicht tatsächlich mit der Auswertung von Fussballspielern)
Der Code ansich funktioniert ja es ist bestimmt nur irgendein Zellbezug falsch oder so aber leider weiß ich selber nicht mehr weiter.
Der Code:

Sub Datum1WerteInHilfeTest()
Dim dDatum As Date
Dim rZelle As Range
Dim Quelltab As Worksheet, Zieltab As Worksheet
dDatum = Range("Tabelle!$A$47").Value
Set Quelltab = Worksheets("Tabelle")
Set Zieltab = Worksheets("Tabelle")
Set rZelle = Quelltab.Range("A:XFD").Find(What:=dDatum, LookIn:=xlValues, _
            LookAt:=xlWhole)
    Quelltab.Range(Cells(2, rZelle.Column), Cells(14, rZelle.Column)).Copy _
    Destination:=Zieltab.Range("B32")
Else: MsgBox "Datum nicht gefunden."
End If
End Sub
Vielen Dank!

Bild

Betrifft: AW: Makro Hilfe
von: matthias
Geschrieben am: 18.09.2015 15:05:20
Hallo Johann,
probieren wir's erneut:

Sub Datum1WerteInHilfeTest()
Dim dDatum As Date
Dim rZelle As Range
Dim Quelltab As Worksheet, Zieltab As Worksheet
dDatum = Range("Tabelle!$A$47").Value
Set Quelltab = Worksheets("Tabelle")
Set Zieltab = Worksheets("Tabelle")
Set rZelle = Quelltab.Cells.Find(What:=dDatum, LookIn:=xlFormulas, _
            LookAt:=xlWhole)
If Not rZelle Is Nothing Then
    Quelltab.Range(Cells(2, rZelle.Column), Cells(14, rZelle.Column)).Copy _
    Destination:=Zieltab.Range("B32")
Else: MsgBox "Datum nicht gefunden."
End If
End Sub

Es lag schlussendlich nur an der Formatierung, die eigentlich gleich sein sollte, aber trotzdem Probleme macht. Damit sollte es nun gehen.
Da Quell- und Zieltab bei dir identisch sind, kann man eine Variable eigentlich auch weglassen.
lg Matthias

Bild

Betrifft: AW: Makro Hilfe
von: CaptainFlounder
Geschrieben am: 18.09.2015 15:30:41
Vielen vielen Dank!
jetzt läuft es wunderbar.
Stark das du dir soviel Zeit genommen hast mir zu helfen.
(Die Quelltab, Zeiltab Sache hab ich aus nem anderen Makro beibehalten, welches in ein anderen Tab kopiert, hatte Angst was kaputt zu machen)

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Gefilterte Tabelle per PDF und variabler Name"