Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1276to1280
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wert aus Inputbox in erste freie Zelle schreiben

Wert aus Inputbox in erste freie Zelle schreiben
Ben
Hallo liebe Foraner!
Hier mal wieder eine Frage zur VBA-Programierung.
Ich habe ein Dropdownmenü, das bei Bedarf vom User erweitert werden können soll - aber nicht über die "leere Zeilen ignorieren"-Funktion sondern so, dass diese Werte fest in das Dropdownmenü aufgenommen werden.
Dazu habe ich mir folgenden Lösungsweg überlegt.
Der Dropdownmenü ist ein benannter Bereich (eine Spalte und 100 Zeilen), in welchem auch Leerzeilen vorkommen. Wenn der User einen neuen Wert für das Dropdownmenü hat, kann er über eine Schaltfläche ein Makro aufrufen und seine Sprache in eine Inputbox eingeben.
Das Makro soll den dort eingegeben Wert auf Dopplung prüfen (ob er schon vorhanden ist) und dann gegebenfalls eine MsgBox zurückgeben, dass der Wert schon vorhanden ist.
Falls nicht, soll er im Blatt "Dropdownmenüs" im Bereich $F$648:$F$1147 nach der ersten freien Zelle suchen und den in der Inputbox angegeben Wert dort eingeben.
Das angeben des Wertes habe ich gut hinbekommen - aber es hängt beim Prüfen, beim Auffinden der leeren Zelle und beim Eintragen des Wertes. :-)
Kann mir jemand von euch helfen? Ich würde mich sehr freuen!
Liebe Grüße, Ben

AW: Wert aus Inputbox in erste freie Zelle schreiben
27.08.2012 00:30:46
fcs
Hallo Ben,
nachfolgen eine Variante, wie du es zmsetzen könntest.
Gruß
Franz
Sub Neuer_Eintrag_DropDownAuswahl()
Dim varEintrag As Variant
Dim rngZelle As Range, rngBereich As Range
varEintrag = InputBox(Prompt:="Bitte neuen Eintrag für Dropdownauswahl eingeben", _
Title:="Dropdownauswahl-Neuer Eintrag")
If varEintrag = "" Then GoTo Beenden
Set rngBereich = Worksheets("Dropdownmenüs").Range("$F$648:$F$1147")
'  Set rngBereich = Worksheets("Dropdownmenüs").Range("Liste_Sprache") 'Mit Name des Bereichs
'Eingabewert suchen
Set rngZelle = rngBereich.Find(What:=varEintrag, LookIn:=xlValues, lookat:=xlWhole)
If rngZelle Is Nothing Then
'Letzte belegte Zelle suchen
With rngBereich
Set rngZelle = rngBereich.Find(What:="*", After:=.Range("A1"), LookIn:=xlFormulas, _
lookat:=xlWhole, searchorder:=xlByRows, searchdirection:=xlPrevious)
End With
If rngZelle Is Nothing Then
rngBereich.Range("A1").Value = varEintrag
ElseIf rngBereich.Rows.Count = Application.WorksheetFunction.CountA(rngBereich) Then
MsgBox "Bereich ist ausgefüllt, keine weiteren Einträge möglich", _
vbInformation + vbOKOnly, "Dropdownauswahl-Neuer Eintrag"
Else
rngZelle.Offset(1, 0).Value = varEintrag
With rngBereich
.Sort Key1:=.Range("A1"), order1:=xlAscending, Header:=xlNo
End With
End If
Else
MsgBox "Eintrag """ & varEintrag & """ ist schon vorhanden", _
vbInformation + vbOKOnly, "Dropdownauswahl-Neuer Eintrag"
End If
Beenden:
End Sub

Anzeige
AW: Wert aus Inputbox in erste freie Zelle schreiben
28.08.2012 21:47:17
Ben
Herzlichen Dank dir! Hat gut geklappt.
Liebe Grüße, Ben

AW: 1. freie Zelle unabhängig von Anzahl Spalten
29.08.2012 07:09:31
Anzahl
Hallo Franz,
ich hab doch nochmal ein kleines Problem mit dem Code.
Hintergrund ist, dass der Bereich mit den Sprachen ein Bereich aus einer Tabelle ist, die mehrere Spalten hat. Dadurch funktioniert das mit dem Offset nicht so recht.
Falls die 1. Spalte in der Zeile über dem nächsten leeren Eintrag ausgefüllt ist, hat dein Code gut funktioniert, falls ich auch in der Spalte Sprachenkürzel (3 Spalten weiter rechts) einen Eintrag hatte, musste ich das Offset etwas anpassen.
Er berücksichtigt bei der Aktion Find also auch immer die umliegenden Spalten des angegebenen Bereichs.
Kann man das auch irgendwie aushebeln, sodass er sich wirklich nur auf die Spalte mit den Sprachen bezieht, selbst wenn der zu durchsuchende Bereich mehrere Spalten hat?
Vielen Dank dir für deine Mühe!
Sub Neue_Sprache_anlegen()
'Öffnet eine Input-Box, in welcher der User die neu anzulegende Sprache eingeben kann
'und fügt diese dann der Dropdownliste hinzu. Anschließend erfolgt noch eine alphabetische
'Sortierung der Sprachen.
'Deklaration der Variablen
Dim Sprache As Variant
Dim Zelle_für_Sprache As Range
Dim DD_Sprache_max As Range
Set DD_Sprache_max = Worksheets("Dropdownmenüs").Range("$F$648:$F$1147")
Dim Sprachenkürzel As Variant
'Merken des aktiven Arbeitsblatts
Aktives_Blatt = ActiveSheet.Name
'Abfrage der Daten durch Input-Boxen
Sprache = InputBox("Bitte trage die neu anzulegende Sprache ein, wie sie von der " & _
"Gesellschaft bezeichnet wird:", "Sprache angeben")
If Sprache = "" Then Exit Sub
Sprachenkürzel = InputBox("Bitte trage das Kürzel der anzulegenden Sprache ein, wie sie " & _
"von der Gesellschaft bezeichnet wird:", "Sprachenkürzel angeben")
'Abgleich der eingegebenen Sprache mit den bereits vorhandenen Sprachen
Set Zelle_für_Sprache = DD_Sprache_max.Find(What:=Sprache, LookIn:=xlValues, _
lookat:=xlWhole)
If Zelle_für_Sprache Is Nothing Then
'Falls Sprache noch nicht hinterlegt ist
'Letzte belegte Zelle suchen
With DD_Sprache_max
Set Zelle_für_Sprache = DD_Sprache_max.Find(What:="*", After:=.Range("A1"), _
LookIn:=xlFormulas, lookat:=xlWhole, searchorder:=xlByRows, _
searchdirection:=xlPrevious)
End With
'Falls noch keine Sprachen angelegt sind wird die Sprache in die erste Zeile eingetragen
If Zelle_für_Sprache Is Nothing Then
DD_Sprache_max.Range("A1").Value = Sprache
DD_Sprache_max.Range("D1").Value = Sprachenkürzel
'Falls schon Sprachen hinterlegt sind
Else
'Falls schon die maximale Anzahl an hinterlegbaren Sprachen hinterlegt ist
If DD_Sprache_max.Rows.Count = Application.WorksheetFunction.CountA(DD_Sprache_max) _
Then
MsgBox "Die maximale Anzahl an hinterlegbaren Sprachen ist erreicht. " & _
"Leider sind keine weiteren Einträge möglich", vbInformation + vbOKOnly, _
"Fehler beim Anlegen der neuen Sprache"
Exit Sub
Else
'Falls neue Sprache aufgenommen werden kann
Zelle_für_Sprache.Offset(0, -1).Value = Sprache
Zelle_für_Sprache.Offset(0, 2).Value = Sprachenkürzel
'Sortieren der Sprachen
With DD_Sprache_max
.Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlNo
End With
End If
End If
Else
'Falls Sprache schon hinterlegt ist
MsgBox "Die Sprache """ & Sprache & """ ist schon vorhanden!", vbInformation + vbOKOnly, _
"Sprache schon vorhanden"
Exit Sub
End If
'Bestätigung der Anlage der Sprache
Sheets(Aktives_Blatt).Select
MsgBox "Die Sprache """ & Sprache & """ wurde angelegt.", vbOKOnly, "Sprache wurde angelegt"
End Sub

Anzeige
AW: 1. freie Zelle unabhängig von Anzahl Spalten
29.08.2012 10:49:53
Anzahl
Hallo Ben,
irgendwie ist deine Beschreibung etwas konfus.
Insbesondere konnte ich deine Korrekturversuche im Code mit dem Offset nur bedingt nachvollziehen.
Ich gehe mal davon aus, dass die Sprache immer in Spalte F eingetragen werden soll und das Kürzel 3 Spalten nach rechts eingetragen werden soll also in Spalte also in Spalte I.
Ggf. muss du den Spalten-Offset anpassen. Ebenso den Bereich "$F$648:$I$1147" wenn noch mehr Spalten bei der Suche nach der letzten belegten Zeile berücksichtigt werden sollen.
Gruß
Franz
Text-Datei mit Code:
https://www.herber.de/bbs/user/81632.txt

Anzeige
AW: 1. freie Zelle unabhängig von Anzahl Spalten
29.08.2012 13:13:45
Anzahl
Hallo Franz,
du hast recht, also nochmal etwas unkonfuser. :-)
Die Sprache ist der Primärschlüssel. Bei den meisten Sprachen gibt es ein Sprachenkürzel, dass 3 Spalten weiter rechts (Spalte I) eingetragen werden soll. Da nicht alle Sprachen ein Kürzel haben, ist in Spalte I nicht immer ein Eintrag, auch wenn in Spalte F eine Sprache steht. Und das hat scheinbar Auswirkungen auf das Ergebnis der Funktion Offset.
Also Fakt ist:
- Auf der Suche nach leeren Zellen darf nur die Sprache berücksichtigt werden.
- Das Sprachenkürzel soll 3 Spalten weiter rechts eingegeben werden, in der selben Zeile.
Wie lässt sich das lösen?
PS: Den Bereich DD_Sprache_max habe ich tatsächlich auf $F$648:$I$1147 erweitert. Habs nur falsch gepostet gehabt.

Anzeige
AW: 1. freie Zelle unabhängig von Anzahl Spalten
29.08.2012 18:23:25
Anzahl
Hallo Ben,
hast du denn mein angepasstes Makro probiert?
Ansonsten solltest du mal eine Beispieldatei mit dem Tabellenblatt hochladen, damit ggf. klarer wird, wo Daten stehen-wo gesucht werden soll und was sonst noch zu beachten ist.
Gruß
Franz

AW: 1. freie Zelle unabhängig von Anzahl Spalten
29.08.2012 21:18:50
Anzahl
Hallo Franz,
entschuldige bitte. Ich hatte die Codes zwar flüchtig verglichen, hab aber die kleinen Änderungen nicht wahrgenommen. Ich habs jetzt getestet, aber die Änderungen haben das nicht verbessert. Im Gegenteil, jetzt schreibt er es unter den Bereich DD_Sprachen_max.
Versuche es bitte mal mit folgenden Situationen:
- Alle Sprachen haben Kürzel
- Einzelne Sprachen haben Kürzel
- Keine Sprachen haben Kürzel
Es muss bitte in allen 3 Situationen klappen, dass Excel die erste freie Zeile findet und dort die neue Sprache anlegt.
Die Testdatei ist hier: https://www.herber.de/bbs/user/81637.xlsm
Vielen Dank!
Gruß, Ben

Anzeige
AW: 1. freie Zelle unabhängig von Anzahl Spalten
30.08.2012 11:48:12
Anzahl
Hallo Ben,
1. Problem: Spalte G mit den Formel.
Dadurch ist immer die Zeile 1008 die letzte Zeile mit Daten. Das hab ich angepasst-Es wird nur noch in der 1. Spalte gesucht.
2. Problem
Inputbox für Sprachenkürzel.
Bei Abbrechen wird auch ein Leerstring als Ergebnis zurückgegeben.
Soll das Sprachenkürzel leer bleiben, dann muss dies extra bestätigt werden.
Da du ja immer 2 Eingaben machen willst, ist es sinnvoll hier ein kleines Userform anzulegen. Das ist flexibler in der Programmierung. Hab ich dir auch mal eingebaut. So kannst du auch mehrere Sprachen eingeben, ohne den Dialog verlassen zu müssen.
Gruß
Franz
https://www.herber.de/bbs/user/81641.xlsm
Anzeige

384 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige