Schleifen zusammenlegen
lima-city → Forum → Programmiersprachen → Basic
beispiel
beitrag
cell
count
counter
dateiname
entsprechenden hintergrundfarben
farbe
formen
funktion
hintergrundfarbe
meldung
momentan vier
option
stehen
step
tabelle
vergleich
zeile
-
Guten morgen,
ich hab hier momentan vier schleifen die beim ?ffnen der form ausgef?hrt werden. sie pr?fen ob ein file aus der filelistbox in eine exceltabelle ist und schreibt sie dann mit entsprechenden hintergrundfarben in einen tree.
da ich jetzt jedoch f?r 4 farben auch 4 schleifen habe ist diese funktion sehr langsam sobald die excel tabelle mehrere eintr?ge hat und vergleichen muss.
kann man die schleifen irgendwie zusammenlegen, so dass das excel file nur einmal durchsucht wird?
hier der jetzige code:
Option Explicit Public sPath, bname As String Public sID As String Public Dateiname As String Public i, intCounter As Integer Public lngNumberOfRows, lngRowNumber As Long Private Sub Form_Load() Dim x, o As Integer Dim isnotin As Boolean Dim lngBackColor0, lngBackColor1, lngBackColor2, lngBackColor3 As Long lngBackColor0 = &HFFFFC0 lngBackColor1 = &HFF00& lngBackColor2 = &HFFFF& lngBackColor3 = &HFF& frmMain.testExcel lngNumberOfRows = frmMain.xlWS.Cells(frmMain.xlWS.Rows.Count, 1).End(xlUp).Row For x = 0 To File1.ListCount - 1 isnotin = True For i = 1 To lngNumberOfRows Step 1 bname = File1.List(x) If (frmMain.xlWS.Cells(i, 1) = File1.List(x) And _ frmMain.xlWS.Cells(i, 4) = "in field" And _ frmMain.xlWS.Cells(i, 18) = frmMain.uID) Then isnotin = False End If Next i If (isnotin) Then Tree1.Nodes.Add Text:=bname o = Tree1.Nodes.Count Tree1.Nodes(o).BackColor = lngBackColor0 End If Next x For x = 0 To File1.ListCount - 1 Step 1 For i = 1 To lngNumberOfRows Step 1 If ((frmMain.xlWS.Cells(i, 1) = File1.List(x) And _ frmMain.xlWS.Cells(i, 4) = "in field") And _ (frmMain.xlWS.Cells(i, 18) = frmMain.uID And _ frmMain.xlWS.Cells(i, 19) = "1")) Then Tree1.Nodes.Add Text:=File1.List(x) o = Tree1.Nodes.Count Tree1.Nodes(o).BackColor = lngBackColor1 End If Next i Next x For x = 0 To File1.ListCount - 1 Step 1 For i = 1 To lngNumberOfRows Step 1 If ((frmMain.xlWS.Cells(i, 1) = File1.List(x) And _ frmMain.xlWS.Cells(i, 4) = "in field") And _ (frmMain.xlWS.Cells(i, 18) = frmMain.uID And _ frmMain.xlWS.Cells(i, 19) = "2")) Then Tree1.Nodes.Add Text:=File1.List(x) o = Tree1.Nodes.Count Tree1.Nodes(o).BackColor = lngBackColor2 End If Next i Next x For x = 0 To File1.ListCount - 1 Step 1 For i = 1 To lngNumberOfRows Step 1 If ((frmMain.xlWS.Cells(i, 1) = File1.List(x) And _ frmMain.xlWS.Cells(i, 4) = "in field") And _ (frmMain.xlWS.Cells(i, 18) = frmMain.uID And _ frmMain.xlWS.Cells(i, 19) = "3")) Then Tree1.Nodes.Add Text:=File1.List(x) o = Tree1.Nodes.Count Tree1.Nodes(o).BackColor = lngBackColor3 End If Next i Next x If Tree1.Nodes.Count = 0 Then MsgBox "No files to open!", vbOKOnly Else Tree1.Nodes(1).Selected = True End If End Sub
Also hier die erkl?rung was es momentan macht: in der filelist stehen dateien (meist so 30-40) dann wird geschaut ob das erste file drin steht, wenn nicht, erh?lt es farbe 0, steht es jedoch drin wird auf die 19te zelle in der reihe geschaut, da steht ein counter (von 1- 3) und je nachdem wird dann farbe 1, 2 oder 3 ?bergeben. voll langsam wenn er 4 mal 30 dateien durchsucht..... -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Einfach alle in die eine Forx und die ganzen Ifs in eine Fori, das wars. In deinem Beispiel so:
Dim x as integer Dim i as integer For x = 0 to filelist.count - 1 For i = 1 To lngNumberOfRows Step 1 bname = File1.List(x) If (frmMain.xlWS.Cells(i, 1) = File1.List(x) And _ frmMain.xlWS.Cells(i, 4) = "in field" And _ frmMain.xlWS.Cells(i, 18) = frmMain.uID) Then isnotin = False End If If ((frmMain.xlWS.Cells(i, 1) = File1.List(x) And _ frmMain.xlWS.Cells(i, 4) = "in field") And _ (frmMain.xlWS.Cells(i, 18) = frmMain.uID And _ frmMain.xlWS.Cells(i, 19) = "1")) Then Tree1.Nodes.Add Text:=File1.List(x) o = Tree1.Nodes.Count Tree1.Nodes(o).BackColor = lngBackColor1 End If ' ... und noch die beiden weiteren Ifs Next i 'dann diesen hier: If (isnotin) Then Tree1.Nodes.Add Text:=bname o = Tree1.Nodes.Count Tree1.Nodes(o).BackColor = lngBackColor0 End If NExt x
Und das wars. Sollte so ungef?hr funktionieren... -
danke, sieht gut aus, allerdings kommt bei mir dann die meldung: no files to open...
wenn ich das hier dann raus lasse
If Tree1.Nodes.Count = 0 Then MsgBox "No files to open!", vbOKOnly Else Tree1.Nodes(1).Selected = True End If
bleibt der Tree auch leer, also irgendwas funktioniert nicht....
Beitrag ge?ndert am 11.04.2006 10:48 von kennyinhell
So w?rde es denke ich auch gehen, aber momentan hab ich das Problem, dass ich alle Filenames im Tree dreimal stehen habe und alle die Backgroundcolor 0 annhemen
Private Sub Form_Load() Dim x, o, i As Integer Dim lngBackColor0, lngBackColor1, lngBackColor2, lngBackColor3 As Long Dim txt As String lngBackColor0 = &HFFFFC0 lngBackColor1 = &HFF00& lngBackColor2 = &HFFFF& lngBackColor3 = &HFF& frmMain.testExcel lngNumberOfRows = frmMain.xlWS.Cells(frmMain.xlWS.Rows.Count, 1).End(xlUp).Row For x = 0 To File1.ListCount - 1 For i = 1 To lngNumberOfRows Step 1 If (frmMain.xlWS.Cells(i, 1) = File1.List(x) And _ frmMain.xlWS.Cells(i, 4) = "in field" And _ frmMain.xlWS.Cells(i, 18) = frmMain.uID) Then If frmMain.xlWS.Cells(i, 19) = "1" Then Tree1.Nodes.Add Text:=File1.List(x) o = Tree1.Nodes.Count Tree1.Nodes(o).BackColor = lngBackColor1 End If If frmMain.xlWS.Cells(i, 19) = "2" Then Tree1.Nodes.Add Text:=File1.List(x) o = Tree1.Nodes.Count Tree1.Nodes(o).BackColor = lngBackColor2 End If If frmMain.xlWS.Cells(i, 19) = "3" Then Tree1.Nodes.Add Text:=File1.List(x) o = Tree1.Nodes.Count Tree1.Nodes(o).BackColor = lngBackColor3 End If Else Tree1.Nodes.Add Text:=File1.List(x) o = Tree1.Nodes.Count Tree1.Nodes(o).BackColor = lngBackColor0 End If Next i Next x If Tree1.Nodes.Count = 0 Then MsgBox "No files to open!", vbOKOnly Else Tree1.Nodes(1).Selected = True End If End Sub
Beitrag ge?ndert am 11.04.2006 11:07 von kennyinhell
also das problem mit der hintergrundfarbe ist behoben.
ich merke jedoch, sobald der counter in zeile 19 = 1 ist, schreibt es in den tree 3 mal den namen, bei 2 schreibt es 4 mal den namen und bei 3 f?nfmal. eine davon nimmt jeweils die richtige farbe an
Beitrag ge?ndert am 11.04.2006 11:16 von kennyinhell -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage