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
GELÖST

automatisches Vorbelegen von Feldern nach auswahl aus einem Dropdown-Menü

Frage Microsoft Microsoft Office

Mitglied: captainchaos666

captainchaos666 (Level 1) - Jetzt verbinden

25.12.2006, aktualisiert 27.12.2006, 13817 Aufrufe, 13 Kommentare

Hallo Excel-Experten,

kann ich mit Excel ein definiertes Dropdown-Menü erstellen. Nach der Auswahl sollen dann verschieden Werte in Spalten geschrieben werden.

Beispiel:

Spalte A Auwahliste:

Bestellnummer 100
Bestellnummer 101
Bestellnummer 102

Danach soll Spalte B bei Auswahl Bestellnummer 100 z.B -15- anzeigen, sowie andere Werte in Spalte C und D
Danach soll Spalte B bei Auswahl Bestellnummer 101 z.B -222- anzeigen
Danach soll Spalte B bei Auswahl Bestellnummer 102 z.B -456- anzeigen

Dank Euch im Voraus, und noch ein erholsames Weihnachten


Gruß Alex
Mitglied: miniversum
25.12.2006 um 15:08 Uhr
Willst Du ne lösung mit oder ohne Macro?

Ohne würd ichs über Daten -> Gültigkeit machen udn ihm im Benutzerdefinierten die Bestellnummern vorgeben. Dann in B, C und D mit ner Wenn funktion auf A verweisen.

Mit Macro dan halt entsprechend zur Gültigkeit mit gleich den einträgen in B,C und D.

miniversum
Bitte warten ..
Mitglied: captainchaos666
25.12.2006 um 15:21 Uhr
Wow, das ging schnell,
mit oder ohne Makro ist mir egal, ich möchte danach die Daten aus einer anderen Anwendung mittels VisualBasic auslesen. Bekomme ich dann ein Problem wenn in der Spalte ein Wenn und Dann steht?

Kannst Du mir mal genauer erklären wie es mit Makros geht, hab da keine Ahnung, würde mich aber interessieren

Gruß Alex
Bitte warten ..
Mitglied: miniversum
25.12.2006 um 15:59 Uhr
Jetzt mal ohne zu Testen müßte das ungefär so aussehen :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range(Target.Address).Column = Range("A:A").Column Then
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="Bestellnummer 100,Bestellnummer 101,Bestellnummer 102"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If

Select Case Range("A" & Range(Target.Address).Row).Value
Case "Bestellnummer 100"
Range("B" & Range(Target.Address).Row).Value = "-15-"
Range("C" & Range(Target.Address).Row).Value = "-25-"
Range("D" & Range(Target.Address).Row).Value = "-35-"
Case "Bestellnummer 101"
Range("B" & Range(Target.Address).Row).Value = "-222-"
Range("C" & Range(Target.Address).Row).Value = "-333-"
Range("D" & Range(Target.Address).Row).Value = "-444-"
Case "Bestellnummer 102"
Range("B" & Range(Target.Address).Row).Value = "-456-"
Range("C" & Range(Target.Address).Row).Value = "-567-"
Range("D" & Range(Target.Address).Row).Value = "-678-"
End Select

End Sub


miniversum
Bitte warten ..
Mitglied: captainchaos666
25.12.2006 um 22:44 Uhr
@miniversum, Dank Dir das geht! Super!
Kannst du mir noch bis zum ersten End If kommentieren was dort geschieht. Es funktioniert, aber ich verstehe momentan nicht Warum!

Ist es außerdem noch möglich zum Beispiel bei Case "Bestellnummer 102" unter dem Wert "D" nochmals auszuwählen zu lassen

Standard -678- wenn nichts ausgewählt wird, oder alternativ -666-



Vielen Dank nochmals für deine Hilfe!


Gruß Alex
Bitte warten ..
Mitglied: miniversum
26.12.2006 um 10:13 Uhr
Ok hier die Erklärung:
Allgemeiner Ablauf:
Es wird geprüft ob du eine Zelle im der Spalte A markiert hast und wenn das so ist dan wird für diese Zelle eine Gültigkeitsprüfung erzeugt.

Ablauf im einzelnen:
'hier wird überprüft ob du eine Zelle in Spalte A markiert hast (über Target.Address)
If Range(Target.Address).Column = Range("A:A").Column Then
'ab hier wird eine Gültigkeitsprüfung erzeugt
With Selection.Validation
.Delete 'alte Werte für die Gültigkeitsprüfungen löschen
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=
xlBetween, Formula1:="Bestellnummer 100,Bestellnummer 101,Bestellnummer 102" 'Neue Werte für die Gültigkeitsprüfung anlegen
'ab hier noch andere Parameter wie Leerzeichen ignorieren, das der Pfeil angezeigt wird, und was bei andern Eingaben geschehen soll (Fehlermeldungen oder Hinweise oder so), ist nur der vollständigkeit halber.
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If


Wenn du jetzt bei D noch was haben willst könntest du das ganze noch in einander verschachteln, wird aber bei mehreren Angaben recht ausfendig.
Drum würd ich einfach noch den Block für D drunterhängen und die If bedingung am anfang anpassen.
Das ganze wäre also so:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range(Target.Address).Column = Range("A:A").Column Then
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=
xlBetween, Formula1:="Bestellnummer 100,Bestellnummer 101,Bestellnummer 102"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If

Select Case Range("A" & Range(Target.Address).Row).Value
Case "Bestellnummer 100"
Range("B" & Range(Target.Address).Row).Value = "-15-"
Range("C" & Range(Target.Address).Row).Value = "-25-"
Range("D" & Range(Target.Address).Row).Value = "-35-"
Case "Bestellnummer 101"
Range("B" & Range(Target.Address).Row).Value = "-222-"
Range("C" & Range(Target.Address).Row).Value = "-333-"
Range("D" & Range(Target.Address).Row).Value = "-444-"
Case "Bestellnummer 102"
Range("B" & Range(Target.Address).Row).Value = "-456-"
Range("C" & Range(Target.Address).Row).Value = "-567-"
Range("D" & Range(Target.Address).Row).Value = "-678-"
End Select

'Ab hier für D die Auswahl
If Range(Target.Address).Column = Range("D:D").Column And _
Range("A" & Range(Target.Address).Row).Value = "Bestellnummer 102" Then
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=
xlBetween, Formula1:="-678-,-666-"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If

End Sub

miniversum
Bitte warten ..
Mitglied: captainchaos666
26.12.2006 um 10:34 Uhr
Hallo miniversum,
bin begeistert! Danke für deine Hilfe

Wünsch Dir noch ein schönes Fest


Gruß Alex
Bitte warten ..
Mitglied: captainchaos666
26.12.2006 um 11:37 Uhr
Bitte nochmals ein kleine Erklärung,
Ich habs zwar zum laufen gebracht, aber ich habs einfach in den Tabellen-Ordner und den Modul-Ordner kopiert und danach ein paar mal auf Makro ausführen gedrückt, dann lief es irgendwann!

Wie binde ich Quellcode am struktuiertesten ein?

Muss ich noch für die Auswahl D noch ein Case einbauen, wenn ich 666 bei dem Menü anwähle, dann bekomme ich ein leeres Feld, oder wenn ich nur auf die alte Zeile drücke dann bekomme ich wieder mein alten Wert 678

Gruß Alex
Bitte warten ..
Mitglied: miniversum
26.12.2006 um 13:11 Uhr
Ok war ein Fehler von mir:
Ändere den Case mal folgendermasen um:

Case "Bestellnummer 102"
Range("B" & Range(Target.Address).Row).Value = "-456-"
Range("C" & Range(Target.Address).Row).Value = "-567-"
if not Range("D" & Range(Target.Address).Row).Value = "-678-" or Range("D" & Range(Target.Address).Row).Value = "-666-" then Range("D" & Range(Target.Address).Row).Value = "-678-"

Das mit den einfach reinkopieren stimmt aber das mit dem selbst Makro ausführen brauchst du eigentlich nicht.
Es sollte immer laufen sobald du auf ein Feld in der Tabelle klickst, weil die Funktion ja Worksheet_SelectionChange(ByVal Target As Range) heißt.
Hast du es in einen Modul Ordner (modul 1 oder so) kopiert? Es muß im Tabellenblat (z.B. Tabelle1) stehen.


Wen du smal ausprobieren willst kannst du ja mal folgendes in Tabelle1 (oder wie es bei dir heist) kopieren:

Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox Target.Address
End Sub

Hier sollte einfach nur imemr in Meldungsfenster aufgeben was dir Anzeigt welche Zelle du angeklickt hast.

miniversum
Bitte warten ..
Mitglied: captainchaos666
26.12.2006 um 14:21 Uhr
Hallo miniversum,
den Wert 666 kann ich immer noch nicht anwählen. Wenn ich auf 666 im Menü wähle bekomme ich ein leeres Feld, wenn ich die Zeile nochmals anklicke bekomme ich den default Wert! Denn Wert 666 kann ich nicht auswählen. Was wolltest du mit der If Not Bedingung erreichen, das der default Wert geschrieben wird oder?

Gruß Alex
Bitte warten ..
Mitglied: miniversum
26.12.2006 um 15:44 Uhr
Das er den wert ncith verändert wenn 678 oder 666 drinsteht
Ich hab das aus dem Kopf geschrieben und nicht getestet sorry.

Sollte eigentlch gehen so.

miniversum
Bitte warten ..
Mitglied: captainchaos666
27.12.2006 um 13:59 Uhr
Hallo ich bekomme den Quellcode einfach nicht gebacken, kann mir jemand weiterhelfen


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Range(Target.Address).Column = Range("A2:A10").Column Then
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="Bestellnummer 100,Bestellnummer 101,Bestellnummer 102"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If

'Hier für E die Auswahl
If Range(Target.Address).Column = Range("E2:E10").Column And Range("A" & Range(Target.Address).Row).Value = "Bestellnummer 101" Then
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="-678-,-666-"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If

' Vorbelegung Werte
Select Case Range("A" & Range(Target.Address).Row).Value
Case "Bestellnummer 100"
Range("B" & Range(Target.Address).Row).Value = "-15-"
Range("C" & Range(Target.Address).Row).Value = "-25-"
Range("D" & Range(Target.Address).Row).Value = "-35-"
Case "Bestellnummer 101"
Range("B" & Range(Target.Address).Row).Value = "-222-"
Range("C" & Range(Target.Address).Row).Value = "-333-"
Range("D" & Range(Target.Address).Row).Value = "-444-"
Case "Bestellnummer 102"
Range("B" & Range(Target.Address).Row).Value = "-456-"
Range("C" & Range(Target.Address).Row).Value = "-567-"
Range("D" & Range(Target.Address).Row).Value = "-777-"
End Select
End Sub

Hab momentan folgende Probleme!
- Mit Range("A2:A10") soll die erste Auswahl doch nur von Feld A2 bis A10 funktionieren, bei mir geht es über die ganze Excelliste (Zeile 1 bis Zeile xxxxx)?
- Bei Auswahl E kann ich zwar nach der Bedingung auswählen, aber es wird kein Wert angezeigt?
- Wenn ich in die Zeile Klicke egal wo, so wird die ganze Zeile aktualisiert, ist es möglich die Aktualisierung nur dann durchzuführen wenn auf Spalte A geklickt wurde oder was im Menü A ausgewählt wurde?

Kann mir jemand weiterhelfen

Gruß Alex
Bitte warten ..
Mitglied: bastla
27.12.2006 um 19:37 Uhr
Hallo captainchaos666!

- Mit Range("A2:A10") soll die erste Auswahl doch nur von Feld A2 bis A10 funktionieren, bei mir geht es über die ganze Excelliste (Zeile 1 bis Zeile xxxxx)?
Ändere die Zeile If Range(Target.Address).Column = Range("A2:A10").Column Then in
01.
If Not Intersect(Target, Range("A2:A10")) Is Nothing Then
Analog dazu müsstest Du (zur Sicherheit) auch für die Spalte E schreiben:
01.
If Not Intersect(Target, Range("E2:E10")) Is Nothing And Range("A" & Range(Target.Address).Row).Value = "Bestellnummer 101" Then
- Bei Auswahl E kann ich zwar nach der Bedingung auswählen, aber es wird kein Wert angezeigt?
Ich gehe davon aus, dass das führende Minuszeichen zB in "-666-" stört. Kannst Du
  • dieses vermeiden,
  • durch ein benutzerdefiniertes Zahlenformat ersetzen oder
  • die Zellen vorweg als "Text" formatieren?
Ansonsten könntest Du noch im Code die Schreibweise mit Apostroph (') versuchen, also:
01.
Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="'-678-,'-666-"
- sieht zwar in der Liste nicht so gut aus, funktioniert aber (zumindest bei mir).

- Wenn ich in die Zeile Klicke egal wo, so wird die ganze Zeile aktualisiert, ist es möglich die Aktualisierung nur dann durchzuführen wenn auf Spalte A geklickt wurde oder was im Menü A ausgewählt wurde?
Meinst Du mit "aktualisiert", dass der Programmteil "Vorbelegung Werte" ausgeführt wird? Falls ja, könntest Du diesen Teil auf das Ereignis "Worksheet_Change" beziehen und den ganzen Block in das folgende Sub stellen (im "Worksheet_SelectionChange"-Ereignis brauchst Du ihn dann natürlich nicht mehr):
01.
Private Sub Worksheet_Change(ByVal Target As Range) 
02.
'nur bei einer Änderung in den Zellen "A2:A10" 
03.
If Intersect(Target, Range("A2:A10")) Is Nothing Then Exit Sub 
04.
 
05.
' Vorbelegung Werte 
06.
Select Case Range("A" & Range(Target.Address).Row).Value 
07.
Case "Bestellnummer 100" 
08.
Range("B" & Range(Target.Address).Row).Value = "-15-" 
09.
Range("C" & Range(Target.Address).Row).Value = "-25-" 
10.
Range("D" & Range(Target.Address).Row).Value = "-35-" 
11.
Case "Bestellnummer 101" 
12.
Range("B" & Range(Target.Address).Row).Value = "-222-" 
13.
Range("C" & Range(Target.Address).Row).Value = "-333-" 
14.
Range("D" & Range(Target.Address).Row).Value = "-444-" 
15.
Case "Bestellnummer 102" 
16.
Range("B" & Range(Target.Address).Row).Value = "-456-" 
17.
Range("C" & Range(Target.Address).Row).Value = "-567-" 
18.
If Not Range("D" & Range(Target.Address).Row).Value = "-666-" Then Range("D" & Range(Target.Address).Row).Value = "-678-" 
19.
End Select 
20.
End Sub
Die Zuweisung für Spalte D bei "Bestellnummer 102" habe ich so verstanden, dass eine Vorbelegung mit "-678-" erfolgen soll, falls nicht schon ein Eintrag "-666-" existiert - richtig? Auf Basis dieser Annahme habe ich den Code etwas vereinfacht.

HTH
bastla
Bitte warten ..
Mitglied: miniversum
27.12.2006 um 19:41 Uhr
Die Einschränkung, dass nur dann was verändert wird wenn du in einem bestimmten Bereich was änderst bzw. draufklickst sollte eigentlich durch das

If Range(Target.Address).Column = Range("A:A").Column Then

realisiert werden. -> Nur Änderungen bzw reagieren wenn Du irgentwo in die A Spalte klickst.

Target.Address liefert dir dabei die Zelle in die Du geklickt hast.
(Target.Address).Column Die Spalte in die du geklickt hast.
(Target.Address).Row Die Zeile in die du geklickt hast.

If Range(Target.Address).Column = Range("A2:A10").Column
bzw.
If Range(Target.Address).Column = Range("E2:E10").Column
kann also deshalb nicht Funktionieren weil du eine Spalte mit einer Spalte des Bereichs vergleichst. Du könntest aber die zeilen noch vergleichen udn dadurch den bereich einschränken.

miniversum
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Server-Hardware
gelöst Hilfe bei einer Server (Hardware) auswahl (30)

Frage von bjk190368 zum Thema Server-Hardware ...

Windows Netzwerk
Automatisches IP Setup für verschiedene (Wlan-)Netzwerke (4)

Frage von mraudi zum Thema Windows Netzwerk ...

Windows Tools
gelöst Powershell - Auswahl aus Listbox soll Aktion ausführen (4)

Frage von Schmierlappen zum Thema Windows Tools ...

Microsoft Office
Excel ein automatisches Inhaltsverzeichnis wie in Word? (3)

Frage von Server4Alle zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...