3k Aufrufe
Gefragt in Tabellenkalkulation von petra65 Experte (1.8k Punkte)
Hallo Guten Morgen,

ich bin mal wieder auf der Suche ... ;-)

Ich habe eine inputBox, dessen Wert ich in eine Zeile schreiben lasse. Dieser Wert befindet sich auch in der Spalte A ab Zeile 5.

Mein Ziel ist es mit diesem Wert weiterzuarbeiten, daher die Frage:
besteht die Möglichkeit diesen Wert in der Spalte A zu suchen und in die gefundene Zelle zu springen ???

Der bestehende Code (A2 wird befüllt) ist:
Option Explicit

Sub KundenDatei_erstellen() .
Dim objWorkbookOpen As Object
Dim eingabe As String
Dim erg%
On Error GoTo ERRORHANDLER
Application.DisplayAlerts = False
eingabe = InputBox("Bitte geben Sie die Kunden - Nummer ein:", "Dateneingabe:")
If IsNumeric(eingabe) Then
Range("A2").Value = eingabe
Else
erg = MsgBox("Es dürfen nur Zahlen eingegeben ... !", vbCritical, "Nur Zahlen eingeben !")
End If

Set objWorkbookOpen = Workbooks.Open(ThisWorkbook.Path & "\_Vorlagen\Vorlage.xls")
With objWorkbookOpen
.Sheets("Tabelle1").Unprotect ("159")
.Sheets("Tabelle1").Range("C3") = ThisWorkbook.Sheets("Kunden").Range("A2")

If Dir(ThisWorkbook.Path & "\Behandlungen\" & .Sheets("Tabelle1").Range("C3") & ".xls") <> "" Then
MsgBox "Datei ist bereits vorhanden ...!!", vbOKOnly + vbCritical, "ACHTUNG"
ActiveWindow.Close
Exit Sub
Else
.SaveAs ThisWorkbook.Path & "\Behandlungen\" & .Sheets("Tabelle1").Range("C3") & ".xls"
.Sheets("Tabelle1").Protect ("159")
End If
End With

ERRORHANDLER:
Application.DisplayAlerts = True
Set objWorkbookOpen = Nothing
End Sub


Nun habe ich auch noch folgendes Makro, dass alleine für sich funktioniert (die entsprechende Zeile wird ausgewählt).
Leider funktioniert es nicht, wenn ich den Code der inputBox im 1. Makro dadurch ersetzte, dann passiert gar nichts:

Sub test()
Dim eingabe As Double
Dim zeile As Integer
eingabe = InputBox("Bitte Kdnr. eingeben", "Eingabe")
If IsNumeric(eingabe) = False Then
MsgBox "Bitte Kdnr. korrekt eingeben"
End If
zeile = Application.WorksheetFunction.Match(eingabe, Range("A5:A65536"), 0)
Rows(zeile + 4).Select
ActiveCell.Select
End Sub

Sieht hier jemand den Fehler ??


Viele Grüße - Petra

5 Antworten

0 Punkte
Beantwortet von
Hi,

Zwei Ansätze:

- Ändere den Datentyp von "eingabe" in einen Zahlentyp (Integer, Long, Double,...) NACHTEIL: Fehler zur Laufzeit, wenn die Eingabe in der InputBox nicht numerisch ist.

-Ändere die Zeile mit dem .Match z.B. wie folgt:
zeile = Application.WorksheetFunction.Match(CDbl(eingabe), Range("A5:A65536"), 0)
"eingabe" muss dann aber auch zwingend numerisch sein.

bye
malSchauen
0 Punkte
Beantwortet von
Hallo Petra,
vielleicht hilft dir der Code weiter.
Gesucht wird der Wert in A2 von A5 bis....

Oder sollte die Eingabe der InputBox gesucht werden?
eingabe = InputBox("Bitte geben Sie die Kunden - Nummer ein:", "Dateneingabe:")

Gruß
fedjo


Sub Suchen()
Dim eingabe As Integer
Dim lngAnz
eingabe = Range("A2").Value
lngAnz = WorksheetFunction.CountIf(Range("A5:A1000"), eingabe)
Sheets(1).Range("A5:A1000").Find(What:=eingabe, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
False).Activate 'Ergebniss wird Select
End Sub
0 Punkte
Beantwortet von petra65 Experte (1.8k Punkte)
Hi,

super .... habe den Code entsprechend abgeändert - und es funktioniert ;-))))

Lt. Google: ist es richtig, dass CDbl den Datentyp von "eingabe" in den Datentyp Double umwandelt ??

Also funktionierte es nicht, da die Datentypen nicht zueinander passten ??


Wie dem auch sei .. vielen Dank

Gruss - Petra
0 Punkte
Beantwortet von
Hi,

Für Infos über die Typwandlungsfunktion stelle den Eingabe-Cursor im VBA-Editor einfach mal auf den entsprechenden Codeteil (CD|bl) und drücke die Taste "F1".
Und nein: Der Datentyp von "eingabe" wird in diesem Fall nicht geändert. "eingabe" ist nach wie vor eine Variable vom Typ String. Allerdings wird so der MatchFunktion ein Wert vom Typ Double übergeben, und .Match sucht nach einer ZAHL.

Warum der Fehler?:
"eingabe" ist vom Typ String. Match suchte also einen TEXT, kann diesen aber in den Zahlen der SpalteA nicht finden. Gleiches wird Dir jetzt immernoch passieren, wenn die zu suchende Zahl nicht in SpalteA vorhanden ist. Kommentiere einfach mal die Zeile On Error GoTo ERRORHANDLER aus. Dann siehst Du was passiert

bye
malSchauen
0 Punkte
Beantwortet von petra65 Experte (1.8k Punkte)
Hallo,

vielen Dank für die Erklärung ....

Werde dann mal noch eine Abfrage einbauen, so dass es zumindest einen Hinweis gibt wenn ein ungüliger Wert, bzw. ein Wert, der nicht vorhanden ist, eingegeben wurde.


Vielen Dank nochmals ...

Gruss - Petra
...