kostenloser Webspace werbefrei: lima-city


Schleifen zusammenlegen

lima-cityForumProgrammiersprachenBasic

  1. Autor dieses Themas

    k*********l

    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.....
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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...
  4. Autor dieses Themas

    k*********l

    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
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!