Frage : VBA Unterstützung

Hallo, übertreffen

I morgens using den Code, der angebracht wird, um 2 listboxes zu filtern innen.  Es funktionierte für mich vor, aber jetzt, filtert es nicht und zeigt die Resultate im „Analysen“ Arbeitsblatt an.  Es zeigt nur den kompletten Datensatz an.  Welche Änderungen muss ich bilden, damit der Code meinen Datensatz filtert?
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
6:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
Private VorCommandButton3_Click ()

Application.ScreenUpdating = falsch

Schwaches ws1 als Arbeitsblatt, ws2 als Arbeitsblatt, rng als Strecke, cel als Strecke, i als lang, sList1 als Schnur, sList2 als Schnur
Schwaches cCont als Steuerung


Einstellen ws1 = Arbeitsblätter („Daten“)
Einstellen ws2 = Arbeitsblätter („Analyse“)

sList1 = ""
sList2 = ""

Wenn ListBox1.Selected (0) = dann ausrichten
    sList1 = ""
Sonst
 Für i = 0 zu ListBox1.ListCount - 1
    Wenn ListBox1.Selected (i) dann
        sList1 = sList1 u. „|“ U. ListBox1.List (i)
    Beenden wenn
 Zunächst I
 Wenn sList1 = "" dann
    sList1 = ""
    ListBox1.Selected (0) = richten aus
 Sonst
    sList1 = sList1 u. „|“
 Beenden wenn
 
Beenden wenn

Wenn ListBox2.Selected (0) = dann ausrichten
    sList2 = ""
Sonst
 Für i = 0 zu ListBox2.ListCount - 1
   Wenn ListBox2.Selected (i) dann
      sList2 = sList2 u. „|“ U. ListBox2.List (i)
   Beenden wenn
 Zunächst I
 Wenn sList2 = "" dann
    sList2 = ""
    ListBox2.Selected (0) = richten aus
 Sonst
   sList2 = sList2 u. „|“
 Beenden wenn
Beenden wenn

Wenn ws2.UsedRange.Cells.Count > 1 dann ws2.UsedRange.Clear
ws1. [A1: AX1]. Kopien-Bestimmungsort: =ws2. [A16]

Rng = ws1.Range einstellen (ws1. [A17], ws1.Cells (ws1.Rows.Count, „A“). Ende (xlUp))

Für jeden cel im rng
  Wenn UCase (sList1) = "" oder InStr (sList1, „|“ u. cel. Wert u. „|") <> 0 dann
     Wenn UCase (sList2) = "" oder InStr (sList2, „|“ u. cel. Versatz (0, 1).Value u. „|") <> 0 dann
  cel. Die Größe neu bestimmen (1, 50). Kopien-Bestimmungsort: =ws2.Cells (ws2.Rows.Count, „A“). Ende (xlUp). Versatz (1)
     Beenden wenn
  Beenden wenn
Folgender cel

Mich leeren

Application.ScreenUpdating = richten aus

Enden-Unterseeboot

Privates Unterseeboot CommandButton4_Click ()
Mich leeren
Unterseeboot beenden

Privates Unterseeboot UserForm1_Initialize ()
ListBox1.Selected (0) = richten aus
ListBox2.Selected (0) = richten aus

Enden-Unterseeboot

Antwort : VBA Unterstützung

Ich denke, dass Ihr Code alle Reihen wegen der Thstruktur von „kopiert, wenn“ Klauseln unten:

Für jeden cel im rng
  Wenn UCase (sList1) = "" oder InStr (sList1, „|“ u. cel. Wert u. „|") <> 0 dann
     Wenn UCase (sList2) = "" oder InStr (sList2, „|“ u. cel. Versatz (0, 1).Value u. „|") <> 0 dann
  cel. Die Größe neu bestimmen (1, 50). Kopien-Bestimmungsort: =ws2.Cells (ws2.Rows.Count, „A“). Ende (xlUp). Versatz (1)
     Beenden wenn
  Beenden wenn
Folgender cel

In Wirklichkeit das erste „wenn“ Auswahl die Reihe, zum JEDES zu kopieren, wenn slist1 leer ist oder wenn es ein Gleiches gibt. Die Sekunde „, wenn“ die selben für slist2 tut.

Unter meine Vermutung ist, was Sie waren etwas wie der Code beabsichtigten:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
Für jeden cel im rng
  'wenn slist1 leer ist, Überprüfung slist2:
  Wenn UCase (sList1) = "" dann
     Wenn InStr (sList2, „|“ u. cel. Versatz (0, 1).Value u. „|") <> 0 dann
     cel. Die Größe neu bestimmen (1, 50). Kopien-Bestimmungsort: =ws2.Cells (ws2.Rows.Count, „A“). Ende (xlUp). Versatz (1)
     beenden wenn
  sonst
  'wenn slist1 nicht Blankoscheck auf Gleichem in slist1 ist
     wenn InStr (sList1, „|“ u. cel. Wert u. „|") <> 0 dann
     cel. Die Größe neu bestimmen (1, 50). Kopien-Bestimmungsort: =ws2.Cells (ws2.Rows.Count, „A“). Ende (xlUp). Versatz (1)
     beenden wenn
beenden wenn

Folgender cel
Weitere Lösungen  
 
programming4us programming4us