Archiv verlassen und diese Seite im Standarddesign anzeigen : VBA mit Excel - Zeile suchen und auslesen
Geldmann3
2013-04-23, 13:05:23
Hallo Leute,
Ich arbeite gerade an einem Projekt mit VBA. Es gibt ein Suchformular in welches man die ID eines Produktes eintragen kann, (die sich immer in Spalte 2 der Tabelle befindet und verglichen werden soll) anschließend sollen die Zellen der Zeile in welcher sich die richtige ID befindet einzeln in Textboxen ausgegeben werden.
Zu diesem Zweck habe ich mich schon mal an einem Mini-Suchalgorithmus (https://www.google.de/search?safe=off&client=firefox-a&hs=TkH&rls=org.mozilla:de:official&q=Suchalgorithmus&spell=1&sa=X&ei=Jmp2UZmUN8PRtAbC6YHABw&ved=0CC8QvwUoAA&biw=1280&bih=943) versucht.
Private Sub icalad_Click()
tabelle.Activate
Dim intRow As Integer
For intRow = 1 To [Bis zum Tabellenende]
If IDTextbox.Text = cell(intRow, 2).Text Then
artbe.Text = cell(intRow, 1).Text (Hier soll die dazu passende Artikelbeschreibung in die Textbox eingelesen werden)
exit for
End If
Next intRow
End Sub
So funktioniert das leider nicht.
Sub or Function not defined
Jemand einen Tipp?
Private Sub icalad_Click()
Dim intRow As Integer
Worksheets("tabelle").Activate
For intRow = 1 To Cells.SpecialCells.xlCellTypeLastCell.row
If IDTextbox.Text = cell(intRow, 2).Text Then
artbe.Text = cell(intRow, 1).Text (Hier soll die dazu passende Artikelbeschreibung in die Textbox eingelesen werden)
exit for
End If
Next intRow
End Sub
Statt mit Cells.SpecialCells.xlCellTypeLastCell.row die letzte benutzte Zelle in deiner Tabelle anzusprechen, was ja nicht immer dem gewünschten Verhalten entspricht, kannst du eine Schleife verwenden, die die Anzal der verwendeten Zeilen zählt.
Range("A2").Select
Zeilenzahl = Selection.CurrentRegion.Rows.Count
Geldmann3
2013-04-23, 14:18:07
Stimmt, ist sicher hilfreich. Leider bekomme ich beim Klick auf den Button weiterhin eine Fehlermeldung
Compile error:
Argument not optional
Der aktuelle Quelltext sieht jetzt so aus:
Private Sub icalad_Click()
Dim intRow As Integer
Worksheets("tabelleica").Activate
For intRow = 1 To Cells.SpecialCells.xlCellTypeLastCell.Row
If artnr.Text = cell(intRow, 2).Text Then
artbe.Text = cell(intRow, 1).Text
Exit For
End If
Next intRow
End Sub
Rockhount
2013-04-23, 21:55:31
cell(intRow, 2).Text
=> müsste imo Cells(intRow,2).Text lauten
wobei ich nicht weiss, ob .Text funktioniert oder Du .Value nehmen musst.
Hamster
2013-04-23, 23:13:08
Als Anregung, sollte funktionieren. Ggf. Userform & Tabellennamen anpassen.
Eine Rückmeldung wäre schön, obs geklappt hat.
Sub start()
UserForm1.Show
End Sub
Function icalad_click()
Dim intRow As Integer
For intRow = 1 To Tabelle1.UsedRange.Rows.Count Step 1
If UserForm1.artnr.Text = Tabelle1.Cells(intRow, 2).Value Then
UserForm1.artbe.Text = Tabelle1.Cells(intRow, 1).Value
Exit For
End If
Next
End Function
In der Userform steht folgendes wenn du auf den Button drückst:
Private Sub CommandButton1_Click()
Application.Run icalad_click
End Sub
Du kannst natürlich obigen Code direkt als Private Sub beim Drücken des Buttons ausführen. Da ich allerdings dein Programm drumherum nicht kenne, habe ich nur mal auf die schnelle etwas funktionsfähiges nachgebildet.
Geldmann3
2013-04-26, 09:01:55
Danke, funktioniert. Hat mir sehr weiter-geholfen.
Bin daran fast schon verzweifelt, hast dir n' Bier verdient :wink:
:ubeer:
Geldmann3
2013-04-29, 11:21:10
Haben nun folgendes Problem, wie können wir von einem
Workbook -> Worksheet in ein Anderes schreiben haben diesen Code zur Zeit:
Dim lngRow As Long
Dim intAnza As Integer
Dim objBuch As Excel.Application
Dim objbuchtab As Worksheet
Dim objtabica As Worksheet
Dim objWaren As New Excel.Application
objBuch.Workbooks.Open ("C:\Warenkorb\Buchungsliste.xls")
Set objbuchtab = objBuch.Sheets("Buchungsliste")
objBuch.EnableEvents = False
objBuch.DisplayAlerts = False
objWaren.Workbooks.Open ("C:\Users\DBElite\Desktop\Warenkorb\Warenkorb ICA und H&W.xlsm")
Set objtabica = objWaren.Sheets("ICA")
objWaren.EnableEvents = False
objWaren.DisplayAlerts = False
For lngRow = 1 To objtabica.UsedRange.Rows.Count Step 1
objBuch.Workbooks.Open "C:\Users\DBElite\AppData\Local\VirtualStore\Buchungsliste.xlsm"
Set objbuchtab = objBuch.Sheets("Buchungsliste")
objBuch.EnableEvents = False
objBuch.DisplayAlerts = False
objWaren.Workbooks.Open "C:\Users\DBElite\Desktop\Warenkorb\Warenkorb ICA und H&W.xlsm"
Set objtabica = objWaren.Sheets("ICA")
objWaren.EnableEvents = False
objWaren.DisplayAlerts = False
If icaeinsc.icascan.Text = objtabica.Cells(lngRow, 2).Value Then
intAnza = CInt(objtabica.Cells(lngRow, 6).Value)
If intAnza = 0 Then
MsgBox ("Der Artikel ist nicht vorhanden")
objBuch.ActiveWorkbook.SaveAs ("C:\Users\DBElite\AppData\Local\VirtualStore\Buchungsliste.xls")
objBuch.ActiveWorkbook.Close savechanges:=False
objWaren.Quit
objBuch.Quit
Exit For
Else
objbuchtab.Cells(1, 1).End(xlDown).Offset(1, 0) = objtabica.Cells(lngRow, 1).Value
objbuchtab.Cells(1, 1).End(xlDown).Offset(0, 1) = objtabica.Cells(lngRow, 2).Value
objbuchtab.Cells(1, 1).End(xlDown).Offset(0, 2) = objtabica.Cells(lngRow, 3).Value
objbuchtab.Cells(1, 1).End(xlDown).Offset(0, 3) = objtabica.Cells(lngRow, 4).Value
objbuchtab.Cells(1, 1).End(xlDown).Offset(0, 4) = objtabica.Cells(lngRow, 5).Value
objbuchtab.Cells(1, 1).End(xlDown).Offset(0, 5) = objtabica.Cells(lngRow, 6).Value
objbuchtab.Cells(1, 1).End(xlDown).Offset(0, 6) = objtabica.Cells(lngRow, 7).Value
objbuchtab.Cells(1, 1).End(xlDown).Offset(0, 7) = objtabica.Cells(lngRow, 8).Value
intAnza = -1
objtabica.Cells(lngRow, 6).Value = intAnza
objBuch.ActiveWorkbook.SaveAs ("C:\Users\DBElite\AppData\Local\VirtualStore\Buchungsliste.xls")
objBuch.ActiveWorkbook.Close savechanges:=False
objWaren.Quit
objBuch.Quit
End If
Exit For
End If
Next
End Sub
Rockhount
2013-04-29, 20:58:01
Ich werd daraus irgendwie nicht 100% schlau.
Was willst Du machen?
Von wo nach wo kopieren?
Welche Fehler bekommst Du?
1.WB als "Variablen" initialisieren...funktioniert das so wie Du es gemacht hast? Ich würds so machen:
Dim wb1, wb2 As Workbook
Dim ws1, ws2 As Worksheet
Workbooks.Open ("C:\Warenkorb\Buchungsliste.xls")
Set wb1 = Workbooks("Buchungsliste.xls")
Set ws1 = wb1.Sheets("Buchungsliste")
ws1.EnableEvents = False
ws1.DisplayAlerts = False
Workbooks.Open ("C:\Users\DBElite\Desktop\Warenkorb\Warenkorb ICA und H&W.xlsm")
Set wb2 = Workbooks("Warenkorb ICA und H&W.xlsm")
Set ws2 = wb1.Sheets("ICA")
ws2.EnableEvents = False
ws2.DisplayAlerts = False
In Deinem Code werden beide Bücher später nochmal geöffnet ohne vorher geschlossen worden zu sein...ist das gewollt?
2.Das dürfte nicht funktionieren:
objbuchtab.Cells(1, 1).End(xlDown).Offset(1, 0) = objtabica.Cells(lngRow, 1).Value
Vorausgesetzt Du willst von objbuchtab nach objtabica kopieren, dann probier mal:
objtabica.Cells(lngRow, 1).FormulaR1C1 = objbuchtab.Cells(1, 1).End(xlDown).Offset(1, 0).Value
3.Die hier hast Du nicht erstellt:
objWaren.Quit
objBuch.Quit
Wo kommen die her?
Hamster
2013-04-29, 22:31:55
Ich werde ebenfalls nicht schlau daraus.
Was genau willst du machen? Schreib doch bitte noch ein bisschen Prosa dazu, damit dein Anliegen verständlicher wird :)
Geldmann3
2013-04-30, 09:34:58
Also es geht darum das ich versuchen möchte von der einen Tabelle in die andere schreiben möchte und zwar ans ende der letzteren Tabelle in dem Fall:
von objtabica nach letzte Zeile objbuchtab
Rockhount
2013-04-30, 10:22:40
Also es geht darum das ich versuchen möchte von der einen Tabelle in die andere schreiben möchte und zwar ans ende der letzteren Tabelle in dem Fall:
von objtabica nach letzte Zeile objbuchtab
Und welche Fehlermeldung kommt da?
Du musst schon ein paar Infos rausrücken, sonst ist es schwer, Dir zu helfen.
Vielleicht kannst Du Deinen Code auch mal entsprechend kommentieren (sehr sinnvoll, wenn jemand anderes als Du den Code nachvollziehen können muss) ;)
Geldmann3
2013-04-30, 10:30:34
Danke hat sich erledigt
Rockhount
2013-04-30, 10:56:34
Danke hat sich erledigt
Kannst Du vielleicht die Lösung posten, damit andere auch was davon haben?
Geldmann3
2013-04-30, 13:27:06
Ok dann ma die Lösung
Private Sub icabestsc_Click()
'Variablen Deklarieren
Dim strmatnr, strartbez As String
Dim lngRow As Long
Dim varAnza As Variant
Dim objBuch, objWaren As Workbook
Dim objbuchtab, objtabica As Worksheet
'Öffnen des noch nicht geöffnetem Workbook
Workbooks.Open ("C:\Warenkorb\Buchungsliste.xls")
'Workbooks und Sheets zuweisen
Set objBuch = Workbooks("Buchungsliste.xls")
Set objbuchtab = objBuch.Sheets("Buchungsliste")
Set objWaren = Workbooks("Warenkorb ICA und H&W.xlsm")
Set objtabica = objWaren.Sheets("ICA")
'Kopfgesteuerte Zählerschleife
For lngRow = 1 To objtabica.UsedRange.Rows.Count Step 1
'Vergleichen von Eingabe und der Zelle
If icaeinsc.icascan.Text = objtabica.Cells(lngRow, 2).Value Then
'Einlesen der Stückzahl
varAnza = objtabica.Cells(lngRow, 6).Value
If varAnza = "0" Then
MsgBox ("Der Artikel ist nicht vorhanden")
Exit For
Else
'Tabelle 1 aktivieren
objtabica.Activate
cells(1, 1).Activate
'Gewünschte Informationen auslesen
strmatnr = objtabica.Cells(lngRow, 2).Value
strartbez = objtabica.Cells(lngRow, 1).Value
'Ziel Tabelle auswählen
objbuchtab.Activate
Cells(1, 1).Activate
'in Zieltabelle ans Ende der Tabelle Schreiben
Cells(1, 1).End(xlDown).Offset(1, 0) = strartbez
Cells(1, 1).End(xlDown).Offset(0, 1) = strmatnr
Cells(1, 1).End(xlDown).Offset(0, 2) = icainstandaus.icainstnra.Text
Cells(1, 1).End(xlDown).Offset(0, 3) = icainstandaus.icakurzau.Text
Cells(1, 1).End(xlDown).Offset(0, 4) = Date
Cells(1, 1).End(xlDown).Offset(0, 5) = "Ausgebucht"
'Wieder die Quelltabelle öffnen
objtabica.Activate
'Stückzahlwert um 1 verringern
varAnza = objtabica.Cells(lngRow, 6).Value
objtabica.Cells(lngRow, 6).Value = varAnza - 1
End If
Exit For
End If
Next
End Sub
Nochmal Danke für eure Hilfe falls was ist melde ich mich nochmal :smile:
Rockhount
2013-04-30, 15:44:08
Danke Dir :D
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.