Wert nach Zelleninhaltkriterium von Tabellenblatt übernehmen
Hallo!
Also, es gibt 2 Tabellenblätter: Kalender und XYZ
Im TB "XYZ" gibt es eine Liste (C5), bei der die Auswahl eines Monats möglich ist.
Wenn nun zB das Monat Juni gewählt wird, sollen nun im Bereich B15:B53 TB "XYZ" die Werte vom TB "Kalender", Spalte (K) (Wert: K14="Juni"), B15:B53 übernommen werden.
Das heißt, ich müsste die Monatsauswahl von C5 im TB (Kalender), in der Zeile 14 suchen und dann die darunterliegenden Werte im Bereich gesuchteSpalte15:gesuchteSpalte53 auf das TB(XYZ) B15:B53 übertragen.
Naja, leider übsteigt die realisierung ein bisschen meine Fähigkeiten (in VBA).
Würde mich freuen, wenns da eine kleine Unterstützung gäbe, um diese Überlegung in die Realität umzusetzen.
Lg Mike
Also, es gibt 2 Tabellenblätter: Kalender und XYZ
Im TB "XYZ" gibt es eine Liste (C5), bei der die Auswahl eines Monats möglich ist.
Wenn nun zB das Monat Juni gewählt wird, sollen nun im Bereich B15:B53 TB "XYZ" die Werte vom TB "Kalender", Spalte (K) (Wert: K14="Juni"), B15:B53 übernommen werden.
Das heißt, ich müsste die Monatsauswahl von C5 im TB (Kalender), in der Zeile 14 suchen und dann die darunterliegenden Werte im Bereich gesuchteSpalte15:gesuchteSpalte53 auf das TB(XYZ) B15:B53 übertragen.
Naja, leider übsteigt die realisierung ein bisschen meine Fähigkeiten (in VBA).
Würde mich freuen, wenns da eine kleine Unterstützung gäbe, um diese Überlegung in die Realität umzusetzen.
Lg Mike
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 149662
Url: https://administrator.de/forum/wert-nach-zelleninhaltkriterium-von-tabellenblatt-uebernehmen-149662.html
Ausgedruckt am: 24.12.2024 um 03:12 Uhr
32 Kommentare
Neuester Kommentar
Hallo Mike!
Sollte in etwa so gehen:
Gruß Dieter
Sollte in etwa so gehen:
Private Sub Test()
Call CopyMonthRange("Juni")
End Sub
Private Sub CopyMonthRange(ByRef M)
Dim Monat As Range
With Sheets("Kalender")
Set Monat = .Rows(14).Find(M, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
End With
If Not Monat Is Nothing Then
Range(Monat.Offset(1, 0), Monat.Offset(39, 0)).Copy Sheets("XYZ").Range("B15")
End If
End Sub
Gruß Dieter
Hallo Mike!
Deswegen das Testbeispiel. Wie Du die Variable übergibst ist wurscht, solange es sich beim übergebenen Inhalt um verwertbare Values handelt
Allerdings dann:
wobei eigentlich
ausreichend ist, da Value generell als Standard festgelegt ist.
Gruß Dieter
Deswegen das Testbeispiel. Wie Du die Variable übergibst ist wurscht, solange es sich beim übergebenen Inhalt um verwertbare Values handelt
Allerdings dann:
Call CopyMonthRange(Range("C5").Value) |
Call CopyMonthRange(Range("C5")) |
Gruß Dieter
Hallo Mike!
Ich dachte die Monatsnamen befinden sich in Zeile 14 und die Zeilen 15-53 sollen kopiert werden?
Füge mal Testweise in Codezeile 3 das hier ein:
Test ob überhaupt ein Monat übergeben wird?
Gruß Dieter
Ich dachte die Monatsnamen befinden sich in Zeile 14 und die Zeilen 15-53 sollen kopiert werden?
Kann es damit zusammenhängen, das die Tabellenblätter geschützt sind?
Wenn Tabelle1 geschützt ist, dann funktioniert es nicht Sollte auch eine Debugger-Fehlermeldung erscheinen?Füge mal Testweise in Codezeile 3 das hier ein:
MsgBox M |
Gruß Dieter
Ups, das habe ich doch glatt auch übersehen
Könntest mal das ausprobieren:
bzw., wie sah diese Zeile jetzt bei Dir aus?
Gruß Dieter
Jetzt kommt allerdings dieser Fehler:
Die Methode 'Range' für das Objekt '_Worksheet' ist fehlgeschlagen
Mhm, da habe ich jetzt aber keine Erklärung fürDie Methode 'Range' für das Objekt '_Worksheet' ist fehlgeschlagen
Könntest mal das ausprobieren:
Range(Monat.Offset(1, 0), Monat.Offset(5, 0)).Copy Destination:=Sheets("Tabelle1").Range("B15")
Gruß Dieter
Hallo Mike!
Kann leider keinen Fehler entdecken, poste nochmal die komplette Sub
Gruß Dieter
Kann leider keinen Fehler entdecken, poste nochmal die komplette Sub
Gruß Dieter
Hallo Mike!
Versuchs mal damit:
oder damit:
Gruß Dieter
Versuchs mal damit:
Private Sub CopyMonthRange(ByRef M)
Dim Monat As Range
With Sheets("Kalender")
Set Monat = .Rows(14).Find(M, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not Monat Is Nothing Then
Range(.Cells(Monat.Row + 1, Monat.Column), .Cells(Monat.Row + 5, Monat.Column)).Copy Sheets("Tabelle1").Range("B15")
End If
End With
End Sub
Private Sub CopyMonthRange(ByRef M)
Dim Monat As Range
With Sheets("Kalender")
Set Monat = .Rows(14).Find(M, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not Monat Is Nothing Then
With .Columns(Monat.Column)
Range(.Rows(Monat.Row + 1), .Rows(Monat.Row + 5)).Copy Sheets("Tabelle1").Range("B15")
End With
End If
End With
End Sub
Gruß Dieter
Hallo nochmal!
Wenn das auch nicht funktioniert, dann versuch das:
um sicher zu gehen, das auch nur Strings mit Inhalt gesucht werden.
Gruß Dieter
PS. Dachte ich mir, dass die vorherigen Versionen auch nicht funktionieren, insofern der Test auf Leerstring
Wenn das auch nicht funktioniert, dann versuch das:
Private Sub CopyMonthRange(ByVal M As String)
Dim Monat As Range
If M = "" Then Exit Sub
With Sheets("Kalender")
Set Monat = .Rows(14).Find(M, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
End With
If Not Monat Is Nothing Then
Range(Monat.Offset(1, 0), Monat.Offset(39, 0)).Copy Sheets("Tabelle1").Range("B15")
End If
End Sub
Gruß Dieter
PS. Dachte ich mir, dass die vorherigen Versionen auch nicht funktionieren, insofern der Test auf Leerstring
Hallo Mike!
Tja, was soll ich sagen Bei mir funktioniert es einwandfrei und der Code ist soweit auch korrekt?
Ich habe leider keine Ahnung, was bei Dir dazwischen funken könnte. eventuell eine Erreignis-Verarbeitung???
Hast Du's schon mit einer einfachen Mappe ohne weiteren VBA-Code versucht, in der nur das Tabellenblatt "Kalender" geschützt ist und in der Zelle K14 den Monat Juni und darunter 1,2,3,4.... eingibst und dann mit einer Test-Sub einfach die Copy-Sub mit "Juni", so wie bei meiner allerersten Anwort, aufrufst?
Gruß Dieter
Tja, was soll ich sagen Bei mir funktioniert es einwandfrei und der Code ist soweit auch korrekt?
Ich habe leider keine Ahnung, was bei Dir dazwischen funken könnte. eventuell eine Erreignis-Verarbeitung???
Hast Du's schon mit einer einfachen Mappe ohne weiteren VBA-Code versucht, in der nur das Tabellenblatt "Kalender" geschützt ist und in der Zelle K14 den Monat Juni und darunter 1,2,3,4.... eingibst und dann mit einer Test-Sub einfach die Copy-Sub mit "Juni", so wie bei meiner allerersten Anwort, aufrufst?
Gruß Dieter
Hallo Mike!
Da war doch noch die Sache mit dem NoChange = True/False, dass musst Du hier auch anwenden
Gruß Dieter
Da war doch noch die Sache mit dem NoChange = True/False, dass musst Du hier auch anwenden
Gruß Dieter
Zitat von @xaumichi:
Hm...mir ist jetzt noch was aufgefallen:
Ist es möglich, dass etwas mit dem 2. Offset nicht hinhaut?
den beim 1. Offset bekomm ich eine gelbe Infobox, wenn ich mit Maus darauf zeige, beim 2. Offset kommt nichts.
Was meinst Du jetzt, die Sache mit der Validation.ShowInput-Geschichte? Wenn ja, dann habe ich aus dem Stehgreif auch keine Antwort daraufHm...mir ist jetzt noch was aufgefallen:
Ist es möglich, dass etwas mit dem 2. Offset nicht hinhaut?
den beim 1. Offset bekomm ich eine gelbe Infobox, wenn ich mit Maus darauf zeige, beim 2. Offset kommt nichts.
Gruß Dieter
Hallo Mike!
Ja, steht denn in Zeile 53 auch was drinnen?
Und hats mit einer normalen Mappe funktioniert?
Gruß Dieter
Ja, steht denn in Zeile 53 auch was drinnen?
Und hats mit einer normalen Mappe funktioniert?
Gruß Dieter
Hallo Mike!
Da fehlen mir echt die Worte:'(, was hast denn für eine Sch... Excel-Version
Mach mal testweise vor die besagte Zeile ein Kommentarzeichen und schreib mal hin:
ob denn das weningstens funktioniert
Gruß Dieter
PS. Eine Frage habe ich aber noch und zwar, ob in den zu kopierenden Zellen nur Werte oder Formeln drin stehen?
Da fehlen mir echt die Worte:'(, was hast denn für eine Sch... Excel-Version
Mach mal testweise vor die besagte Zeile ein Kommentarzeichen und schreib mal hin:
Sheets("Kalender").Range("K14:K53").Copy Sheets("Tabelle1").Range("B15") |
Gruß Dieter
PS. Eine Frage habe ich aber noch und zwar, ob in den zu kopierenden Zellen nur Werte oder Formeln drin stehen?
Hallo Mike!
Und hast Du das mit dem .....Range("K15:K53").Copy getestet?
Und/oder setze mal vor das Sheets ein Kommentarzeichen, um zu sehen, ob der Copy-Befehl funktioniert bzw einen Debuggerfehler erzeugt
Gruß Dieter
Und hast Du das mit dem .....Range("K15:K53").Copy getestet?
Und/oder setze mal vor das Sheets ein Kommentarzeichen, um zu sehen, ob der Copy-Befehl funktioniert bzw einen Debuggerfehler erzeugt
Range(Monat.Offset(1, 0), Monat.Offset(39, 0)).Copy 'Sheets("Tabelle1").Range("B15") |
Gruß Dieter
Hallo Mike!
Test mal das hier
und schau was die MsgBox anzeigt?
Gruß Dieter
Test mal das hier
Private Sub CopyMonthRange(ByVal M As String)
Dim Monat As Range, B As String, E As String, R As String
If M = "" Then Exit Sub
With Sheets("Kalender")
Set Monat = .Rows(14).Find(M, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
End With
If Not Monat Is Nothing Then
B = Monat.Offset(1, 0).Address
E = Monat.Offset(39, 0).Address
R = Range(Monat.Offset(1, 0), Monat.Offset(39, 0)).Address
MsgBox "Begin = " & B & ", End = " & E & ", Range = " & R
'Range(Monat.Offset(1, 0), Monat.Offset(39, 0)).Copy Sheets("Tabelle1").Range("B15")
End If
End Sub
Gruß Dieter
Zitat von @xaumichi:
Ich bekomme bei:
wieder diesen Fehler, dass 'Range' vom Objekt '_Worksheets' nicht übertützt wird!
Seltsam, seltsam?Ich bekomme bei:
R = Range(Monat.Offset(1, 0), Monat.Offset(39, 0)).Address
Hab jetzt versucht:
Jetzt funktioniert zwar das Kopieren, allerdings kopiert er mir nun die Werte nicht vom TB "Kalender" sondern von dem
TB, wo die "Monatswahl" stattfindet!
Ja, das kann natürlich nicht funktionieren, da jetzt das gerade Aktive Sheet als Quelle genommen wird Range(B, E).Copy Sheets("Tabelle1").Range("B15")
Jetzt funktioniert zwar das Kopieren, allerdings kopiert er mir nun die Werte nicht vom TB "Kalender" sondern von dem
TB, wo die "Monatswahl" stattfindet!
Dann sollte eigentlich das jetzt funktionieren:
Private Sub CopyMonthRange(ByVal M As String)
Dim Monat As Range, B As String, E As String, R As String
If M = "" Then Exit Sub
With Sheets("Kalender")
Set Monat = .Rows(14).Find(M, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not Monat Is Nothing Then
.Range(Monat.Offset(1, 0), Monat.Offset(39, 0)).Copy Sheets("Tabelle1").Range("B15")
End If
End With
End Sub
Gruß Dieter
Hallo Mike!
Gruß Dieter
Zitat von @xaumichi:
Das kappier ich nicht!
Das ist doch der selbe Code wie oben, außerdem werden B, E und R niergends verwendet, obwohl du sie definierst...oder
überseh ich da was?
Ja, wenn Du mal etwas genauer hinsiehst, dann wird Dir eventuell auffallen, dass sich die Copyzeile jetzt innerhalb der With-Anweisung befindet und das Range noch einen Punkt bekommen hatDas kappier ich nicht!
Das ist doch der selbe Code wie oben, außerdem werden B, E und R niergends verwendet, obwohl du sie definierst...oder
überseh ich da was?
Gruß Dieter