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

Makro läuft nach Datenerweiterung nicht mehr

Makro läuft nach Datenerweiterung nicht mehr
MaPas
Guten Tag zusammen !
vor einiger Zeit erstellte mir ein Forumane hier die folgende Excel - Datenbank (siehe Anhang)
Die Datenbank ist folgendermassen aufgebaut:
Drei Tabellenblätter: DATENBANK enthält alle Datensätze die Durchsucht werden sollen
AUSWAHL mit diesen Tabellenblatt wird eigentlich gearbeitet um die Datenbank nach besonderen Kriterien zu durchsuchen
CODES Enthält die Cöder und Telefon-Vorwahlen, nach denen gesucht werden soll
Nun soll folgendes gemacht werden können.
Auf dem Registerblatt AUSWAHL setzt der User einen Code in die gelbe Zelle und drückt ENTER
Es sollte nun (entsprechend dem Tabellenblatt CODES) geschrieben werden, um welchen Code es sich hier im Detail handelt.
Wenn man nun auf SUCHEN klickt, so sollen alle Datensätze ab dem Registerblatt DATENBANK, welche diesem Code entsprechend aufgelistet werden. Und zwar nur jene, die auch wirklich einen Namen zur Telefonnummer haben.
Die Telefonnummer wird dann anhand der Vorwahl mit der Telefon-Codes verglichen (Tabellenblatt CODES) um auch die Sprache noch dazu auszugeben.
Dieses Makro / Excel-Datenbank funzte einwandfrei, bis wir noch zusätzliche Codes in die DATENBANK aufgenommen hatten.
Bis und mit dem Code 114 läuft alles noch korrekt,
Was ist nun falsch ?
Muss irgendwo die Matrix oder sonst noch was erweitert werden ?
HERZLICHEN DANK FÜR DIE HILFE !!!!
Und hier noch eine ganz ganz stark abgespeckte und vereinfachte Datenbank als Beispiel
https://www.herber.de/bbs/user/65431.xls
AW: Makro läuft nach Datenerweiterung nicht mehr
29.10.2009 14:23:09
Tino
Hallo,
versuche es mal mit dem Spezialfilter.
Sub Code_Auflisten()
Dim Bereich As Range, rngFilter As Range

With Tabelle1
 Set Bereich = Tabelle1.Range(.Columns(1), .Columns(7))
End With

With Tabelle2
    Set rngFilter = Tabelle2.Range("i3:j4")
    rngFilter(1, 1) = .Range("A3")
    rngFilter(1, 2) = .Range("D3")
    rngFilter(2, 1) = "'" & .Range("B1")
    rngFilter(2, 2) = "'<>"
    Bereich.AdvancedFilter xlFilterCopy, rngFilter, .Range("A3:G3")
    rngFilter.ClearContents
End With

End Sub
Gruß Tino
Anzeige
AW: Makro läuft nach Datenerweiterung nicht mehr
29.10.2009 14:56:40
MaPas
Hi Tino!
Vielen herzlichen Dank für Deine prompte Hilfe!
Mit Deinem Code funzt es nun schon wie geschmirrt ! :-)
Einzig werden mir in der gelben Zelle auf dem Registerblatt AUSWAHL nach einem Enterdruck nicht alle Code-Bezeichnungen ausgegeben.
Muss ich da irgendwie noch den Bereich von SVERWEIS erweitern ? - Wenn ja, wie ?
AW: Makro läuft nach Datenerweiterung nicht mehr
29.10.2009 15:00:36
MaPas
und noch was funzt jetzt auch nicht mehr nach Einfügen Deines Codes:
Es soll (anhand der Telefon-Vorwahl (Zeichen 5+6) verglichen werden mit den Telefonvorwal-Codes (auf CODES) welche Sprache das ist und diese soll dann auch in die Spalte H aufs Registerblatt AUSWAHL geschrieben werden.
Anzeige
AW: wie gefällt Dir das?
29.10.2009 15:40:48
MaPas
... währe geil so !
Aber ... ich kappiere nicht, wie Du die Codes für die Dropdown ausliest ?
Denn es fehlen mir in der Auswahlliste einige Codes zum Auswählen.
Wie kann ich diese Auswahl ergänzen ? / Verlängern ?
AW: wie gefällt Dir das?
29.10.2009 15:48:43
Tino
Hallo,
die Daten fürs Dropdown hole ich aus der Datenbank,
also Du kannst nur die auswählen die in der Datenbank vorkommen.
Gruß Tino
AW: wie gefällt Dir das?
29.10.2009 15:53:12
MaPas
Hmmm.... ich glaube da stimmt noch was nicht so.
Denn in meiner Datenbank (nicht die Testdatenbank, sondern meine richtige) hab ich über 11600 verschiedene Datensätze und eben auch Codes drin, die ich jetzt mit Deinem Makro nicht zur Auswahl erhalte.
Zudem gibt es ja alles Codes zur Auswahl auch auf dem Registerblatt CODES
Was also muss ich anpassen bei mir, damit alle Codes welche ich in der Datenbank drin habe auch eingelesen werden ?
Anzeige
bei so vielen Daten geht es so nicht.
29.10.2009 16:14:29
Tino
Hallo,
da müssten wir die Daten ohne doppelte in einen Zellbereich schreiben, so müsste es gehen.
https://www.herber.de/bbs/user/65441.xls
Gruß Tino
AW: bei so vielen Daten geht es so nicht.
29.10.2009 16:23:09
MaPas
GRRR.....
Es will und geht einfach ned ! :-(
Zwar kann ich nun (wenn ich vorab mein komplettes DATENBANK - Register in Deine Datei kopiere) nun alle Codes auswählen, aber nun erscheint folgende Fehlermeldung wenn ich aufs Register AUSWAHL klicke:
.Range("A4", .Cells(8, LRow)).ClearContents
Zudem werden die entsprechenden Sprachen (anhand der Telefon-Vorwahl-Codes auf CODES) nicht ausgegeben
Anzeige
anpassen an Deine Datei...
29.10.2009 16:39:11
Tino
Hallo,
Du musst den Code an Deine Umgebung anpassen, wenn diese anders ist wie im Beispiel.
Ich habe den Codenamen der Tebellen verwendet,
dies hat den Vorteil das der Code auch funktioniert wenn die Tabelle einen anderen Namen bekommt.
Tabelle1 = im Beispiel Datenbank
Tabelle2 = im Beispiel Auswahl
Tabelle3 = im Beispiel Codes
Zudem habe ich noch einen Namen angelegt für die Auswahlliste in Tabelle3.
Gruß Tino
AW: anpassen an Deine Datei...
29.10.2009 16:52:35
MaPas
Code nun entsprechend angepasst.
Wenn ich das Makro starte kommt nächste Fehlermeldung: Objekt erforderlich:
With .UsedRange (hier bleibt das Makro stehen)
Meine Tabellen heissen nun:
Tabelle1 = Datenbank
Tabelle2 = Auswahl
Tabelle3 = Codes
Was fehlt denn jetzt noch?
Anzeige
AW: anpassen an Deine Datei...
29.10.2009 16:57:54
Tino
Hallo,
lade doch mal eine abgespeckte Version Deines Originals hoch,
wo Du später nur deine Originaldaten rein kopieren brauchst.
Gruß Tino
AW: anpassen an Deine Datei...
29.10.2009 17:27:20
Luschi
Hallo MaPas,
statt
With Datenbank
muß man schreiben
With WorkSheets("Datenbank")
Gruß von Luschi
aus klein-Paris
AW: anpassen an Deine Datei...
29.10.2009 17:37:10
MaPas
... und schon die nächste Fehlermeldung:
Objekt erforderlich:
Codes.Range("Auswahl_Liste").ClearContents
AW: hier die Anpassung
29.10.2009 17:44:31
MaPas
... es kommt langsam gut ! :-)
Es funzt nun alles korrekt, bis auf die Ausgabe der Sprache anhand der Telefonnummern - Vorwahl.
dh. die Telefonnummer - Vorwahlen (das ist in der Telefonnummer die Zeichen 5+6) muss noch anhand der Vorwahl-Codes (CODES - Spalten E und F ermittelt und in das Register AUSWAHL in die Spalte H geschrieben werden
AW: hier die Anpassung
29.10.2009 18:06:48
Tino
Hallo,
so müsste es gehen.
https://www.herber.de/bbs/user/65449.xls
So sollte das Ergebnis aussehen.
Userbild
Gruß Tino
Anzeige
AW: hier die Anpassung
29.10.2009 18:20:59
MaPas
Wähle in Deinem Beispiel mal den Code 330 aus !
Es werden Datensätze mit den Telefonnummer-Vorwahlen 21 und 91 gefunden und auch aufgelistet
Laut der Code-Tabelle auf CODES müsste aber die Sprache für 21 F lauten und für 91 I
In Deinem Beispiel wird aber immer nur D ausgegeben.
jetzt habe ich es verstanden ;-) ...
29.10.2009 18:40:01
Tino
Hallo,
mach aus der Zeile
        .Range("C4:C" & LRow).Offset(0, 5).FormulaR1C1 = _
"=VLOOKUP(MID(RC3,2,FIND("" "",RC3)-1)*1,Codes!C5:C6,2,0)"
diese
        .Range("C4:C" & LRow).Offset(0, 5).FormulaR1C1 = _
"=VLOOKUP(MID(RC3,5,FIND("" "",RC3,5)-FIND("" "",RC3)-1)*1,Codes!C5:C6,2,0)"
Gruß Tino
Anzeige
AW: jetzt habe ich es verstanden ;-) ...
29.10.2009 18:51:54
MaPas
ALLES BESTENS JETZT !!!
VIELEN, VIELEN, VIELEN, VIELEN, HERZLICHEN DANK !!!!
Ohne Dich hätte ich es wohl offensichtlich nicht mehr geschafft :-)
AW: jetzt habe ich es verstanden ;-) ...
30.10.2009 09:12:25
MaPas
Es kommt was kommen muss :-(
Eine neue Fehlermeldung, wenn nun aufs Register "AUSWAHL" wechsle:
Anwendung oder Objektdefinierter Fehler:
.Range("A4", .Cells(8, LRow)).ClearContents
WAS UM ALLES IN DER WELT IST DENN JETZT WIEDER FALSCH ?
Code aus letzter Version.
30.10.2009 16:15:52
Tino
Hallo,
du hast nicht den Code aus der letzten Version übernommen.
Ersetze Deinen Code im Modul durch diesen.
Sub AuswahlOhneDoppelte()
Dim myAr
Dim Dic As Object
Dim A As Long
Dim LRow As Long
Set Dic = CreateObject("Scripting.Dictionary")

With Tabelle1
 With .UsedRange
  .Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlYes
 End With
 myAr = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
End With
    
Dic("<keine Auswahl>") = 0

For A = 1 To Ubound(myAr)
 If myAr(A, 1) <> "" Then
    Dic(myAr(A, 1)) = 0
 End If
Next A

Tabelle3.Range("H2").Resize(Rows.Count - 1).ClearContents
Tabelle3.Range("H2").Resize(Dic.Count) = Application.Transpose(Dic.keys)

With Tabelle2
    .Range("B1").Value = ""
    .Range("A4:H4").Resize(Rows.Count - 4).ClearContents
End With

End Sub
Sub Code_Auflisten()
Dim Bereich As Range, rngFilter As Range
Dim LRow As Long

With Tabelle1
 Set Bereich = Tabelle1.Range(.Columns(1), .Columns(7))
End With

With Tabelle2
    .Range("A4:H4").Resize(Rows.Count - 4).ClearContents
    Set rngFilter = Tabelle2.Range("i3:j4")
    rngFilter(1, 1) = .Range("A3")
    rngFilter(1, 2) = .Range("D3")
    rngFilter(2, 1) = "'" & IIf(.Range("B1") = "<keine Auswahl>", "", .Range("B1"))
    rngFilter(2, 2) = "'<>"
    
    Bereich.AdvancedFilter xlFilterCopy, rngFilter, .Range("A3:G3")
    rngFilter.ClearContents
    
    LRow = .Cells(.Rows.Count, 3).End(xlUp).Row
    If LRow > 3 Then
        .Range("C4:C" & LRow).Offset(0, 5).FormulaR1C1 = _
        "=VLOOKUP(MID(RC3,5,FIND("" "",RC3,5)-FIND("" "",RC3)-1)*1,Codes!C5:C6,2,0)"
    End If
End With

End Sub
Gruß Tino
Anzeige
AW: Code aus letzter Version.
30.10.2009 16:24:16
MarPas
DANKE !!!!
Das hatte ich wohl übersehen :-(
AW: ach so Deine Formel noch...
29.10.2009 16:14:53
MaPas
was hab ich nun probiert ? / gemacht ?
Ich habe ab meiner "echten Datenbank" mal das komplette Register DATENBANK in Deine Beispielsdatei reinkopiert.
Aber eben....
ich kann nicht alle - in der Datenbank vorhandenen Codes auswählen :-(
Ich müsste alle Codes auswählen können, welche auch auf dem Registerblatt CODES aufgeführt sind.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige