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..... |