Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1664to1668
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

Sverweis via VBA

Sverweis via VBA
09.01.2019 14:16:02
Helmut
Einen wunderschönen Nachmittag VBA'ler
Ich habe eine Arbeitsmappe wo diverse „Code's“ (in meiner Datei „lfd.Nr.") zum Beispiel für die Länge oder die Art einer Leiter hinterlegt sind.
Zum Beispiel: lfd.Nr. 10 in Spalte C bedeutet, dass die Leiter 1000 mm (1 m) lang ist. Jedoch bedeudet die lfd.Nr. 10 in Spalte D auch, dass es sich um eine „Anlegeleiter“ handelt. Weiters wäre zum Beispiel mit lfd.Nr. 14 die Leiter 5000 mm (5 m) lang und es würde sich um eine „Seilzugleiter“ handeln. Nun möchte ich gerne mittels einer Userform und Comboboxen 1. das Gebäude auswählen (Haus 1,2..), 2. die Länge der Leiter anhand der lfd.Nr. und 3. die Art der Leiter anhand der lfd.Nr. auswählen bzw. Event. in einer Hilfsspalte zwischenspeichern und anschließend soll mir „der Ort“ (Spalte B) mittels einer MSG Box dafür ausgegeben werden.
Hat vielleicht jemand einen Lösungsansatz?
Besten Dank im Voraus, lg Helmut
https://www.herber.de/bbs/user/126596.xlsx

26
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sverweis via VBA
09.01.2019 14:38:45
Herbert
Servus Helmut,
da ich nicht davon ausgehe, dass die Datenbereiche (Zellen) in deiner eigentlichen Datei mit denen in deiner Beispielarbeitsmappe übereinstimmen, macht es wenig Sinn, dir eine UF zu basteln, die mit diesen Datenbereichen arbeitet! Deshalb wäre es sinnvoll, wenn du eine Datei mit dem Original-Layout hochladen würdest!
Servus
AW: Sverweis via VBA
09.01.2019 14:51:16
Helmut
Servus Herbert
Danke das du dich für mein Problem angenommen hast. Die Original Datei hochzuladen wäre mir zu kompliziert bzw. diese dann auch zu erklären. Wenn du mir anhand meiner Beispiel Datei eine Userform basteln könntest, kann ich diese doch auf meine Bedürfnisse wieder zurechtbasteln. Soweit traue ich mir VBA zu. Sollte es dennoch ein Problem geben, weiß ich, wenn ich fragen darf.gg
Lg Helmut
Anzeige
AW: Sverweis via VBA
09.01.2019 14:55:38
Herbert
Servus Helmut,
ich habe ja nicht gesagt, dass du die Originaldatei hochladen sollst, sondern eine Beispieldatei, die im Layout, also in der Positionierung der Daten, mit der Originaldatei übereinstimmt.
Nachdem du "VBA nur mit Recorder" angegeben hast, dachte ich, dass es besser ist, wenn die Datenbereich in der Beispieldatei denen der Originaldatei exakt entsprechen.
Also, mach mir doch bitte so eine BSPDT.
Servus
AW: Sverweis via VBA
09.01.2019 15:20:34
Helmut
Servus Herbert
Ich bin jetzt unterwegs und melde mich am Abend mit einer Beispieldatei.
Danke vorerst, Lg Helmut
AW: Sverweis via VBA
09.01.2019 17:02:23
Herbert
Servus Helmut,
ich habe es schon mal so weit vorbereitet. Du musst mir dann auch noch sagen, in welche Zellen die auszugebenden Werte geschrieben werden sollen.
Servus
Anzeige
AW: Sverweis via VBA
09.01.2019 19:57:38
Helmut
Guten Abend Herbert
Im Anschluss die Beispiel Datei. Ich hätte es mir so vorgestellt, dass im Tabellenblatt Datenbank über einen Button die Userform aufgerufen wird. Im Tabellenblatt Datenbank sind für die diversen Häuser Bereichsnamen vergeben (siehe Namens Manager) vielleicht kann man die im Makro mit einbinden. Der Sinn der Sache wäre ja dieser, ich wähle in der Userform das Haus mittels Combobox (zum Beispiel Depot Welserstraße) dann die Länge der Leiter (nur Meter würden genügen, in der Matrix sind ja auch Dezimeter und Zentimeter angegeben) und die Art der Leiter aus. Dann soll mir über eine Msgbox der Raum in dem sich die Leiter befindet (Datenbank, Spalte G „Standort im Betrieb“) ausgegeben werden.
In meinem Betrieb wird immer wieder gefragt: „wo ist eine Leiter mit mindestens 3 m im Schlossmuseum?“
Dann gehe ich her wähle die 3 Bereiche in der Userform aus und sage im Raum „XY“.
Bin schon sehr gespannt, vorerst recht herzlichen Dank für deine Hilfe.
LG Helmut
https://www.herber.de/bbs/user/126623.xlsm
Anzeige
AW: Sverweis via VBA
10.01.2019 11:05:23
Herbert
Hallo Helmut,
schau mal, wie viel "Schrott" du in deiner AM hast! Ich werde das löschen, OK?
So wie ich das verstanden habe, brauchst du im Endeffekt nur die MsgBox mit dem Raum. Ist das so?
Servus
Userbild
AW: Sverweis via VBA
10.01.2019 12:01:02
Herbert
Hallo Helmut,
in deiner "Datenbank" finde ich keinen Hinweis auf die Länge und Art der Leiter? Über die hier vorh. "LfdNr." kann man sie ja nicht bestimmen, denn deine LfdNr in der "Matrix" fängt ja erst bei 10 an!
Dann haben die beiden "Namen" "Vorprüfungen" und "Zuweisungen" die selbe Range als Bezug, nämlich "=Datenbank!$C$4:$K$138"! Welchen Sinn mach das?
Auch deine Datenbank-Bereichsnamen nützen mir hierbei nix, da sie die Liegenschaft (wenn ich "Lig" richtig interpretiere) und die Lfd.Nr. nicht mit einbeziehen.
Servus
Anzeige
AW: Sverweis via VBA
10.01.2019 12:52:14
Herbert
Servus Helmut,
gerade denke ich, dass es doch keinen Sinn macht, dir am Ende das "Haus" anzuzeigen, wenn du es vorher schon über die Combobox ausgewählt hast! Was meinst du?
Servus
AW: Sverweis via VBA
10.01.2019 19:15:54
Helmut
Guten Abend Herbert
Ich melde mich morgen Vormittag mit einer neuen Beispieldatei und einer ausführlichen Erklärung.
War bis jetzt auf Außendienst und habe keine Nerven mehr.
Danke, bis morgen, lg Helmut
AW: Sverweis via VBA
11.01.2019 09:32:59
Herbert
Servus Helmut,
bei dem Wetter kann ich mir gut vorstellen, dass "Außendienst" keinen Spaß macht! Ich war selber 35 Jahre im Vertriebs-Außendienst! Also, keine Panik, ich warte auf deine neue Datei.
Servus
P.S.: Warum ich übrigens immer "Servus" schon am Anfang schreibe kommt daher, dass ich gesehen habe, dass du aus Österreich bist und ich ein Bayer, resp. ein waschechter Münchner bin.
Anzeige
Neue Beispieldatei
11.01.2019 11:16:19
Helmut
Servus Herbert
Also ich komme ganz genau aus Oberösterreich, habe jedoch lang in Salzburg gelebt. Also nicht allzu weit weg von dir.
Erstmals Dankeschön für deine Geduld.
Ich habe im Anhang eine neue Beispieldatei mit Erklärungen hochgeladen. Vielleicht ist jetzt ein wenig Licht in die Sache gekommen.
Danke vorerst, lg Helmut
https://www.herber.de/bbs/user/126668.xlsm
AW: Neue Beispieldatei
11.01.2019 11:56:15
Herbert
Servus Helmut,
jetzt muss ich dich um etwas Geduld bitten, da ich erst morgen wieder dazu komme, da ich heute mehrere Ausserhaustermine habe. Ich hoffe, dass es auch noch morgen reicht!
Servus
Anzeige
AW: Neue Beispieldatei
11.01.2019 12:02:14
Helmut
Servus Hermann
Es hat überhaupt keinen Stress. Jetzt ist erst einmal Wochenende angesagt. Ich danke dir trotzdem jetzt schon für deine Hilfe wünsche dir ein schönes Wochenende und wir schreiben uns am Montag
Lg Helmut
AW: Neue Beispieldatei
12.01.2019 12:26:20
Herbert
Servus Helmut,
anbei mal mein Vorschlag. Dieser sieht vor, dass du in der UF zuerst das gewünschte Haus auswählst und anschließend die gesuchte Länge der Leiter. Danach wird dir der Ort, in dem sich diese Leiter befindet, per MsgBox angezeigt.
Die Hilfsspalten in der "Datenbank" bitte nicht ändern oder gar verschieben!
Servus
P.S.: Da dein Thread bald hinten rausfällt, kannst du mir bei Fragen eine eMail direkt schreiben: hag@excelhelper.de
https://www.herber.de/bbs/user/126687.xlsm
Anzeige
AW: Neue Beispieldatei
14.01.2019 11:26:54
Herbert
Servus Helmut,
da du ja nur den Ort wissen willst, in dem sich die gesuchte Leiter befindet, habe ich dir noch einmal eine schnellere Version gebastelt, ohne MsgBox, da das gewünschte Suchergebnis ja bereits in der Liste angezeigt wird. Was sagst du dazu?
https://www.herber.de/bbs/user/126741.xlsm
Servus
AW: Neue Beispieldatei
12.01.2019 10:05:48
Herbert
Wer ist "Hermann"? ;o)=)
AW: Sverweis via VBA
12.01.2019 17:35:36
Piet
Hallo
das Thema Leitern hat mich vom technischen her auch interessiert, und so stelle ich mal eine geaenderte ComboBox Version von Herbert Grom, und eine ListBox Variante von mir als Beispiel ins Forum.
Zu Herbert sage ich als Dankeschön, meine Überlegungen das Problem zu lösen waren viel zu kompliziert. Sein Code brachte mich dann auf die Idee seine UserForm einfach zu erweitern. Parallel dazu halte ich eine ListBox Variante für Übersichtlicher, weil man auf einen Schlag alle Leitern, oder bei Schlossmuseum mit über 60 Leitern sich die Leitern nach Grösse anzeigen kann. Dann sieht man z.B. das es in der Mahlerei, 1. U gleich 4 Holzleitern a 1 Meter gibt.
Falls die Sprossen oder der Hersteller auch gewünscht ist kann man das auch noch mit anzeigen. Muss die ListBox nur verlaengern.
Jetzt gibt es zwei Lösungen zur freien Auswahl ....
mfg Piet
https://www.herber.de/bbs/user/126695.xlsm
Anzeige
AW: Sverweis via VBA
12.01.2019 17:51:23
Helmut
Servus Herbert, Servus Piet
Also ich bin Überrascht über eure Vorschläge!!!! echt Geil! Werde sie am Montag dann in meiner Originaldatei verwenden. Ich möchte mich recht herzlich bei euch für eure Leistung für mich bedanken.
Hut ab!!!
Bei dir Herbert (nicht Hermann-SORRY)möchte ich mich auch nochmals für deine Geduld uns Ausdauer bedanken.
Schönes Wochenende, LG Helmut
AW: Sverweis via VBA
13.01.2019 10:39:12
Herbert
Hallo Piet,
selbstverständlich kannst du eine eigene Version anbieten. Aber wenn du meinen Code änderst und auch noch verschlechterst, dann habe ich da etwas dagegen! Noch dazu ist meine Lösung exakt auf die Anforderung abgestimmt. Deine nicht! Also, wenn du etwas ändern willst, dann mache eine eigene Version, aber lass meinen Code unverändert! OK?
Servus
Anzeige
AW: Sverweis via VBA
13.01.2019 19:43:50
Piet
Hallo
@Herbert
ich gebe zu das mich diese heftige Kritik tief getroffen hat. Das war sicher nicht meine Absicht!
Was ich im Augenblick überhaupt nicht nachvollziehen kann ist - wieso habe ich deinen Code verschlechtert?
Geht es da um einzelne Excel Befehle, oder ist es das andere Prinzip über ListBox statt ComboBox?
mfg Piet
PS erlaube mir den Hinweis das ich mich für Psychologie interessiere. Die sagt mir das ich dich ohne es zu ahnen in deinen Gefühlen getroffen oder verletzt haben muss. Da hat sicher nichts mit Excel zu tun ... - Dazu ein passendes Beispiel aus der Türkei:
Hier regen sich Dolmusch Feher (Sammeltaxi) auf wenn man ihnen den Weg abschneidet. Der Weisheitslehrer Mevlana lehrte die Türken sich die Frage zu stellen: - "Wer ist der Herr meiner Gefühe?" - Der Fahrer kann frei entscheiden ob er sich aufregen will oder nicht!
Regt er sich auf schiesst Adranlin in sein Blut. nach 8 Stunden Arbeit ist er so "vollgepumpt" das er -jeden verhauen- möchte.
Dann geht er nach Hause zu seiner Frau und Kinder. Kannst du dir das "nette gemütliche Abendessen" vorstellen?
Die wenigsten begreifen aber das sie über ihre Gefühle selbst entscheiden können! Sonst ist man Fremdgesteuert!
Das ist bitte -KEINE Kritik- an dir. Ich habe viele Jahre gebraucht um MEVLANA richtig zu verstehen!! Ein sehr weiser Lehrer!
Dein Selbstwert liegt bei dir, nur in deiner Person!
AW: Sverweis via VBA
14.01.2019 14:46:38
Helmut
Servus Herbert, Servus Piet
Ich hoffe, die Aufregung hat sich wieder einigermaßen gelegt?
Jetzt hätte ich eine Bitte an euch beide: die 1. geht an Herbert, also für mein Arbeitsblatt mit den Leitern werde ich deinen Code den du mir zur Verfügung gestellt hast dankend verwenden. Bin höchst zufrieden damit, alles funktioniert bestens. Da meine VBA Kenntnisse sehr mickrig sind, könntest du mir wenn es dir nichts ausmacht den Code auskommentieren? Ich möchte ja gerne VBA lernen. Du hast zum Beispiel einige Kürzel verwendet wie „hsh“ oder irgendwo wieder einmal Zahlen, die ich nicht ganz verstehe, jedoch begreifen möchte.
Auch für den Code von Piet wäre es für mich von Vorteil, wenn du - Piet das für mich auskommentieren könntest. Auch mit deiner Leistung bin ich sehr zufrieden. Wie gesagt, wenn ihr das für mich machen könntet, wäre ich euch sehr verbunden. Dann würde ich vielleicht den Code auch ein wenig verstehen.
Besten Dank im Voraus, lg Helmut
AW: Sverweis via VBA
14.01.2019 16:34:29
Piet
Hallo Helmut, Servus
ich fühle mich geehrt das du von uns beiden den Code auskommentiert haben möchtest um VBA zu lernen.
Das begrüsse ich immer, macht dich selbstaendiger im Umgang mit VBA. meinen Teil kommentiere ich dir.
Was Herbert Grom angeht ist sein: - Set hsh = CreateObject("Scripting.Dictionary") - technisch fortschrittlicher.
Hier gebe ich offen zu das mir jedes Fachwissen dazu fehlt, weil mein Wissen aus der Zeit von Excel 7, 97, 2003 stammt, manche Befehle von Kollegen als technisch überaltert angesehen werden. Aus Kompatilitaets Gründen, weil viele alte Dateien auf dem Markt sind, bleibt diese Programmiersprache bestehen! Für Anfaenger ist sie vielleicht sogar leichter zu verstehen!
Hier also das was ich dir technisch kommentieren kann, das andere wie Set hcs muss dir Herbert bitte selbst erklaeren.
mfg Piet
Original Beispiel von Herbert Grom, ComboBox2 von mir erweitert auf 3 Spalten: - (für Lagerplatz direkt Anzeige)
Private Sub ComBox_Haus_Change()
'Original Code von Herbert Grom für "ComBox_Laenge"
'** von mir auf 3 Spalten erweitert um den Lagerplatz direkt mit anzuzeigen
LoAnzahl = Application.WorksheetFunction.CountIf(wksDB.Range("N4:N" & Loletzte), ComBox_Haus. _
Value)
LoFirstRow = Application.Match(ComBox_Haus.Value, wksDB.Range("N1:N" & Loletzte), 0)
Set hsh = CreateObject("Scripting.Dictionary")
'alte Original ComboBox von Herber Grom auf 3 Spalten erweitert
With ComBox_Laenge
.Clear: n = 0
For LoRowIn = LoFirstRow To LoFirstRow + LoAnzahl - 1
If wksDB.Cells(LoRowIn, 17).Text  "" Then
.AddItem wksDB.Cells(LoRowIn, 17)
'2. Spalte für Leitern Art
.List(n, 1) = wksDB.Cells(LoRowIn, 20)
'3. Spalte wird mit Lagerplatz befüllt
.List(n, 2) = wksDB.Cells(LoRowIn, 7)
n = n + 1
End If
Next LoRowIn
End With
End Sub

Hier der kommentierte Code von UserForm1, meine eigene ListBox Version:
'Original Code von Herbert Grom!  - auf ListBox überarbeitet von Piet
Public Loletzte&, LoFirstRow&
Dim LoRowIn&, LoAnzahl&, LoMatch&, hsh As Object, i%, iOrtCount%
Dim WKS As String, Txt As String, n As Integer   'neue Variable
Private Sub ListBox2_Click()
End Sub
Private Sub UserForm_Initialize()
'** Diese Programmiertechnik ist mir völlig neu, ich kann sie technisch nicht erklaeren!
Set hsh = CreateObject("Scripting.Dictionary")
With wksDB
Loletzte = IIf(IsEmpty(.Cells(Rows.Count, 2)), .Cells(Rows.Count, 2).End(xlUp).Row, Rows. _
Count)
For i = 4 To Loletzte
If .Cells(i, 1).Text  "" Then hsh(.Cells(i, 1).Text) = 0
Next
End With
ListBox1.List = Application.Transpose(hsh.Keys)
ComboBox1.ListIndex = -1   'ComboBo Anzeige löschen
ListBox1.SetFocus
End Sub
Private Sub ListBox1_Click()
'Variable von Herbert Grom übernommen
Loletzte = IIf(IsEmpty(wksDB.Cells(Rows.Count, 2)), wksDB.Cells(Rows.Count, 2).End(xlUp).Row, _
Rows.Count)
LoAnzahl = Application.WorksheetFunction.CountIf(wksDB.Range("N4:N" & Loletzte), ListBox1. _
Value)
LoFirstRow = Application.Match(ListBox1.Value, wksDB.Range("N1:N" & Loletzte), 0)
'** die Progarmmierung über .AddItem ist technisch vielleicht altmodisch, überholt, sie  _
funktioniert aber einwandfrei!
'** sie stammt aus der Zeit Excel 7,97,2003, kann weg. Kommpatibilitaet mit alten Excel  _
Dateien nicht abgeschafft werden!
'ListBox1 befüllt beim Klick ListBox2 und löscht ComboBox1
With ListBox2  '** ListBox2 hat 4 Spalten!!
.Clear:  n = 0:  Txt = ""  '** Txt ist überflüssig, kann gelöcht werden!
ComboBox1.Clear   'ComboBox Inhalt immer löschen
'Schleife zum ListBox1 füllen
For LoRowIn = LoFirstRow To LoFirstRow + LoAnzahl - 1
'nur laden wenn Gebaeude Text vorliegt
If wksDB.Cells(LoRowIn, 17).Text  "" Then
'Werkstoff Nummer (nur 2.Stelle!) ermitteln  = (0,1,2,3) als Zahl für Cells(WKS+4)
WKS = Mid(wksDB.Cells(LoRowIn, 3), 2, 1)  'Zahl zum laden aus Matrix "H"  ( _
Werkstoff)
.AddItem wksDB.Cells(LoRowIn, 17)          'Laenge füllen Spalte "Q"
.List(n, 1) = Matrix.Cells(WKS + 4, 8)     'Werkstoff aua Matrix "H" laden  (WKS+4)
.List(n, 2) = wksDB.Cells(LoRowIn, 20)     'Leitern Art laden  Spalte T
.List(n, 3) = wksDB.Cells(LoRowIn, 7)      'Lagerraum laden  Spalte "G"
n = n + 1  'ComboBox direkt mitladen
'in ComboBox:  Leiter Länge laden Spalte "U" (sortiert, ohne doppelte!)
If wksDB.Cells(LoRowIn, 21) > 0 Then _
ComboBox1.AddItem wksDB.Cells(LoRowIn, 21)
End If
Next LoRowIn
End With
Label2 = n & "  Leitern vorhanden"
End Sub
Private Sub ComboBox1_Change()
If ComboBox1.Text = "" Then Exit Sub
'Variable von Herbert Grom übernommen
Loletzte = IIf(IsEmpty(wksDB.Cells(Rows.Count, 2)), wksDB.Cells(Rows.Count, 2).End(xlUp).Row, _
Rows.Count)
LoAnzahl = Application.WorksheetFunction.CountIf(wksDB.Range("N4:N" & Loletzte), ListBox1. _
Value)
LoFirstRow = Application.Match(ListBox1.Value, wksDB.Range("N1:N" & Loletzte), 0)
'ComboBox1 befüllt beim Klick ListBox2 mit gewünschter Leiter Länge in meter
With ListBox2
.Clear: n = 0
For LoRowIn = LoFirstRow To LoFirstRow + LoAnzahl - 1
'Befüllung der ListBox .List(n) wie oben kommentiert!
'hier in Abhaengigkeit von der gewünschten Leiter Länge!!
If wksDB.Cells(LoRowIn, 17).Value = ComboBox1.Text Then
WKS = Mid(wksDB.Cells(LoRowIn, 3), 2, 1)
.AddItem wksDB.Cells(LoRowIn, 17)
.List(n, 1) = Matrix.Cells(WKS + 4, 8)
.List(n, 2) = wksDB.Cells(LoRowIn, 20)
.List(n, 3) = wksDB.Cells(LoRowIn, 7)
n = n + 1
End If
Next LoRowIn
End With
Label2 = n & "  Leitern vorhanden"
End Sub

Dankeschön
15.01.2019 19:10:40
Helmut
Guten Abend Piet
War heute wieder mal auf Außendienst, daher melde ich mich erst jetzt. Danke dafür, dass du mir den Code auskommentiert hast. Ich habe mir auch jetzt ein Buch „VBA für dummies“ bestellt somit kann ich nochmals alles genauer nachvollziehen und auch davon lernen. Recht herzlichen Dank für deine Mühe. Ich weiß es wirklich sehr zu schätzen.
Auch bei Herbert möchte ich mich in diesem Sinne nochmals bedanken für alles.
LG Helmut
AW: Dankeschön
15.01.2019 20:36:41
Herbert
Hallo Helmut,
dass ich mich noch nicht gemeldet habe, bzgl auskommentieren, liegt daran, dass ich 2 Tage Zahnarzt 🦷 besuche hinter mir habe! Da der Thread ja nun bald hinten rausfällt, solltest du mir vorsichtshalber deine eMail-Adr schicken, falls du noch an einer Kommentierung von mir interessiert bist!
Servus
AW: Dankeschön
16.01.2019 11:19:32
Herbert
Hallo Helmut,
dass ich mich noch nicht gemeldet habe, bzgl auskommentieren, liegt daran, dass ich 2 Tage Zahnarzt 🦷 besuche hinter mir habe! Da der Thread ja nun bald hinten rausfällt, solltest du mir vorsichtshalber deine eMail-Adr schicken, falls du noch an einer Kommentierung von mir interessiert bist!
Servus

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige