![]() |
|
![]() |
#1 |
![]() Neuer Benutzer |
![]() Hallo
![]() ich hab da mal ein Problem Ich bin noch ein zeimlicher Anfänger beim programmieren von VBA und stehe jetzt vor dem Problem das ich den Fehler in meinem Code nicht finde. Es handelt sich um eine Userform, in der es die Buttons suchen, ändern und löschen gibt sowie eine ListBox, in der die gesuchten Ergebnisse angezeigt werden sollen und noch weitere 46 TextBoxen. Die TextBoxen sollen durch einen click in die ListBox befüllt werden. Meine ListBox zeigt jedoch nur 5 der 46 Spalter für die TextBox an. Die TextBoxen sollen befüllt werden, damit ich die Daten ändern oder löschen kann. Ich hoff das ich so weit verständlich? Das wäre mein Code: Leider klappt es mit dem Hochladen nicht :/ Option Explicit Dim lngR As Long Dim Meine_Zeile As String Dim rngCell As Range Private Sub CommandButton_suchen_Click() ' Suchen ' Dim rngCell As Range ' Bei Option Explicit definiert Dim strFirst As String With Worksheets("Maschinenparkanalyse").Range("A:A") Me.ListBox1.Clear Set rngCell = .Find(Me.TextBoxX.Value, LookIn:=xlValues, lookat:=xlWhole) If Not rngCell Is Nothing Then strFirst = rngCell.Address Do With Me.ListBox1 .ColumnCount = 8 .AddItem .List(.ListCount - 1, 0) = rngCell.Value .List(.ListCount - 1, 1) = rngCell.Offset(0, 1).Value ' .List(.ListCount - 1, 2) = rngCell.Offset(0, 2).Value ' .List(.ListCount - 1, 3) = rngCell.Offset(0, 3).Value .List(.ListCount - 1, 4) = rngCell.Offset(0, 4).Value .List(.ListCount - 1, 5) = rngCell.Offset(0, 5).Value .List(.ListCount - 1, 6) = rngCell.Offset(0, 6).Value .List(.ListCount - 1, 7) = rngCell.Offset(0, 7).Value .List(.ListCount - 1, 8) = rngCell.Row .ColumnWidths = "5,5cm;5,3cm;0,01cm;0,01cm;0,87cm;0,87cm;0,87cm;0,87cm;0cm" End With Set rngCell = .FindNext(rngCell) Loop While Not rngCell Is Nothing And rngCell.Address <> strFirst Else MsgBox "Maschine nicht gefunden", 48 End If End With End Sub Private Sub ListBox1_Click() ' ListBox ' Wenn auf die ListBox geckligt wird, somit eine Zeile ausgewählt wurde, ' sollen die TextBoxen befüllt werden (mehr TextBoxen wie spalten in der ListBox) ' Dim rngCell As Range ' in Option Explicit definiert Dim IntC As Integer ' Zähler für Textboxen Dim intSpalte As Integer Dim lngR As Long ' Listindex der gewählten Zeile in der Listbox With ListBox1 If .ListCount = 0 Then Exit Sub ' wenn Listbox leer, Ausstieg If .List(.ListIndex, 0) = "" Then Exit Sub 'wenn in Spalte 1 nichts steht (und somit in der Listbox ganz vorne) dann beenden(nichts tun) wenn leere Zeile in Listbox gewählt, Ausstieg lngR = CLng(.List(.ListIndex, 8)) ' Zeilennummer des gewählten Datensatzes If lngR < 1 Then MsgBox lngR, , "KEINE DATEN!" Exit Sub End If Set rngCell = Nothing Meine_Zeile = Rows(Sheets("Maschinenparkanalyse").Cells(lngR, 1).Row).Address For IntC = 1 To 46 '######################################## 'Diesr Block ist glaube ich mein Problem hier bekomme ich immer eine Fehlermeldung im Bezug auf das Controls ' Der Fehler mit dem Controls wieder holt sich auch bei dem Button ändern Dim objControl As Controls For Each objControl In Controls Select Case TypeName(objControl) Case "TextBox" objControl.Text = "" End Select Next '######################################## Controls("TextBox" & IntC) = Sheets("Maschinenparkanalyse").Cells(lngR, IntC).Text Next End With TextBoxX.SetFocus End Sub Private Sub CommandButton_ändern_Click() ' Ändern ' Werte aus den Textfeldern die Werte in der Tabelle überschreiten Dim intAnzTeBo As Integer Dim durchsuchen, finden As Range For intAnzTeBo = 1 To 46 ' Textboxen 1 bis 46 Cells(lngR, intAnzTeBo) = Controls("TextBox" & intAnzTeBo).Value ' 'was bedeutet diese Zeile??? Next intAnzTeBo TextBoxX.SetFocus End Sub Private Sub CommandButton_löschen_Click() ' Löschen ' Werte in den Textboxen und die Zeile in der Tabelle löschen nach If tex = vbYes Then Dim tex As String tex = MsgBox(prompt:="Die Daten werden unwiederruflich gelöscht!" & vbCr & Chr(13) & _ "Hinweis: Nach dem löschen, Suche neu starten!. ", Buttons:=vbYesNo + vbCritical, Title:="Warnung") If tex = vbNo Then Exit Sub Rows(lngR).Delete ' die Zeile funktionier auch nicht ich möchte sowohl die Ziele in der ListBox als auch in der Tabelle löschen? 'In der Listbox löschen hat hierrüber funktioniert aber es wird nicht in der Tabelle gelöscht? ' Dim iRow As String ' With ListBox1 ' If .ListIndex > -1 Then ' Tabelle1.Rows(.ListIndex + 2).Delete 'Zeile in ListBox löschen ' .RemoveItem .ListIndex ' End If ' End With End Sub Die Suchfunktion funktioniert Das Problem ist beim befüllen der TextBoxen, wie im Code beschrieben. Über eure Hilfe wär ich euch sehr Dankbar ![]() Grüße und Danke schon mal Christina |
![]() |
![]() ![]() |
![]() |
#2 |
![]() MOF Guru |
![]() nur wenige schauen auf Deinen Rechner und sehen die Datei.
Ich möchte gerne den Fehler im Original sehen. Ich baue keine Datei nach. Die Zeit hat schon jemand investiert. Ein Nachbau sieht meist anders aus als das Original. Darum sollte das Original verlinkt werden. Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten anonymisieren bzw. pseudonymisieren. Der Name einer hochgeladenen Mappe wird im Beitrag automatisch angezeigt, sodass es bei Verwendung von aussagekräftigen Namen leichter fällt, sie später im Ablageordner wiederzufinden und sie gedanklich einem bestimmten Thema zuzuordnen. Namen wie Test, Mappe, Beispiel usw. sind so allgemein, dass eine Zuordnung zu einem Thema unmöglich gemacht wird. benutze Listindx ![]() ![]() __________________ Signatur in jedem Beitragm Forum kann der Beitrag als erledigt markiert werden. Also mache es unten links mit Klick auf den Schalter "als erledigt setzen", falls Problem gelöst. Der Zustand des Beitrages wird dann in der Übersicht angezeigt und man braucht sich diese Beiträge nicht mehr ansehen. Bitte Version angeben. Bei keiner Angabe gehe ich von meinen Angaben aus. Betriebssystem: Windows 10 - 64 Bit, Office 2016 - 32 Bit. |
![]() |
![]() ![]() |
![]() |
#3 |
Threadstarter
![]() ![]() Neuer Benutzer |
![]() Hallo Hajo
Schon mal Danke für die Bereitschaft Leider war es mir nicht möglich beim Arbeiten Dokumente Hochzuladen. Somit Leider erst jetzt. Also im Anhang das Dokument als Zip-Datei ich hoffe sie können es öffnen? Die Excel-Datei war leider zu groß. Wie gesagt die Suchfunktion und das Hinzufügen funktionieren soweit nur das ändern und löschen leider nicht. Danke für eure Hilfe! Christina |
![]() |
![]() ![]() |
![]() |
#4 |
![]() MOF Guru |
![]() Hallo Christina,
ich kann Dir Leider nicht helfen. Da ich das was im ersten Beitrag steht nicht sehe. Ich kann keinen Eintrag in der Listbox auswählen. Vielleicht sieht es bei anderen anders aus? Gruß Hajo __________________ Signatur in jedem Beitragm Forum kann der Beitrag als erledigt markiert werden. Also mache es unten links mit Klick auf den Schalter "als erledigt setzen", falls Problem gelöst. Der Zustand des Beitrages wird dann in der Übersicht angezeigt und man braucht sich diese Beiträge nicht mehr ansehen. Bitte Version angeben. Bei keiner Angabe gehe ich von meinen Angaben aus. Betriebssystem: Windows 10 - 64 Bit, Office 2016 - 32 Bit. |
![]() |
![]() ![]() |
![]() |
#5 |
![]() MOF Profi |
![]() Hallo Christina,
Du hast eine "Datenbank" in Excel aufgebaut. Leider wird diese in dem Zustand nicht richtig funktionieren! Verbundene Zellen --> weg damit! Leere Spalten --> weg damit! Dim direkt unterhalb der Sub, nicht innerhalb des Codes an verschiedenen Stellen. Dim durchsuchen, finden As Range --> nur finden wird deklariert! "durchsuchen" ist variant! Cells(lngR, intAnzTeBo) = Controls("TextBox" & intAnzTeBo).Value ---> 'lngR = 0 Kann mich jetzt nicht weiter drum kümmern, weil ich keine Zeit mehr habe. Gruß Rainer |
![]() |
![]() ![]() |
![]() |
#6 |
Threadstarter
![]() ![]() Neuer Benutzer |
![]() Hallo Hajo, Hallo Rainer
Danke für die Hinweise! Wenn ich nun die leeren und die verbundenen Zeilen heraus nehme welche weiteren Fehler habe ich noch im Code? Über weitere Hilfe wär ich euch sehr Dankbar! Gruß Christina |
![]() |
![]() ![]() |
![]() |
#7 |
![]() MOF Profi |
![]() Hallo Christina,
Textbox24 und Textbox101 fehlen. Diesen Code gegen deinen tauschen. Code: Private Sub ListBox1_Click() Dim rng As Range Dim IntC As Integer Dim lngR As Long Dim objControl As Control With ListBox1 If .ListCount = 0 Then Exit Sub If .List(.ListIndex, 0) = "" Then Exit Sub lngR = CLng(.List(.ListIndex, 8)) Meine_Zeile = Rows(Sheets("Maschinenparkanalyse").Cells(lngR, 1).Row).Address For IntC = 1 To 46 Controls("TextBox" & IntC) = Sheets("Maschinenparkanalyse").Cells(lngR, IntC + 1).Text Next End With TextBoxX.SetFocus End Sub Für begabte Anfänger ist es einfach passenden Code im Netz zu finden; jedoch macht der Einbau in die eigene Datei oft Schwierigkeiten. Aber du bist auf einem guten Weg! ![]() Von der blauen Farbe bekommt man Augenkrebs! ![]() ![]() Bau das erstmal ein, dann sehen wir weiter. Gruß Rainer Geändert von erpe (14.07.2017 um 23:13 Uhr). |
![]() |
![]() ![]() |
![]() |
#8 |
![]() MOF Profi |
![]() Hallo Christina,
du brauchst eine ID, um die einzelnen Maschinen zu identifizieren. Hast du schon selbst bemerkt: Katze, Katze2. Die ID könnte die Maschinennummer sein? Dann aber: Wie ist das mit den Stählen? Wie passt das überhaupt zusammen? Maschinen - Platz - Aufstelldaten und dann die Stähle? Wie geschrieben gibt es die TextBox24 nicht, stattdessen die ComboBox24! Deswegen kommt es zum Fehler: Code: Dim objControl As Controls For Each objControl In Controls Select Case TypeName(objControl) Case "TextBox" objControl.Text = "" End Select Next Code: For IntC = 1 To 46 Controls("TextBox" & IntC) = Sheets("Maschinenparkanalyse").Cells(lngR, IntC).Text Zitat: Wie gesagt die Suchfunktion und das Hinzufügen funktionieren soweit nur das ändern und löschen leider nicht. Das Suchergebnis lässt sich nicht in die UF übertragen. S.o. Wie weit bist du mit den Änderungen (leere Spalten)? Dann lade doch die geänderte Datei bitte hoch. Gruß Rainer |
![]() |
![]() ![]() |
![]() |
#9 |
Threadstarter
![]() ![]() Neuer Benutzer |
![]() Hallo Rainer,
Ich hab deinen Code jetzt mal soweit eingebaut und es funktioniert so weit, dass Daten in die TextBoxen übertragen werden. Nur leider verschoben? Ich vermute es liegt am OptionButton ich habe nur leider keine Idee wie ich diesen richtig einbauen muss? TextBox 24 und 47 geben die Auswahl der ComandBoxen(Nummer 48 und 49) wieder. Jedoch nicht umgedreht, d.h. wenn ich eine Zeile ausgewählt habe wird es nicht in der ComboBox angezeigt? Die Überschriften der Spalten war soweit vorgegeben, darauf habe ich nicht wirklich einen Einfluss. Was genau meinen Sie mit ich brauch eine ID für die Maschinen, ist dies wichtig fürs Programmieren oder allgemein für die Datenbank? Vielen Dank für alles! Sie sind mir eine große Hilfe! Ich wollt schon aufgeben ![]() Grüße Christina |
![]() |
![]() ![]() |
![]() |
#10 |
![]() MOF Meister |
![]() Hi Christina,
ich habe mir Deine Datei zwar nicht angesehen, aber wenn ich schon lese "TextBox_24 oder dergleichenh, dann rollen sich mir die Fußnägel nach oben. Damit kann kein Mensch was anfangen. Es ist immer besser sowohl Variablen, Konstanten als auch Objekten "sprechende" Namen zu vergeben. Eine Textbox zur Angabe des Vornamens kann man z. Bsp. txtVorname nennen. Dadurch wird es auch für Fremde leichter sich in Deinem Code zurecht zu finden. Mit Deiner aktuellen Namensvergabe wird jeder gezwungen, sich durch Deine Objektliste zu klicken und zu schauen, wofür denn welches Objekt überhaupt gut ist... gruselig, zeitraubend... __________________ Ciao, RalfKommt mir irgendwie bekannt vor... Auf, zum Markplatz der Ideen! Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker. ![]() |
![]() |
![]() ![]() |
![]() |
#11 |
![]() MOF Profi |
![]() Hallo Christina,
Danke für die Arbeit an der Datei. Und für das gemilderte Blau. ![]() ![]() ![]() Hier im Forum san ma per du! Zitat: Nur leider verschoben? Zitat: TextBox 24 und 47 geben die Auswahl der ComandBoxen(Nummer 48 und 49) wieder. Jedoch nicht umgedreht, ID=Identifikationsnummer. Damit kann man einen Datensatz eindeutig identifizieren. Da böte sich die Maschinennummer an. Du hast 3 x Huhn. Wie erkennst du, welches Huhn gemeint ist bei 6 Spalten? Deshalb eine ID. Aber wie ist das bei den Stählen? Die haben keine Maschinennummer. Zitat: Wie passt das überhaupt zusammen? Maschinen - Platz - Aufstelldaten und dann die Stähle? Kann eine Maschine an mehreren Standorten stehen? Wohl nicht. Hund und Uhu aber schon?! Welche Felder bleiben bei Änderungen unverändert? Kann eine Maschine die Maschinenart wechseln? Werden auch die OptionButton geändert? Jetzt hast du eine Textbox24 angelegt, aber die ComboBox24 = ComboBox48 -> geschickt gemacht! ![]() Ralf (R J) hat natürlich Recht mit seinen Bemerkungen und in der Tat, es erleichtert eine Hilfestellung. Es gibt aber auch die Meinung, dass (gerade bei so vielen Controls) dein Vorgehen vertretbar ist. Jetzt brauchst du aber nicht die Datei zu ändern. Von der Bedienung her wäre es schon, wenn die Textfelder in einer (logischen) Reihenfolge angesprungen werden könnten. Du hast das Form in mehrere Frames unterteilt. In welcher Reihenfolge werden die Daten eingegeben? Stichwort "Aktivierreihenfolge" -> Menü Ansicht. Beantworte bitte die Fragen, damit es weitergeht. Gruß Rainer |
![]() |
![]() ![]() |
![]() |
#12 |
Threadstarter
![]() ![]() Neuer Benutzer |
![]() Hallo Ralf, Hallo Rainer,
Ja Ralf du hast Recht ! Ich hatte es auch so am Anfang bin dann aber leider bei "For intC = 1 to 47" gescheitert weil ich davon ausgegangen bin das geht nur wenn die TextBoxen nummeriert sind? Ich hab dann die TextBox für Spalte "A" 1 genannt und so weiter... "Klar, weil jetzt die leeren Spalten fehlen" Das verstehe ich ehrlich gesagt noch nicht so richtig...? Zu den Stählen... Dies hängt damit zusammen, dass unterschiedliche Toleranzen bei unterschiedlichen Stählen und Fertigungsverfahren mit der jeweiligen Maschine erreicht werden können und diese werden in der Tabelle eingetragen. Ich denke dann ist der Maschinentyp meine ID, da es von jedem Hersteller die Maschine in unterscheidlichen Typen gibt. Und jeder Typ nur einmal aufgeführt wird. Somit kann ein Maschinentyp auch in mehreren Werken stehen. Als Beispiel das Huhn: es gibt 3 mal Huhn und eins ist schwarz, eins weiß und eins braun... und die Farben sind der Typ. Ich hoffe es ist verständlich? Und n schwarzes Huhn gibt es sowohl im Standort 1 als auch im Standort 2. Nein die OptionButton ändern sich nicht bei einer Änderung... Der Standort könnte sich ändern und eigentlich alle anderen TextBoxend wenn es einen Umbau gibt außer Hersteller und Typ. Ich habe theoretisch keine Reihenfolge vorgesehen. Warum brauch ich diese ? Wenn es eine Reihenfolge geben soll würde ich gerne die Reihenfolge nach den Spalten machen, das heißt zuerst der Frame mit Allgemeine, dann Aufstelldaten... und als letztes die Stähle. Also nach der Nummerrierung der TextBoxend. Danke für die Mühen ! Grüße Christina |
![]() |
![]() ![]() |
![]() |
#13 |
![]() MOF Profi |
![]() Hallo Christina,
Danke für die Erläuterungen. Ich hatte ähnliches angenommen. Es geht also um Bearbeitungsmaschinen. Zitat: Jedoch nicht umgedreht, d.h. wenn ich eine Zeile ausgewählt habe wird es nicht in der ComboBox angezeigt? Nachfrage zu Huhn: Huhn schwarz Standort 1 und Standort 2? Die OptionButton lassen immer nur EINE Auswahl zu! 1 oder 2 oder 3 oder 4! Somit muss Huhn 2 x eingetragen werden! Dann ist Typ aber nicht mehr einmalig, also keine ID. Warum kann es nicht die MaschNummer sein? Eine Reihenfolge hast du festgelegt! Nur nicht umgesetzt!!! Deine Boxen werden mehr oder minder willkürlich angesprungen. Ist eher ein Tanz durch das UF. ![]() Ich habe das jetzt in der anhängenden Datei geändert. Schau mal, ob es passt. Gruß Rainer Geändert von erpe (18.07.2017 um 08:03 Uhr). |
![]() |
![]() ![]() |
![]() |
#14 |
Threadstarter
![]() ![]() Neuer Benutzer |
![]() Hallo Rainer
Ja es funktioniert ![]() ![]() Richtig hammer vielen vielen Dank! Grüße Christina |
![]() |
![]() ![]() |
![]() |
#15 |
![]() MOF Profi |
![]() Hallo Christina,
Danke für die Rückmeldung. Ist das jetzt erledigt oder gibt es noch Verbesserungsbedarf? Gruß Rainer |
![]() |
![]() ![]() |