Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Suchen und Ersetzen durch VBA
24.05.2018 16:15:48
Schnider
Guten Tag
Wollte aus diesem Forum, etwas längere Zeit her, einen Code ausprobieren, welcher das Problem von mir in genau trifft, nun finde ich den Beitrag nicht mehr, respektive kann keine Antwort mehr darauf schreiben.
Private Sub CommandButton3_Click()
'   Daten ändern
Dim lZeile As Long
Dim iSpalte As Integer
Dim c As Range
With Sheets("Datenbank").Range("A2:A" & Sheets("Datenbank").Range("A65536").End(xlUp).Row)
Set c = .Find(TextBox1.Value, LookIn:=xlValues)
If Not c Is Nothing Then
lZeile = c.Row
Else: lZeile = Sheets("Datenbank").Range("A65536").End(xlUp).Row + 1
End If
End With
For iSpalte = 1 To 25
Sheets("Datenbank").Cells(lZeile, iSpalte) = Controls("TextBox" & iSpalte)
Next iSpalte
TextBox26.SetFocus
End Sub
Worauf bezieht sich Textbox26? (Ich habe in meinem Formular nur 11 Textboxen und Ausgangspunkt ist eine Combobox1 zum auswählen. Ausserdem sinds bei mir nur Spalten von A bis N. Habe alles angepasst)
Bei mir resultiert also folgender Code daraus:
Dim lZeile As Long
Dim iSpalte As Integer
Dim c As Range
With Sheets("Artikelkonto").Range("A2:A" & Sheets("Artikelkonto").Range("A65536").End(xlUp).Row)
Set c = .Find(ComboBox1.Value, LookIn:=xlValues)
If Not c Is Nothing Then
lZeile = c.Row
Else: lZeile = Sheets("Artikelkonto").Range("A65536").End(xlUp).Row + 1
End If
End With
For iSpalte = 1 To 14
Sheets("Artikelkonto").Cells(lZeile, iSpalte) = Controls("TextBox" & iSpalte)
Next iSpalte
TextBox26.SetFocus
Fehler jetzt ist Objekt konnte nicht gefunden werden und Codezeile
Sheets("Artikelkonto").Cells(lZeile, iSpalte) = Controls("TextBox" & iSpalte)
ist das Problem
Weiss da jemand rat?

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchen und Ersetzen durch VBA
24.05.2018 16:22:51
ChrisL
Hi
Und auf deinen Beitrag von heute 24.05.2018 08:17:52 willst du keine Antwort schreiben?
cu
Chris
AW: Suchen und Ersetzen durch VBA
24.05.2018 16:24:45
Daniel
Hi
worauf sich TextBox26 bezieht ist egal.
der Code bewirkt nur, dass diese TextBox den Focus hat, wenn das makro durchgelaufen ist.
In der Urspungsanwendung wird wohl so eine TextBox vorhanden sein.
du kannst die Zeile weglassen oder hier den Namen einer anderen TextBox einsetzen, sie muss nur in deiner Combobox vorhanden sein.
zum Fehler in der Schleife:
du musst schon darauf achten, dass die Textboxnamen mit den Namen übereinstimmen, die in der Schleife erzeugt werden.
Wenn du nur 11 TextBoxen hast, dann sollte auch die Schleife in der Zeile drüber nur bis 11 laufen und nicht bis 14.
aber kontrolliere auch nochmal deine Textboxnamen, die müssen von Textbox1 bis Textbox11 benannt sein.
gruß Daniel
Anzeige
AW: Suchen und Ersetzen durch VBA
24.05.2018 16:40:36
Schnider
Heisst das nun, das wenn ich 11 Textboxen habe, der Fokus auf Textbox11 sinnvoll ist oder hat das keinen weiteren, tiefgründigeren Sinn.
Die Combobox liest die Artikelnummern aus und die werden nicht verändert, falls es mal ne Änderung derer gibt, kann ich das unter Bemerkungen verweisen. Die Textboxen sind verschiedene Angaben über die Artikel, wie Bezeichnung, Menge einheit usw.
AW: Suchen und Ersetzen durch VBA
24.05.2018 17:03:41
Schnider
Wenn also die ComboBox Spalte a ist, müssten die Textboxen von 2 bis 12 gehen und nicht von 1 bis 11, weil er verschiebt alles eine Spalte nach links
AW: Suchen und Ersetzen durch VBA
24.05.2018 17:14:20
Gerd
Hallo,
eine Anregung ohne das gesamte Gerüst zu begutachten:
For iSpalte = 2 To 12
Sheets("Artikelkonto").Cells(lZeile, iSpalte) = Controls("TextBox" & (iSpalte - 1))
Next iSpalte
Gruß Gerd
Anzeige
AW: Suchen und Ersetzen durch VBA
25.05.2018 07:47:12
Schnider
Wie muss ich den Code angeben, wenn die betreffende Tabelle anders heisst?
Sprich, nicht eine Tabelle der aktiven Mappe ist, sondern in einer anderen Datei ist.
AW: Suchen und Ersetzen durch VBA
25.05.2018 11:51:05
Daniel
Hi
die andere Datei muss geöffnet sein.
dann den Dateinamen vor dem Sheet angeben:
Workbooks("Dateiname.xlsx").Sheets("Artikelkonto").Cells(lZeile, iSpalte) = Controls("TextBox" & (iSpalte - 1))

wenn du dann wieder in der Datei, zu der das Makro gehört, was ändern willst stellst du stattessen Thisworkbook dem Sheet voran. Damit beziehst du dich immer auf die Datei mit dem Makro, egal wie diese heißt und unabhängig davon, welche Mappe gerade aktiv ist.
gruß Daniel
Anzeige
AW: Suchen und Ersetzen durch VBA
25.05.2018 13:41:23
Schnider
Danke für die Antwort
Noch blicke ich nicht ganz durch.
Ich muss ja nicht nur die Zeile abändern, muss doch bei jeder Zeile dies anpassen, wo sheets ("Artikelkonto") vorkommt oder?
Kann man auch Workbook("Lager.xlsm").Worksheets("Artikelkonto").activate einfügen und dann jedes mit ThisWorkbook ansprechen?
AW: Suchen und Ersetzen durch VBA
27.05.2018 03:06:09
Daniel
nein, "ThisWorkbook" ist immer das Workbook, welches das laufende Makro enthält.
du kannst aber das Workbook aktivieren und dann "ActiveWorkbook" verwenden, (ich hoffe, du erkennst den zusammenhang) oder erst das Workbook und danach das Worksheet aktivieren und dann einfach Workbook und Sheetbezeichung vor dem Range/Cells/Columns/Rows weglassen, weil sie sich ohne diese Angabe immer auf das gerade aktive Sheet beziehen.
ich würde das aber nicht machen, sondern Workbook uns Sheet immer mit angeben.
Dann siehst du immer, womit du gerade arbeitest und hast weniger probleme, wenn du mal den Code im Einzelstep testest und gleichzeitig schaust, was in der Exceldatei passiert.
falls du Angst vor zuviel Arbeit hast, dein VBA-Editor hat auch eine ERSETZTEN funktion, die du nutzen kannst, um beispielsweise alle "Sheets("Artikelkonto")" durch "Workbooks("DeineDatei.xlsx").Sheets("Artikelkonto")" zu ersetzen, so dass das ganz schnell erledigt ist.
Gruß Daniel
Anzeige
AW: Suchen und Ersetzen durch VBA
29.05.2018 09:53:43
Schnider
Ich hab beides versucht, nur leider mit wenig Erfolg. Der Fehler kommt jetzt Objekt konnte nicht gefunden werden und der malt die:
Workbooks("Werkzeug.xlsm").Sheets("Werkzeuge").Cells(lZeile, iSpalte) = Controls("TextBox" & (iSpalte - 1))
Codezeile gelb an. Der bisherige Code lautet:
Dim lZeile As Long
Dim iSpalte As Integer
Dim c As Range
With Workbooks("Werkzeug.xlsm").Sheets("Werkzeuge").Range("A2:A" & Workbooks("Werkzeug.xlsm").Sheets("Werkzeuge").Range("A65536").End(xlUp).Row)
Set c = .Find(ComboBox1.Value, LookIn:=xlValues)
If Not c Is Nothing Then
lZeile = c.Row
Else: lZeile = Workbooks("Werkzeug.xlsm").Sheets("Werkzeuge").Range("A65536").End(xlUp).Row + 1
End If
End With
For iSpalte = 2 To 14
Workbooks("Werkzeug.xlsm").Sheets("Werkzeuge").Cells(lZeile, iSpalte) = Controls("TextBox" & (iSpalte - 1))
Next iSpalte
TextBox2.SetFocus
Anzeige
AW: Suchen und Ersetzen durch VBA
29.05.2018 10:14:15
Daniel
Hi
Prüfe, welchen Wert iSpalte bzw dann iSpalte-1 hat, wenn der Code stoppt.
der Wert sollte dir angezeigt werden, wenn du mit der Maus über die Variable fährst.
oder du blendest über den Menüpunkt "Ansicht" das Direktfenster ein und gibst dort nach dem Fehlerabbruch den Befehl ?iSpalte ein.
wenn du den Wert hast, der den Fehler verursacht, dann gehe deine TextBoxen durch und schaue, ob es eine TextBox mit dieser Nummer gibt und ob die auch genauso geschrieben wird, wie du den Namen im Code erzeugst ("TextBox" & (iSpalte-1))
Gruß Daniel
AW: Suchen und Ersetzen durch VBA
29.05.2018 11:11:30
Schnider
Ich verstehe dich wie ich es machen muss. Ich verwende den Code 3mal, für die anderen 3 Dateien.
Bei jedem der Codes kommt der gleiche Fehler und die Zeilen, respektive Spaltenzahl verweist aufas jeweilige zweite Feld.
lzeile =2, iSpalte =2, iSpalte-1=2
Wenn ich in der ComboBox den zweiten Wert auswähle, wird auch die lZeile zu 3, die anderen zwei bleiben bei Spalte 2, also was ist an der Spalte 2 falsch? Ich hab auch schon versucht Controls("TextBox" zu "TextBox2 zu ändern, ohne Erfolg.
TextBox2.setFocus wurde entfernt
Anzeige
AW: Suchen und Ersetzen durch VBA
29.05.2018 11:19:01
Schnider
Ich hab den Fehler gefunden, rein zufällig.
Wenn ich ne Schleife mache, die immer wieder durchläuft, wie in meinem Code.
Warum mach ich die Kontrolle rückwärts?
Also innerhalb des Codes gehe ich einmal mit +1 durch und einmal mit -1.
Logischerweise kann das nicht gut gehen
Der funktionierende Code: PS: Das fettgedruckte -1 weglassen, das war der Fehler!!!!
Dim lZeile As Long
Dim iSpalte As Integer
Dim c As Range
With Workbooks("Werkzeug.xlsm").Sheets("Werkzeuge").Range("A2:A" & Workbooks("Werkzeug.xlsm").Sheets("Werkzeuge").Range("A65536").End(xlUp).Row)
Set c = .Find(ComboBox1.Value, LookIn:=xlValues)
If Not c Is Nothing Then
lZeile = c.Row
Else: lZeile = Workbooks("Werkzeug.xlsm").Sheets("Werkzeuge").Range("A65536").End(xlUp).Row + 1
End If
End With
For iSpalte = 2 To 11
Workbooks("Werkzeug.xlsm").Sheets("Werkzeuge").Cells(lZeile, iSpalte) = Controls("TextBox" & (iSpalte -1))
Next iSpalte
Anzeige
AW: Suchen und Ersetzen durch VBA
29.05.2018 11:22:07
Schnider
Wenn ich nun aber das ganze Editiere und ändere, überschreibt es mir die ausgelesenen Daten.
Es trägt mir den Wert in die Tabelle ein, überschreibt somit aber die Formeln, die enthalten sind.
Gibts dazu eine Möglichkeit, die zu behalten?
AW: Suchen und Ersetzen durch VBA
29.05.2018 11:24:39
Daniel
Hi
naja, das +1 und das -1 sind hier zwei ganz unterschiedliche Dinge.
das erste kommt daher, dass wenn der Text auch der Combobox nicht gefunden wird, die Werte in die este freie Zeile am Tabellenende eingetragen werden, dazu brauchst das +1, weil der Sprung mit End(xlup) die letzte befüllte Zeile findet
ob du das -1 bei den TextBoxen brauchst, hängt davon ab, wie du deine TextBoxen benannt hast.
wenn der Wert aus der Textbox1 in die Spalte 2 soll, brauchst du es, wenn der Wert aus der Textbox2 in die Spalte 2 soll, nicht.
Gruß Daniel
Anzeige
AW: Suchen und Ersetzen durch VBA
29.05.2018 11:46:51
Schnider
Danke dir, nun verstehe ich den Zusammenhang und auch den zufällig gefundenen Fehler

345 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige