Suchfeld + RangeSelect und Rangecopy

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

Betrifft: Suchfeld + RangeSelect und Rangecopy
von: Malte Ludwig
Geschrieben am: 21.06.2015 20:16:04

Hallo ihr Lieben!
Ich bin nicht gerade bewandert was das Programmieren von Excel Makros oder VBA angeht, aber wenn sich ein Problem offenbart, dann muss ich es einfach lösen.
Es geht wahrscheinlich eher um die Verkettung mehrerer Probleme, ich schildere erst einmal die ersten beiden "Steps".
Ich habe eine Mappe mit einer Tabelle (Tabelle 1). In dieser Tabelle sind Personen aufgelistet, pro Name gibt es einen Zellverbund (Bsp.: Otto Schmidt = Zellverbund B10,B11).
Hinter diesen Namen stehen in den Spalten D bis J dem Namen zugeordnete Werte.
Step1:
Ich hätte gerne ein Suchfeld, welches in Spalte B den Namen sucht, und diese, sowie die dazugehörigen Spalten D bis J markiert (Bsp.: Otto Schmidt wird gesucht, als Ergebnis der Suche werden die Zellen B10:J11 markiert.
Step2:
Nun möchte ich mit einem Button die markierten Zellen auf eine zweite (entweder versteckte oder vom Makro/VBA angelegte Tabelle kopieren.
Das ist im Prinzip schon alles,
ich beschreibe zum ersten mal solcherlei, also wenn noch Infos fehlen dann werde ich sie natürlich anfügen.
Danke vielmals im Voraus!
Malte

Bild

Betrifft: Beispielmappe! o.T.
von: Sepp
Geschrieben am: 21.06.2015 21:08:15

Gruß Sepp


Bild

Betrifft: AW: Beispielmappe! o.T.
von: Malte Ludwig
Geschrieben am: 21.06.2015 21:32:37
Hallo Sepp,
ich kann leider mit deiner Antwort nichts konkretes anfangen, gehe aber davon aus, dass du möchtest, dass ich eine Beispielmappe anhänge?
Werde ich first thing tomorrow erledigen, wenn ich das falsch interpretiert habe, korrigiere mich bitte.
lg
Malte

Bild

Betrifft: AW: Beispielmappe! o.T.
von: Sepp
Geschrieben am: 21.06.2015 21:43:27
Hallo Malte,
genau, eine kleine Beispielmappe reicht schon, wenn jemand anderer das nachbaut sieht es nämlich sicher anders aus.

Gruß Sepp


Bild

Betrifft: AW: Beispielmappe! o.T.
von: Malte Ludwig
Geschrieben am: 22.06.2015 07:44:43
https://www.herber.de/bbs/user/98363.xlsx
Hier die Beispielmappe

Bild

Betrifft: AW: Suchfeld + RangeSelect und Rangecopy
von: fcs
Geschrieben am: 21.06.2015 22:11:55
Hallo Malte,
verbunden Zellen in einer Liste sind keine optimale Lösung.
Ich hab dir mal ein kleines Userform gebastelt. Dieses wird angezeigt wenn du auf die Schaltfläche klickst. Dort kannst du in der Combobox den Namen auswählen und falls gewünscht die Daten kopieren.
Das Modul und das Userform kannst du im VBA-Editor per Drag und Drop aus meiner in deine Datei kopieren, und musst dann ggf. im Userformcode noch ein paar kleinigkeiten anpassen (Zeilen-Nummern, Blattnamen, Zielzelle für das Einfügen).
Dann musst du in Tabelle1 eine Schaltfläche (aus den Formularsteuerelementen) einfügen und das Anzeigen-Makro zuweisen.
Gruß
Franz
https://www.herber.de/bbs/user/98360.xlsm

Bild

Betrifft: AW: Suchfeld + RangeSelect und Rangecopy
von: Malte Ludwig
Geschrieben am: 22.06.2015 08:17:01
Hallo Franz,
vielen Dank für deine Hilfe!
Ich Weiß, dass Zellenverbunde (-bünde?!) nicht optimal sind, aber ich brauche in den Folgespalten die zwei untereinander liegenden Zellen (die auch per VBA verknüpft sind).
Ich werde mal ein bisschen rumbasteln mit dem Code und dem Makro, und melde mich, wenn ich Probleme bekomme.
lg
Malte

Bild

Betrifft: AW: Suchfeld + RangeSelect und Rangecopy
von: Malte Ludwig
Geschrieben am: 22.06.2015 08:50:32
So, habe mal ein wenig rumprobiert.
Leider kenne ich mich mit VBA null aus. Da ich die Spalte C nicht mit kopieren möchte, habe ich versucht das so in VBA einzugeben, dass nur die Zellen Bx und Bx+1, sowie die Zellen Dx:Jx+1 kopiert werden.
Allerdings hast du in deinem Code (soweit ich das verstanden habe) irgendwie den Begriff Zeile Definiert, damit er genau das ausspuckt was aktuell dabei rauskommt.
Frage: Ist es einfacher den Begriff "Zeile" neu zu definieren um Spalte C nicht mit in der Range zu haben, oder muss ich einen neuen Begriff definieren um die "beiden" Ranges zu trennen?
lg

Bild

Betrifft: AW: Suchfeld + RangeSelect und Rangecopy
von: Malte Ludwig
Geschrieben am: 22.06.2015 10:38:48
Hab das Problem der Range mit Union gelöst, Spalte C wird jetzt nicht mehr mit kopiert.
Union(Range(.Cells(Zeile, 2), .Cells(Zeile + 1, 2)), Range(.Cells(Zeile, 4), .Cells(Zeile + 1, 10)))
Soll ich zu meiner Folgefrage einen neuen Thread aufmachen der Suche wegen?

Bild

Betrifft: AW: Suchfeld + RangeSelect und Rangecopy
von: Malte Ludwig
Geschrieben am: 22.06.2015 12:32:29
Ich habe jetzt mal versucht das Userform auf mein Originaldokument zu übertragen. Habe UserForm und Modul per Drag&Drop aufs Dokument gezogen, eine zweite versteckte Tabelle hinzugefügt und diese umbenannt sowie formatiert nach deinem Beispiel.
Wenn ich jetzt auf meinen neu angelegten Button klicke, dann bekomme ich einen
Laufzeitfehler 9
Index außerhalb des gültigen Bereichs
im Modulcode.
Folgende Zeile wird vom Debugger markiert:
UserForm_Kopieren.Show
Das passiert allerdings nur, wenn ich das Makro aus meinem eigenen Dokument verknüpfe. Wenn ich das Makro aus deinem Dokument verknüpfe, dann taucht auch tatsächlich das UserForm auf, zeigt aber (logischerweise) die Namen aus deinem Dokument an.
lg

Bild

Betrifft: gelöst
von: Malte Ludwig
Geschrieben am: 22.06.2015 12:48:16
Soo...
Tut mir Leid, dass ich mir hier so viel selbst beantworte. Problem gelöst, falsche Benennung der Tabelle1 war schon alles.
Vielen Dank nochmal für die schnelle und professionelle Hilfe euch beiden!
lg
Malte

Bild

Betrifft: AW: Suchfeld + RangeSelect und Rangecopy
von: Malte Ludwig
Geschrieben am: 22.06.2015 12:59:54
Nächste (und letzte) Frage zu diesem Problem und Code:
In welcher der Zeilen im Code kann ich den Ort (die Zelle/Range) definieren wo der kopierte Inhalt auftauchen soll?
Im Moment "droppt" der Code die Kopie ja bei A2:H3, welche Variablen im Code sprechen diesen Standort an?
Danke im Voraus!
Malte

Bild

Betrifft: AW: Suchfeld + RangeSelect und Rangecopy
von: fcs
Geschrieben am: 22.06.2015 22:00:31
Hallo Malte,
wenn die Zellenbereiche, die kopiert werden sollen nicht zusammenhängen, dann müssen die Zellbereiche separat kopiert werden. Verbundene Zellen können zusätzlich Kummer bereiten, ggf. muss man die Spaltenbereiche jeweils separat kopieren.
Die Zielzellen sind im Code fest vorgegeben. Es ist der Destination-Parameter der Copy-Anweisug. Ich hab die Zielbereiche mal zum leichteren Verständnis in die A1-Schreibweise umgesetzt.
Gruß
Franz

Private Sub cmbKopieren_Click()
    'Selektieren Zellbereich zum Namen in eine Kopie des Musterblattes kopieren
    Dim wksZiel As Worksheet, Zeile As Long
    With Me.ComboBox_Namen
    If .ListIndex <> -1 Then
        Zeile = .List(.ListIndex, 1)
        
        wksMuster.Visible = xlSheetVisible
'        wksMuster.Copy 'neue Mappe
        wksMuster.Copy after:=wksData 'neues Blatt
        
        Set wksZiel = ActiveSheet
        wksMuster.Visible = xlSheetHidden
        
        wksZiel.Name = .Text
        
        With wksData
            'Datenbereich zum Namen nach Zelle A2 kopieren
'            .Range(.Cells(Zeile, 2), .Cells(Zeile + 1, 10)).Copy wksZiel.Cells(2, 1)
'Zellbereich aus Spalte B nach A2:A3 kopieren
            .Range(.Cells(Zeile, 2), .Cells(Zeile + 1, 2)).Copy _
                Destination:=wksZiel.Range("A2:A3")
'Zellbereich aus Spalte D:J nach B2:H3 kopieren
            .Range(.Cells(Zeile, 4), .Cells(Zeile + 1, 10)).Copy _
                Destination:=wksZiel.Range("B2:H3")
        End With
        Unload Me
    Else
        MsgBox "Bitte erst einen Namen in der Combobox wählen"
    End If
    End With
End Sub


Bild

Betrifft: AW: Suchfeld + RangeSelect und Rangecopy
von: Malte Ludwig
Geschrieben am: 23.06.2015 08:03:50
Wow, super!
Ich denke ich habe den Code verstanden, mal sehen ob ich ihn auch umsetzen kann
Danke dir vielmals!
Sollte es noch rückfragen geben, melde ich mich, ansonsten ist das Thema glaube ich soweit abgeschlossen.
Liebe Grüße
Malte

Bild

Betrifft: AW: Suchfeld + RangeSelect und Rangecopy
von: Malte Ludwig
Geschrieben am: 27.06.2015 16:59:37
Hallo Franz!
Habe versucht, deinen Code auf mehrere Seiten des wkb zu erweitern, aber anscheinend habe ich etwas falsch gemacht. hier mein codebit wo der Debugger mich hinschickt mit der Fehlermeldung:
"Die Select Methode des Range-Objektes konnte nicht ausgeführt werden."


Private Sub ComboBox_Namen_Change()
    'Zellbereich zum selektierten Namen selektieren
    Dim wksZiel As Worksheet, Zeile As Long
    With Me.ComboBox_Namen
        If Me.ComboBox_Namen.ListIndex <> -1 Then
            Zeile = .List(.ListIndex, 1)
            With wksData
                Range(.Cells(Zeile, 2), .Cells(Zeile + 1, 23)).Select
            End With
            With wksData2
                Range(.Cells(Zeile, 2), .Cells(Zeile + 1, 18)).Select
            End With
            With wksData3
                Range(.Cells(Zeile, 2), .Cells(Zeile + 1, 27)).Select
            End With
            With wksData4
                Range(.Cells(Zeile, 2), .Cells(Zeile + 1, 29)).Select
            End With
            ActiveWindow.ScrollRow = Zeile
        End If
    End With
End Sub
Ich vermute mal ganz stark, dass ich irgendeinen Grundlegenden Fehler gemacht habe.
Folgendes habe ich sonst noch geändert:

Private Sub UserForm_Initialize()
    Dim Zeile As Long, strName As String
    Set wksData = ThisWorkbook.Worksheets("Tabelle1")
    Set wksData2 = ThisWorkbook.Worksheets("Tabelle2")
    Set wksData3 = ThisWorkbook.Worksheets("Tabelle3")
    Set wksData4 = ThisWorkbook.Worksheets("Tabelle4")
    Set wksMuster = ThisWorkbook.Worksheets("Muster")
    wksData.Activate
    
    'Namen und Zeilennummern in Auswahlliste der Combobox einlesen
    With wksData
        For Zeile = 10 To .Cells(.Rows.Count, 2).End(xlUp).Row Step 2
            strName = .Cells(Zeile, 2).Text
            With Me.ComboBox_Namen
                .AddItem strName
                .List(.ListCount - 1, 1) = Zeile
            End With
        Next
    End With
End Sub
und

Option Explicit
Private wksData As Worksheet
Private wksData2 As Worksheet
Private wksData3 As Worksheet
Private wksData4 As Worksheet
Private wksMuster As Worksheet
Ziel soll es sein, dass es mehrere Range Objekte auf mehreren Seiten gibt, die alle auf das Musterblatt kopiert werden. Ob das nacheinander passiert oder ob alles gleichzeitig ausgewählt wird spielt dabei glaube ich keine Rolle.
Danke dir vielmals im Voraus!
LG
Malte

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Datum schreiben"