Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

SelectionChange problem | Herbers Excel-Forum


Betrifft: SelectionChange problem von: verstaubte motte
Geschrieben am: 14.12.2009 14:41:41

hallo,
ich baue mir gerade eine mappe in der ich inventar verwalten möchte. allerdings nur im second level, sprich diese mappe dient ausschliesslich dazu die daten vorzubereiten und über ein entsprechendes plug-in direkt auf einen labeldrucker auszugeben.

ich habe jetzt das problem das ich wenn daten eingegeben werden diese noch weiter berechnet werden.
das geht auch alles, bis auf das suchen nach den ergebnissen. diese sind leider ALLE berechnet oder mit entsprechenden funktionen neu aufgeteilt (Text/EAN). wie kann ich die untenstehende suche so gestalten das ich nach den werten suchen kann??

bei der SuFu benutze ich dieses script welches ich mir mal irgendwann aus einem anderen forum _
kopiert habe:



Private Sub EAN_Suche_Click()
    Dim raZelle As Range                            ' Variable für die zu suchende Zelle
    Dim varSuchbegriff As Variant                   ' Variable für den Suchbegriff
    Dim strAbfrage As String                        ' Variable für den Abbruch der Suche
    Dim strStartAdresse As String                   ' Variable für die Adresse der ersten  _
gefundenen Zelle in der aktuellen Tabelle
    Dim wsTabelle As Worksheet                      ' Variable für Tabelle als Objekt
'   Suchbegriff abfragen
    varSuchbegriff = InputBox("Bitte eine EAN oder genauen Begriff eingeben:", "Suchabfrage", "" _
 _
 _
)
'   ein Suchbegriff wurde eingegeben
    If varSuchbegriff <> "" Then
'       Schleife über alle Tabellen
        For Each wsTabelle In ThisWorkbook.WorkSheets
            With WorkSheets(wsTabelle.Name)
'               Suchbegriff im benutzten Bereich suchen
                Set raZelle = .UsedRange.Find(varSuchbegriff, , , xlWhole, , xlNext)
'               wenn Suchbegriff gefunden
                If Not raZelle Is Nothing Then
'                   gefundene Zelle in die linke obere Ecke
                    Application.Goto Reference:=.Range(raZelle.Address), Scroll:=True
                    If MsgBox(wsTabelle.Name & Chr(9) & raZelle.Address(0, 0) & Chr(10) & Chr(   _
 _
 _
_
10) & "Suche beenden?" _
                        , vbYesNo + vbQuestion, "Suchbegriff gefunden in:") = 6 Then
'                       Prozedur verlassen wenn auf Ja geklickt wurde
                        Exit Sub
                    Else
'                       Adresse der ersten gefundenen Zelle auf Variable schreiben
                        strStartAdresse = raZelle.Address
                        Do
'                           nächste Zelle suchen
                            Set raZelle = .UsedRange.FindNext(raZelle)
'                           keine weitere Zelle gefunden, deshalb Schleife verlassen
                            If raZelle.Address = strStartAdresse Then Exit Do
'                           gefundene Zelle in die linke obere Ecke
                            Application.Goto Reference:=.Range(raZelle.Address), Scroll:=True
                            If MsgBox(wsTabelle.Name & Chr(9) & raZelle.Address(0, 0) & Chr(10)  _
 _
 _
 _
& Chr(10) & "Suche beenden?" _
                                , vbYesNo + vbQuestion, "Suchbegriff gefunden in:") = 6 Then
'                               Prozedur verlassen wenn auf Ja geklickt wurde
                                Exit Sub
                            End If
                        Loop
                    End If
                Else
'                   laufende Tabelle ist nicht die letzte
                    If wsTabelle.Index <> WorkSheets.Count Then
                        If MsgBox(wsTabelle.Name & Chr(10) & Chr(10) & "Suche beenden?" _
                             , vbYesNo + vbQuestion, "Suchbegriff nicht gefunden in:") = 6 Then
'                            Prozedur verlassen wenn auf Ja geklickt wurde
                             Exit Sub
                        End If
                    Else
'                       Information, dass in der letzten Tabelle der Suchbegriff nicht vorkommt
                        If MsgBox(wsTabelle.Name & Chr(10) & Chr(10) & "Suche beendet",  _
vbOKOnly + vbExclamation, _
                            "Suchbegriff nicht gefunden in:") = vbOK Then Exit Sub
                    End If
                End If
            End With
        Next wsTabelle
'       Information, dass Suche beendet
        MsgBox "Keine weitere Zelle gefunden", vbExclamation, "Suche beendet"
'       Variable leeren
        Set raZelle = Nothing
    End If
End Sub

oder kennt jemand eine andere möglichkeit??

so und jetzt mein eigentliches problem wie im titel beschrieben.....

ob obiger probleme bediene ich mich dieses codes

Sub Suche_SelectionChange(ByVal Target As Excel.Range)
Sheets("Zeitschr").Range("c3:c1000").Copy
Sheets("Zeitschr").Range("a3:a1000").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub um eine indexzeile als text zu bekommen nach der ich suchen kann.
auch wieder ein problem für mich da ich es nicht hinbekomme diese anweisung für alle blätter geltend zu machen. ich kann immer nur ein blatte behandeln.

wenn das mit einem rutsch funktionieren würde könnte ich mit dem rest erstmal leben, da die SuFu nur zum pflegen der daten gedacht ist.

werde mich irgendwann dann mal um eine andere lösung bemühen wenn ich nicht mehr so im anfängerdschungel stecke.

hoffe ihr könnt mir da weiter helfen.

  

Betrifft: warum so umständlich formuliert??? von: Björn B.
Geschrieben am: 18.12.2009 10:22:51

Hallo,

ich frage mich immer wieder, wie manche Leute (in diesem Fall Du), solche Makros hinbekommen, und dann solche Fragen stellen.
Du willst was machen, schaust aber nicht in die Hilfe und benutzt auch den Makrorekorder nicht.
Schau in die Hilfe, da steht zu dem Befehl "Find":
Ausdruck.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
Wenn Du Dir das richtig durchliest, dann wirst Du finden, dass Du mit "lookin:=xlvalues" in den Werten suchen kannst.

Genauso kannst du den Makrorekorder benutzen und einfach ein suchfenster öffnen, den gewünschten Vorgang aufzeichnen und schon hast du die entsprechende Zeile.
Sieht dann bei mir so aus...

    Cells.Find(What:="Test", After:=ActiveCell, LookIn:=xlValues, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
Oder ich verstehe Dein Problem nicht...

Statt dessen schreibst du hier ne Seite lang ne Frage, die schon den völlig falschen Betreff hat.
So wie ich die verstehe, willst du wissen, wie man mit Find in Werten sucht.
Dann schreib doch auch bitte im Betreff: "in Werten suchen" oder was anderes aussagekräftiges.
Und die Frage könnte auch viel kürzer sein:
"Hallo,

kann ich irgendwie die Suchen-Funktion so anpassen, dass sie nur in Werten sucht?

Vielen Dank für Eure Hilfe.
..."
Das hätte gereicht.

Bitte nicht falsch verstehen, ist nicht böse gemeint, sondern als Hinweis, warum wahrscheinlich bisher keiner geantwortet hat.
Einfache Frage, schnelle Antwort.
Manchmal ist weniger mehr.

Du hättest Dir und allen "Lesern" bzw. Antwortern viel Zeit sparen können.

Gruß
Björn B.


Beiträge aus den Excel-Beispielen zum Thema "SelectionChange problem"