Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Gültigkeitsliste als Dropdownfeld erweiterbar?

Frage Microsoft Microsoft Office

Mitglied: GerdReiss

GerdReiss (Level 1) - Jetzt verbinden

04.04.2007, aktualisiert 09.04.2007, 5082 Aufrufe, 1 Kommentar

Hallo,

ich hatte heute morgen schon mal ne Frage gepostet und es wurde mir super weitergeholfen.
Jetzt häng ich aber schon wieder:

Ich möchte ein Liste mit Einnahmen/Ausgaben erstellen.

Einige Posten kehren wieder (sollen auch wg. späterer Auswertung (Pivot) gleich benannt bleiben), manche jedoch nur einmal.
Am liebsten wär mir eine Spalte bei der ich zum Einen aus einem Dropdown-Feld auswählen kann das ich mit "Katalogbegriffen" hinterlege (wie bei Gültigkeit->Liste machbar), zum Anderen aber soll es auch möglich sein, dort auch freie Begriffe einzutragen, also keine Katalogbegriffe. Gültigkeit->Liste erlaubt mir ja nur die in der von mir in der Liste festgelegten Begriffe zu verwenden.
Das Feld sollte diese Einzelbegriffe nicht als neue Katalogbegriffe erfassen bzw. die Liste erweitern, sondern die Katalogbegriffe möchte ich in Form einer hinterlegten Liste, die ich manuell erweitern kann, auswählen.

Geht das? Falls ja wie? Ich steh auf dem Schlauch.

Danke für Eure Hilfe im Voraus.
Mitglied: bastla
09.04.2007 um 01:22 Uhr
Hallo GerdReiss!

Dein Vorhaben lässt sich AFAIK nur mit VBA umsetzen.

Für meinen unten dargestellten Entwurf benötigst Du zunächst eine Mappe mit 2 Tabellen ("Daten" und "Liste").
Trage in die Tabelle "Liste" ab Zelle A3 untereinander einige der vorgegebenen Texte für das DropDown-Feld ein.
Danach kannst Du mit Rechtsklick auf das Blattregister der Tabelle "Daten" den Menüpunkt "Code anzeigen" wählen. In das jetzt angezeigte (große) Codefenster ist das folgende Programm einzufügen:
01.
Option Explicit 
02.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
03.
'Bereich B2:B20 überwachen 
04.
If Not Intersect(Target, Range("B2:B20")) Is Nothing Then frmEingabe.Show 
05.
'Alternative: Gesamte Spalte B überwachen 
06.
'If Target.Column = 2 Then frmEingabe.Show 
07.
End Sub
Je nachdem, ob Du nur einen bestimmten Zellbereich der Tabelle "Daten" nach Deinen Vorstellungen befüllen willst oder die Funktionalität für eine gesamte Spalte benötigt wird, musst Du eine der beiden "If"-Zeilen verwenden. Die nicht benötigte Zeile wird mit dem vorangestellten Apostroph deaktiviert. Im Beispiel werden zur Demonstration nur die Zellen B2:B20 überwacht.

Zusätzlich brauchst Du ein "UserForm"-Steuerelement, welches Du durch Rechtsklick auf "Tabelle1 (Daten)" (in der Baumstruktur links oben), "Einfügen", "UserForm" erhältst.
Wenn Du das eingefügte Formular anklickst, kannst Du links unten dessen Eigenschaften bearbeiten (falls nicht, über "Ansicht/Eigenschaften" die Anzeige dafür einschalten).

Ändere folgende Eintragungen:
Name:frmEingabe
Caption:Eingabe (oder anderer Text --> Fenstertitel)
Height:105
Width:142
StartUpPosition:0 - Manuell

Falls die "Werkzeugsammlung" nicht sichtbar ist, diese über das "Ansicht"-Menü einschalten und ein Element "Kombinationsfeld" ("ComboBox") in die UserForm einzeichnen (Linksklick in der "Werkzeugsammlung" auf "Kombinationsfeld" und dann in der Userform einen Rahmen dafür aufziehen).
Auf gleiche Art und Weise auch eine "Befehlsschaltfläche" ("CommandButton") und ein "Bezeichnungsfeld" ("Label") auf dem Formular platzieren (Position wird mit den nächsten Einstellungen festgelegt).

In den Eigenschaften folgende Eintragungen vornehmen:
ComboBox1:
Name:cboEintrag
Caption:| |"Label1" löschen
Height:15,75
Left:12
Top:6
Width:114


CommandButton1:
Name:btnHinzu
Accelerator:h
Caption:Eintrag zur Liste hinzufügen
Height:24
Left:12
Top:30
Width:114


Label1:
Name:lblStatus
Font:Tahoma, Schriftgrad 7
Heigth:24
Left:12
Top:60
Width:114
WordWrap:True

Danach mit Rechtsklick auf das Element "frmEingabe" in der Baumstruktur für die UserForm "Code anzeigen" wählen und den folgenden Code einfügen:
01.
Option Explicit 
02.
'Position der Liste für Dropdown festlegen (Tabelle "Liste", ab Zelle A3): 
03.
Const sListenBlatt As String = "Liste" 
04.
Const ListeC As Integer = 1 'Spalte A 
05.
Const ListeR As Integer = 3 
06.
 
07.
Private Sub UserForm_Initialize() 
08.
Dim intTop As Integer 
09.
'Positionierung des Eingabeformulars 
10.
intTop = ActiveCell.Top + 110 
11.
frmEingabe.Top = intTop 
12.
frmEingabe.Left = ActiveCell.Left 
13.
btnHinzu.Enabled = True 
14.
'Aktuellen Inhalt der Zelle in ComboBoxFeld übernehmen 
15.
cboEintrag.Text = ActiveCell.Value 
16.
End Sub 
17.
 
18.
Private Sub cboEintrag_Enter() 
19.
'Liste neu befüllen 
20.
Dim R As Integer 
21.
cboEintrag.Clear 
22.
R = ListeR 
23.
Do While Sheets(sListenBlatt).Cells(R, ListeC).Value <> "" 
24.
    cboEintrag.AddItem Sheets(sListenBlatt).Cells(R, ListeC).Value 
25.
    R = R + 1 
26.
Loop 
27.
End Sub 
28.
 
29.
Private Sub cboEintrag_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
30.
Select Case KeyCode 
31.
Case 13 
32.
    Eintragen 
33.
Case 27 'Eingabe abbrechen, ohne den Inhalt der Zelle zu ändern 
34.
    Unload Me 
35.
End Select 
36.
End Sub 
37.
 
38.
Private Sub cboEintrag_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 
39.
Eintragen 
40.
End Sub 
41.
 
42.
Private Sub Eintragen() 
43.
ActiveCell.Value = cboEintrag.Text 
44.
'Cursor in nächste Zelle rechts setzen 
45.
Cells(ActiveCell.Row, ActiveCell.Column + 1).Activate 
46.
Unload Me 
47.
End Sub 
48.
 
49.
Private Sub cboEintrag_AfterUpdate() 
50.
'ComboBoxFeld hat neuen Inhalt erhalten, Hinzufügen ermöglichen 
51.
btnHinzu.Enabled = True 
52.
End Sub 
53.
 
54.
Private Sub cboEintrag_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
55.
'Inhalt des ComboBoxFeldes hat sich geändert - Text kommt als neuer Listeneintrag in Frage 
56.
btnHinzu.Enabled = True 
57.
End Sub 
58.
 
59.
Private Sub btnHinzu_Click() 
60.
'Aktuellen Inhalt des ComboBoxFeldes der Liste hinzufügen 
61.
Dim R As Integer, bAdd As Boolean, Index As Integer 
62.
If Trim(cboEintrag.Text) = "" Then 
63.
    lblStatus.Caption = "<leer> nicht hinzugefügt." 
64.
Else 
65.
    R = ListeR 
66.
    bAdd = True 
67.
    Do While Sheets(sListenBlatt).Cells(R, ListeC).Value <> "" 
68.
        If Sheets(sListenBlatt).Cells(R, ListeC).Value = cboEintrag.Text Then 
69.
            bAdd = False 
70.
            Index = R - ListeR 
71.
        End If 
72.
        R = R + 1 
73.
    Loop 
74.
    If bAdd Then 
75.
        Sheets(sListenBlatt).Cells(R, ListeC).Value = cboEintrag.Text 
76.
        cboEintrag.AddItem cboEintrag.Text 
77.
        Sheets(sListenBlatt).Cells(ListeR, ListeC).Sort _ 
78.
            Key1:=Sheets(sListenBlatt).Cells(ListeR, ListeC), _ 
79.
            Order1:=xlAscending, Header:=xlNo, Orientation:=xlTopToBottom 
80.
        lblStatus.Caption = "<" & cboEintrag.Text & "> hinzugefügt." 
81.
    Else 
82.
        lblStatus.Caption = "<" & cboEintrag.Text & "> war bereits vorhanden." 
83.
        cboEintrag.SetFocus 
84.
        cboEintrag.ListIndex = Index 
85.
    End If 
86.
End If 
87.
'Weiteres Hinzufügen erst sinnvoll, wenn ComboBoxFeld neuen Inhalt erhalten hat 
88.
btnHinzu.Enabled = False 
89.
End Sub
Funktionsweise / Verwendung:
  • Wird eine Zelle des überwachten Bereiches ausgewählt, erfolgt der Aufruf des Eingabeformulars. Dieses wird (bei standardmäßiger Zeilenhöhe) unterhalb der aktuellen Zelle positioniert (Anpassung über die Zeile intTop = ActiveCell.Top + 110).
  • Zunächst wird in das Dropdown-Feld der aktuelle Zelleninhalt übernommen. Dieser kann editiert oder durch einen Eintrag aus der Liste ersetzt werden.
  • Mit der entsprechenden Schaltfläche kann der aktuelle Wert der ComboBox auch der Liste hinzugefügt werden. Diese wird danach aufsteigend sortiert. Leere bzw bereits in der Liste vorhandene Einträge werden nicht hinzugefügt. Beim Vergleich der Einträge werden Groß-/Kleinschreibung unterschieden (lässt sich auf Wunsch ändern). Eventuelle Leerzeichen am Beginn oder Ende des neuen Textes können ebenfalls dazu führen, dass er sich von einem bereits vorhandenen unterscheidet und daher in die Liste aufgenommen wird.
  • Nach Bestätigung mit der Eingabetaste oder per Doppelklick auf die ComboBox wird der dann aktuelle Inhalt in die Tabelle eingetragen und der Zellcursor in die benachbarte Zelle rechts platziert.
  • Ein Abbruch mit Esc bewirkt, dass sich der Inhalt der Zelle nicht ändert und die Zelle markiert bleibt, sodass sie "normal" bearbeitet werden kann.
  • Die Liste für die ComboBox kann auch manuell ergänzt werden, es dürfen dabei nur keine Zellen leer bleiben. Die Adresse der ersten Zelle der Liste (Blattname, Spalte, Zeile) ist im Programm der UserForm zu hinterlegen (siehe Kommentar).

Gutes Gelingen!
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(7)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
JavaScript
gelöst Dropdownfeld auslesen und mit AJAX und JS an PHP senden (7)

Frage von ITFlori zum Thema JavaScript ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (17)

Frage von Unwichtig zum Thema Netzwerkmanagement ...