VBA Code Ergänzung
Ich habe folgenden VBA Code und wollte etwas hinzufügen. sodass er z.B. bei Zeile 11 genau das gleiche wie aktuell in Zeile 13 .
Nur wenn ich da einfach kopiere wie abgebildet und das unter einander setzte, funktioniert das nur bedingt. er macht das dann zwar bei Zeile 11 aber nicht mehr bei Zeile 13.
Woran könnte das liegen?
Sub Kundendaten_hinzufuegen()
Dim lngRow As Long
Dim intColumn As Integer
If Tabelle3.ComboBox1.ListIndex >= 0 And Tabelle3.TextBox1.Text <> "" Then
lngRow = Tabelle3.ComboBox1.List(Tabelle3.ComboBox1.ListIndex, 2)
intColumn = Tabelle3.ComboBox1.List(Tabelle3.ComboBox1.ListIndex, 1)
If intColumn = 13 Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & " " & _
Tabelle3.TextBox1.Text
Else
Tabelle1.Cells(lngRow, intColumn) = Tabelle3.TextBox1.Text
End If
If intColumn = 11 Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & " " & _
Tabelle3.TextBox1.Text
Else
Tabelle1.Cells(lngRow, intColumn) = Tabelle3.TextBox1.Text
End If [/]
MsgBox "Eintrag erfolgreich hinzugefügt", vbInformation, "Meldung..."
Else
MsgBox "Es wurde keine Kategorie ausgewählt oder kein Text in das entsprechende Feld eingegeben!", _
vbInformation, "fehlende Daten"
End If
End Sub
Danke für eure Hilfe
Antwort schreiben
Antwort 1 von Hajo_Zi vom 13.10.2021, 14:59 Options
schreibe elseIF
If Tabelle3.ComboBox1.ListIndex >= 0 And Tabelle3.TextBox1.Text <> "" Then
lngRow = Tabelle3.ComboBox1.List(Tabelle3.ComboBox1.ListIndex, 2)
intColumn = Tabelle3.ComboBox1.List(Tabelle3.ComboBox1.ListIndex, 1)
ElseIf intColumn = 13 Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & " " & _
Tabelle3.TextBox1.Text
ElseIf intColumn = 11 Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & " " & _
Tabelle3.TextBox1.Text
Else
Tabelle1.Cells(lngRow, intColumn) = Tabelle3.TextBox1.Text
End If
Gruß Hajo
Antwort 2 von DOMMEl vom 13.10.2021, 16:01 Options
das macht er so nicht mit dem ElseIf , da meckert er leider.
Es würde dann ja quasi so aussehen:
Sub Kundendaten_hinzufuegen()
Dim lngRow As Long
Dim intColumn As Integer
If Tabelle3.ComboBox1.ListIndex >= 0 And Tabelle3.TextBox1.Text <> "" Then
lngRow = Tabelle3.ComboBox1.List(Tabelle3.ComboBox1.ListIndex, 2)
intColumn = Tabelle3.ComboBox1.List(Tabelle3.ComboBox1.ListIndex, 1)
ElseIf intColumn = 13 Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & " " & _
Tabelle3.TextBox1.Text
ElseIf intColumn = 11 Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & " " & _
Tabelle3.TextBox1.Text
Else
Tabelle1.Cells(lngRow, intColumn) = Tabelle3.TextBox1.Text
End If
MsgBox "Eintrag erfolgreich hinzugefügt", vbInformation, "Meldung..."
Else
MsgBox "Es wurde keine Kategorie ausgewählt oder kein Text in das entsprechende Feld eingegeben!", _
vbInformation, "fehlende Daten"
End If
End Sub
Antwort 3 von Hajo_Zi vom 13.10.2021, 16:11 Options
ich baue die Datei nicht nach. Ich sehe keinen Grund warum mein Code falsch sein soll.
Deinen Code vergleiche ich nicht mit meinem.
Antwort 4 von DOMMEl vom 13.10.2021, 16:43 Options
du brauchst nix nachzubauen...
er akzeptiert das ElseIF nicht... ich kanns aber noch mal ausprobieren
Antwort 5 von Hajo_Zi vom 13.10.2021, 16:53 Options
er beschwert sich bei mir schon über die Textboxen nicht das else
Antwort 6 von DOMMEl vom 13.10.2021, 16:53 Options
er sagt, Fehler beim Kompilieren
Else ohne IF
Antwort 7 von DOMMEl vom 13.10.2021, 17:07 Options
aha... mir gehts halt darum, dass ich statt nur Spalte 13 , auch Spalte 11 angesprechen kann und bei beiden die gleiche / eine anderen Befehl zuordnen kann.
Bisher sagt er ja, dass er in Spalte 13 an jeden bereits vorhandenen Text ein Leerzeichen dranhängt und dazu den neuen text hintendran.
Diesen Befehl möchte ich jetzt auch in Spalte 11 haben.
Antwort 8 von coros vom 13.10.2021, 18:49 Options
Hallo Dommei,
also Dein Code sollte eigentlich funktionieren. Bist Du Dir denn sicher, dass die Variable "intColumn " auch mal den Wert 13 für Spalte M erhält, so dass die If-Abfrage auf Spalte 13 ausgeführt werden kann?
@HaJo, Du bist der Meinung, dass Dein Code funktioniert. So wie Du ihn in Deiner AW1 geschrieben hast, mag das stimmen. Nur leider hast Du nur einen Teil des Codes aufgeführt, so dass Dein Code mit dem restlichen Teil des Codees aus der Fragestellung nicht funktionieren kann. Bei Dir fehlt
MsgBox "Eintrag erfolgreich hinzugefügt", vbInformation, "Meldung..."
Else
MsgBox "Es wurde keine Kategorie ausgewählt oder kein Text in das entsprechende Feld eingegeben!", _
vbInformation, "fehlende Daten"
End If
und deshalb erhält @Dommei den Fehler.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 9 von nighty vom 13.10.2021, 20:13 Options
hi all ^^
*huhu* bin auch noch da :-)))
gruss nighty
If intColumn = 13 Or intColumn = 11 Then
'dein code
End If
Antwort 10 von coros vom 13.10.2021, 20:18 Options
Hallo nighty,
das ist glaube ich nicht das Richtige. Denn wenn intColumn = 13, dann soll in Spalte 13 geschrieben werden und wenn intColumn = 11, dann soll in Spalte 11 geschrieben werden. Das wird bei Deinem Code etwas schwierig.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 11 von DOMMEl vom 14.10.2021, 14:23 Options
Also ich habe zuerst folgendes Versucht, indem ich den Code kopiert habe. und einfach aus der 13 eine 11 gemacht habe.
@coros
Was meinst du genau mit:
Bist Du Dir denn sicher, dass die Variable "intColumn " auch mal den Wert 13 für Spalte M erhält, so dass die If-Abfrage auf Spalte 13 ausgeführt werden kann?
So?
If intColumn = 13 Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & " " & _
Tabelle3.TextBox1.Text
Else
Tabelle1.Cells(lngRow, intColumn) = Tabelle3.TextBox1.Text
End If
If intColumn = 11 Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & " " & _
Tabelle3.TextBox1.Text
Else
Tabelle1.Cells(lngRow, intColumn) = Tabelle3.TextBox1.Text
End If
was würde er denn schreiben intColumn = 11 to 13
da hat er auch nicht gewollt.
Er hat das auch mal gemacht, dass er das bei beiden macht.
@coros du warst ja so nett mir das so zu machen mit dem Code..
nur kann ich die Datei nicht öffnen (xlsm.) , da du ja von mir weißt das mein Betriebssystem sich wahrscheinlich aufgehängt hat . Und der aktuell PC Excel 03 hat. und ich hier kein neues 2007 ner Programm habe und installieren kann.
http://www.excelbeispiele.de/Beispiele_Supportnet/Projektarbeitprobe(1)_bearbeitet.zip
Das war der Link, wäre es dir möglich mir das als excel datei für 2003 zu speichern und es mir wieder hochzuladen (aber nur wenn es keine Mühe macht)
Antwort 12 von DOMMEl vom 14.10.2021, 14:37 Options
@ nighty
dein vorschlag funktioniert sehr gut....
If intColumn = 13 Or intColumn = 11 Then
da schließt der Code dann nur die beiden spalten ein...und es funktioniert.
Danke
Ich halt noch zudem die Idee z.b. jeder anderen Spalte jenach meiner Wahl, andere "Befehle" zuzuweisen.
Er meckert halt, wenn ich das einfach so Einfüge.
Muss ich da vl irgendwas bei beachten. (bin noch nicht so VBA Experte)
Bsp.
If intColumn = 13 Or If intColumn = 11 Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & " " & _
Tabelle3.TextBox1.Text
Else
Tabelle1.Cells(lngRow, intColumn) = Tabelle3.TextBox1.Text
End If
If intColumn = 10 Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & ", "& _
Tabelle3.TextBox1.Text
Else
Tabelle1.Cells(lngRow, intColumn) = Tabelle3.TextBox1.Text
End If
Antwort 15 von DOMMEl vom 14.10.2021, 15:45 Options
Danke coros
leider macht das Makro dort auch nicht mehr das was es gemacht hat. Dort ist das gleiche Problem.
Er nimmt zwar die zusätzlichen Dinge an (keine Fehlermeldung), allerdings ignoriert er dann die anderen Spalten vollendes, dort fügt er nur einfach ein.
dann macht er mit der spalte 10 nix , sondern nur mit spalte 11 und 13
so läuft das halt auch wenn ich andere spalten so einfüge. Er bezieht sich nur auf den ersten Befehl.
Kann man da nicht einfach ein "Oder / If / Else" zwischensetzten sodass er beide oder mehrere "Befehle" als "gleichwertig" ansieht
If intColumn = 13 Or If intColumn = 11 Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & " " & _
Tabelle3.TextBox1.Text
Else
Tabelle1.Cells(lngRow, intColumn) = Tabelle3.TextBox1.Text
End If
If intColumn = 10 Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & ", "& _
Tabelle3.TextBox1.Text
Else
Tabelle1.Cells(lngRow, intColumn) = Tabelle3.TextBox1.Text
End If
Antwort 16 von coros vom 14.10.2021, 16:11 Options
Hallo Dommei,
das ist die Datei aus Deinem Link, eben nur wie gewünscht als xls-Datei. Die Änderungen musst Du schon selber machen.
MfG,
Oliver
Antwort 17 von DOMMEl vom 14.10.2021, 16:16 Options
jo habe ich bereits gemacht, (danke für dein Umformatieren)
nur muckt er dann da genau so rum, wenn ich die sachen ergänze...
und er führt es nur wie beschrieben aus..
Er führt halt nur den allerersten befehl aus (Zeile 11 und 13).. alle weiteren Befehle die Spalten betreffend missachtet er.
Antwort 18 von coros vom 14.10.2021, 18:43 Options
Hallo,
wie sieht denn Dein gesamter VBA-Code aus? Hellsehen können wir hier alle noch nicht. Eventuell lädst Du ja nochmal Deine Datei mit dem angepassten Code hoch. Dann kann man schauen, wo der Fehler liegt.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 19 von DOMMEl vom 14.10.2021, 22:57 Options
Also mein VBA Code sähe so aus;
Sub Kundendaten_hinzufuegen()
Dim lngRow As Long
Dim intColumn As Integer
If Tabelle3.ComboBox1.ListIndex >= 0 And Tabelle3.TextBox1.Text <> "" Then
lngRow = Tabelle3.ComboBox1.List(Tabelle3.ComboBox1.ListIndex, 2)
intColumn = Tabelle3.ComboBox1.List(Tabelle3.ComboBox1.ListIndex, 1)
If intColumn = 13 Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & " " & _
Tabelle3.TextBox1.Text
Else
Tabelle1.Cells(lngRow, intColumn) = Tabelle3.TextBox1.Text
End If
If intColumn = 11 Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & " " & _
Tabelle3.TextBox1.Text
Else
Tabelle1.Cells(lngRow, intColumn) = Tabelle3.TextBox1.Text
End If
If intColumn = 9 Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & ", " & _
Tabelle3.TextBox1.Text
Else
Tabelle1.Cells(lngRow, intColumn) = Tabelle3.TextBox1.Text
End If
MsgBox "Eintrag erfolgreich hinzugefügt", vbInformation, "Meldung..."
Else
MsgBox "Es wurde keine Kategorie ausgewählt oder kein Text in das entsprechende Feld eingegeben!", _
vbInformation, "fehlende Daten"
End If
End Sub
@coros mit dem int column = 13 Or int column = 11 scheinst du recht zu haben, das funzt so net..
@nighty habe mich da leider geirrt, (trotzdem danke für deine Hilfe), denn die Idee war schon nicht schlecht, die beiden Zeilen hat er angesprochen.. nur er dupliziert das eingegeben z.b. fff, fff, anstat anzuhängen
Antwort 20 von coros vom 15.10.2021, 05:46 Options
Hallo Dommei,
das Makro funktioniert schon. Das Problem liegt eher an der Datei. Ich nehme jetzt mal die Datei aus dem Link aus AW14, die ich Dir ohne Änderungen bzw. Anpassungen als xls-Datei hochgeladen habe. Dort kann, wie bereits von mir in AW8 vermutet, die Variable "intColumn" einige Spaltenindexzahlen, u.a. die Indexzahl 11, nicht erhalten, da diese in der ComboBox gar nicht auftauchen. Die Indexzahl 11 wird in der ComboBox nicht aufgeführt, da in Blatt "Hauptdatei" in Spalte K, für die die Spaltenindexzahl 11 steht, gar keine Überschrift steht und somit auch nicht in der ComboBox aufgeführt wird.
Das kannst Du selber kontrollieren, wenn Du in dem Makro "Kundennummer_suchen" in der Zeile
.ComboBox1.ColumnWidths = "7cm; 0cm; 0cm"
mal die 0cm gegen z.B. 2cm austauscht. Dann siehst Du die beiden zusätzlichen Spalten in der ComboBox und da wirst Du sehen, dass die Spalte K, bzw. die Indexzahl 11 dort nicht auftaucht. Du musst also Deine Datei ändern. Sollte in Deiner Datei, mit der Du arbeitest, dort eine Überschrift stehen, dann liegt es an etwas anderem, was man aber ohne die Datei zu sehen aus der Ferne nicht beheben kann. Dann musst Du die Datei nochmal hochladen.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.