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 21 von DOMMEl vom 15.10.2021, 14:20 Options
Das mit dem Makro hatte mit dem Code so auch vor einiger Zeit auch funktioniert, von einem Tag auf den anderen war es "kaputt".
Die Indexzahlen von 9 bis 12 erscheinen dort und auch die Überschriften.
ich werde dir die Datei nochmal hochladen , allerdings werde ich wieder einige Tabellenblätter löschen müssen. (datenschutz) .
Ich werde dir andere Daten als Beispiel eingeben.
Also meine Idee war.
In Spalte 9 und 11 soll statt nur einem Leerzeichen nach dem bereits geschriebenen ein ", " erscheinen.
Bei Zeile 10 und 12 soll ein Leerzeichen nach dem bereits geschriebenen erscheinen.
Danke, dass du dich auf die Ursachenforschung begiebst.
http://www.file-upload.net/download-1947032/Probeinternet.xls.html
Gruß DOMMEL
Antwort 22 von coros vom 15.10.2021, 17:46 OptionsLösung
Hallo Dommei,
hier nochmal ein neuer Versuch,m nachdem ich nun glaube verstanden zu haben, was Du meinst.
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 = 12 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
ElseIf intColumn = 10 Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & ", " & _
Tabelle3.TextBox1.Text
ElseIf 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
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 23 von DOMMEl vom 15.10.2021, 19:22 Options
Genau das wars.. so läufts...als erst If eine Zeile und dann immer ElseIF .. gut
Prima..Danke für die Hilfe....
Eine klitze kleine Hilfe benötige ich doch noch. Da mein Laienwissen leider dafür glaube ich nicht ausreicht
Gibt es irgendeinen Befehl, der überprüft ob schon was in der Zeile steht und dann die obigen Befehle ausführt.
Bsp
Wenn in dem Feld noch nichts drin steht ,soll er weder ein Leerzeichen noch ein Komma setzten,
wenn zum ersten Mal Text in die Zeile gefüllt wird.
Steht z.B. Hallo oder ein anderer Text bereits drin, soll der die Befehle ausführen die oben stehem, sodass dann z.b. das Leerzeichen angehängt wird und dann erst der neue Text.
Quasi irgendwas vor dem if column.
Antwort 24 von coros vom 15.10.2021, 19:55 Options
Hallo,
und das fällt Dir nun nach 23 Beitrgen ein, dass Du noch weitere Änderungen haben möchtest? Sind das dann die letzten Änderungen oder fallen Dir noch weitere ein? Denn dann überleg mal noch etwas und schreibe hier alle weiteren Änderungen in einen Beitrag, denn sonst sitzen wir nach Neujahr noch an Deinem Beitrag.
Zu Deine Frage in AW23: Du musst in jede ElseIf-Anweisung eine weitere If-Anweisung einbauen, die prüft, ob bereits etwas in der Zelle steht. Im Prinzip so:
If IsEmpty(Tabelle1.Cells(lngRow, intColumn)) Then
Tabelle1.Cells(lngRow, intColumn) = Tabelle3.TextBox1.Text
Else
Tabelle1.Cells(lngRow, intColumn) = Tabelle1.Cells(lngRow, intColumn) & " " & _
Tabelle3.TextBox1.Text
End If
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 25 von DOMMEl vom 15.10.2021, 22:20 Options
Einen herzlichen Dank...
Diese Idee kam mir leider mal zu kurzfristig....:-)
Das sollte aber auch meine letzte Frage bleiben, ansonsten kannste mir gegen den Kopp hauen.
Ich werd das gleich mal ausprobieren....
Zu Neujahr schicke ich dir nen Geschenk^^.
Einen schönen Abend wünsche ich dir noch
Vielen Dank für deine Zeit...
Antwort 26 von DOMMEl vom 15.10.2021, 22:33 Options
WANDERFUL... ICH HABS HINBEKOMMEN:: ALLES PRIMA.... Dienstag gehts wieder arbeiten und dank deiner Hilfe ist es richtig gut geworden.
Antwort 27 von DOMMEl vom 15.10.2021, 23:02 Options
Du... mal ne ganz andere Frage ... hört sich dumm an ... aber keiner konnte sie mir bisher beantworten...
Wie kann man in Excel Tabellenblätter verschwinden lassen, sodass man sie nicht mehr sieht, aber sie durch die Makros noch aufgerufen werden können?
Oder geht das überhaupt nicht in Excel... (dann kann ich davon gleichmal in der Firma berichten, das dürfte die auch interessieren)
Gruß Dominik
Antwort 28 von coros vom 16.10.2021, 05:00 Options
Hallo Dominik,
mit
Sheets("Tabelle1").Visible = xlSheetVeryHidden
kannst Du ein Tabellenblatt so ausblenden, so dass es nur über die Egenschaft
.Visible = True
wieder einzublenden geht. Ein Einblenden über "
Format => Blatt => Einblenden", bzw. ab Excel 2007 unter "
Start => Format => Ausbelnden & Einblenden => Blatt einblednen..." ist dann nicht mehr möglich.
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 29 von DOMMEl vom 16.10.2021, 12:33 Options
Ok danke. den Code binde ich einfach beim VBA Editor unter den einzelnen Tabellenblätter ein.
Antwort 30 von DOMMEl vom 16.10.2021, 12:37 Options
möchte aber nicht. vl mache ich das auch falsch.
Private Sub Ausblenden()
Sheets("Hauptdatei").Visible = xlSheetVeryHidden
End Sub
ist das richtig? und dann in den VBA Editor und dann bei den einzelnen Tabellenblättern einfügen.
Es verschwindet nix. Muss ich da irgendwas beachten?
Antwort 31 von coros vom 16.10.2021, 12:45 Options
Hallo Dominik
nur alleine den Code einfügen reicht nicht. Bei dem Code, den Du gepostet hast, handelt es sich um ein Makro, dass man starten muss. Entweder Du schreibst den Code in ein Modul, dann muss Du das "Private" vor dem "Sub" löschen und dann rufst Du das Makro über das Tabellenblattereignis, dass Du verwenden möchtest, auf oder Du startest das Makro über einen Button oder eine Tastenkombination.
Wenn Du aber das "Private Sub" verwenden möchtest, dann kopiere das gesamte Makro in das VBA-Projekt des Tabellenblatts, in dem das Makro ausgeführt werden soll. Aber auch hier musst Du dann über ein entsprechendens Ereignis das Private Sub Makro aufrufen.
Bei was soll den das Tabellenblatt verschwinden?
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 32 von DOMMEl vom 16.10.2021, 13:09 Options
Generell soll nur das Starttabellenblatt erscheinen, alle anderen sollen im Hintergrund laufen.
Man kann sie aber nicht über die Tabellenblattlaufzeile aufrufen wie normal.
Normalerweise würde ich ja das Tabellenblatt ausblenden, dann kann aber das Makro nicht mehr auf die Daten zugreifen.
Antwort 33 von coros vom 16.10.2021, 14:09 Options
Hallo Dominik,
kopiere den nachfolgenden VBA-Code in das VBA-Projekt "
DieseArbeitsmappe" in das Ereignis "
Private Sub Workbook_Open()"
Dim intSheets As Integer
For intSheets = 1 To Sheets.Count
If LCase(Sheets(intSheets).Name) <> LCase("Was wollen Sie machen") Then
Sheets(intSheets).Visible = xlSheetVeryHidden
End If
Next
Damit werden alle Tabellenblätter, aus dem Tabellenblatt mit dem Namen "Was wollen Sie machen", ausgeblendet. Ich habe mich dabei nach der Datei aus Deiner AW21 gerichtet. Heißt Dein Starttabellenblatt anders als "Was wollen Sie machen", so musst Du dies im Code ändern.
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 34 von DOMMEl vom 16.10.2021, 15:30 Options
Hi coros
leider ist bei dem Code genau das gleiche Problem wie beim ganz normalen Ausblenden der Tabellenblätter.
Die Makros, die zu den anderen Tabellenblättern gehen, funktionieren nicht mehr., sodass man nicht zu den anderen Tabellenblättern weitergeleitet wird auf denen man die einzelnen Dinge ausführen kann,
Ansonsten funktioniert der Code gut.
Bei einem Klick auf ein Makro (z.B. Suche nach Suchbegriff) sollte man zu dem entsprechenden Tabellenblatt kommen, ohne dass es unten in der Tabellenblattzeile zu sehen ist.
Ziel soll sein, dass man sich immer über die Makros bewegt und nicht in Versuchung gerät auf die einzelnen Tabellenblätter händisch zu gehen.
Und im Internet finde ich leider bisher nichts dazu, weil immer genau das oben beschriebene Problem auftritt, dass die tabellenblätter komplett verschwinden und man über Makros nicht mehr dahin kommt.
MfG Dominik
Antwort 35 von coros vom 16.10.2021, 15:39 Options
Hallo Dominik,
deshalb musst Du in dem entsprechenden Makro (ich weiß nicht, von welchem Makro Du redest) an entsprechender Stelle mit dem Befehl
Sheets("Tabelle1").Visible = True
das Blatt wieder einblenden und beim Deaktivieren des Tabellenbaltts mit dem Befehl
Sheets("Tabelle1").Visible = xlSheetVeryHidden
wieder ausblenden.
Damit Du die Blattnamen nicht siehst, musst Du diese Leiste mit dem Befehl
ActiveWindow.DisplayWorkbookTabs = False
die ausblenden.
Sorry, aber Du kommst immer erst nach einigen Vorschlägen mit dem raus, was Du eigentlich genau möchtest. Langsam verliere ich die Lust.
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 36 von DOMMEl vom 16.10.2021, 17:01 Options
Tut mir leid.. manchmal bin ich halt etwas "ungenau" in meinen Ausführungen, da ich zu wenig Ahnung von VBA und Excel.
Aber der letzte deiner Codes ist wirklich perfekt!!
Danke nochmal für deine Ausdauer.
Und einen Schönen Abend noch
LG Dominik