Discussione chiusa
Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Filtro multiplo su excel da VB6

  1. #1
    Leon83 non è in linea Novello
    Luogo
    Monopoli
    Post
    22

    Filtro multiplo su excel da VB6

    Buongiorno,
    Richiedo se possibile il vostro aiuto

    Ho due file excel che chiamerò X1 e X2
    X1 è il file che chiamo sorgente, cioè quello che ha all'interno una serie di dati
    X2 è il file dove destinerò i file estrapolati da X1
    il form è composto ,per il momento, da 1 combobox e 1 commandButton
    La combobox contiene i nomi dei mesi

    la funzione è questa:
    Selezionando il mese e cliccando il commandButton
    si deve:
    anche senza visualizzando il file excel, filtrare la colonna 4 per un tipo di criterio (051) e la colonna 6 per più criteri ("bari-1", "bari-2", "Ancona-1", "Ancona-2", "Napoli", "Roma")
    Attualmente funziona soltanto con 1 criterio per colonna

    Esempio:
    oRange0.AutoFilter Field:=4, Criteria1:="051"
    oRange0.AutoFilter Field:=6, Criteria1:="bari-1"

    Posto il mio ptogetto

    codice:
    Private Sub Command1_Click()
    ProgressBar1 = 0
    MessageViewer1.AddMessage 1, "Trasferimento dati in corso..."
    
    
    Dim oExcel As Object
    Dim oBook As Object
    Dim oBook2 As Object
    Dim oSheet As Object
    Dim oSheet2 As Object
    Dim Trovato As Boolean
    Dim sPath1 As String
    Dim sPath2 As String
    Dim oRange0 As Object
    Dim oRange1 As Object
    Dim i As Integer
    Dim j As Integer
    
    
     sPath1 = "C:\Documents and Settings\giovanni.leuci\Desktop\Progetto SMS 2014 X masterdrive\File\SST_SSC_DailyAllarms.xls" 'X1
     sPath2 = "C:\Documents and Settings\giovanni.leuci\Desktop\Progetto SMS 2014 X masterdrive\File\" 'X2
    
     
        Set oExcel = CreateObject("Excel.Application")
            oExcel.Visible = True
        Set oBook = oExcel.Workbooks.Open(sPath1)
        Set oBook2 = oExcel.Workbooks.Open(sPath2 & "SST_SSC " & Combo1.Text & ".xls")
        Set oSheet2 = oBook2.Worksheets(1)
        Set oSheet = oBook.Worksheets(1)
        Set oRange0 = oSheet.Range("A1:L1800")
        Set oRange1 = oSheet.Range("A2:L1800")
        
            ProgressBar1.Value = ProgressBar1.Value + 1
    
    
      Set oSheet = oBook.Worksheets(1)
      
     oRange0.AutoFilter Field:=4, Criteria1:="051"
     oRange0.AutoFilter Field:=6, Criteria1:=Array("bari-1", "bari-2", "Ancona-1", "Ancona-2", "Napoli", "Roma")
      
            Set oSheet2 = oBook2.Worksheets(1)
            
        Trovato = False
        
           For j = 2 To 6000
                If oSheet2.cells(j, 2) = "" And oSheet2.cells(j, 3) = "" Then
                
        Trovato = True
                    
                    oRange1.Copy Destination:=oSheet2.cells(j, 2)
                    j = 6001
                End If
             Next
              ProgressBar1.Value = ProgressBar1.Value + 1
      
    oBook.Close SaveChanges:=False
    oBook2.Close SaveChanges:=True
           
    oExcel.Quit
    ProgressBar1.Value = ProgressBar1.Max
    
    MessageViewer1.AddMessage 1, "Trasferimento eseguito con successo!"
                
        Set oExcel = Nothing
        Set oBook = Nothing
        Set oBook2 = Nothing
        Set oSheet = Nothing
        Set oSheet2 = Nothing
        Set oRange0 = Nothing
        Set oRange1 = Nothing
    
    End Sub
    Attendo vostre risposte
    Grazie in anticipo

  2. #2
    Leon83 non è in linea Novello
    Luogo
    Monopoli
    Post
    22
    Qualcuno puo aiutarmi??

  3. #3
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    3,015
    I motivi per cui non stai ottenendo risposte sono almeno due: il primo è che l'uso di codice VBA in programmi VB6 non è molto frequente; il secondo è che il tuo codice appare piuttosto confuso e di difficile lettura (l'indentazione serve !).

    Gli oggetti oSheet e oSheet2 vengono istanziati due volte in modo identico senza un apparente motivo.
    Sei sicuro che nell'applicare il metodo AutoFilter si possa usare un array ? Se, come sembra (ma non sono sicuro), con il ciclo For...Next esamini tutte le righe del Range forse non è necessario usare il metodo AutoFilter.
    Il regolamento del forum: la prima cosa da leggere.

  4. #4
    Leon83 non è in linea Novello
    Luogo
    Monopoli
    Post
    22

    Unhappy

    Provo a ripostare il codice

    non conosco a fondo il codice vb6, ho introdotto l'array nel codice solo perchè l'ho importato da vba.
    se non è chiaro il mio codice mi scuso.
    Il mio intento è comunque, sempre se non sono stato chiaro, di crare un filtro sulle due colonne "4" e "6" dove sulla prima inserire un solo filtro (051) sulla seconda un filtro multiplo (Bari-1.......) e copiare il risultato su un altro file.
    Con il metodo For ..Next riesco solo a "rintracciare" la riga che li contiene, poi sicuramente sarà anche sbagliato il metodo con cui lo utilizzo.
    Per questo vi chiedo gentilmente una mano


    codice:
    Private Sub Command1_Click()
    ProgressBar1 = 0
    MessageViewer1.AddMessage 1, "Trasferimento dati in corso..."
    
    
    Dim oExcel As Object
    Dim oBook As Object
    Dim oBook2 As Object
    Dim oSheet As Object
    Dim oSheet2 As Object
    Dim Trovato As Boolean
    Dim sPath1 As String
    Dim sPath2 As String
    Dim oRange0 As Object
    Dim oRange1 As Object
    Dim i As Integer
    Dim j As Integer
    
    
      sPath1 = "C:\Documents and Settings\giovanni.leuci\Desktop\Progetto SMS 2014 X masterdrive\File\SST_SSC_DailyAllarms.xls" 'X1
      sPath2 = "C:\Documents and Settings\giovanni.leuci\Desktop\Progetto SMS 2014 X masterdrive\File\" 'X2
    
     
       Set oExcel = CreateObject("Excel.Application")
      oExcel.Visible = True
       Set oBook = oExcel.Workbooks.Open(sPath1)   'file da cui copiare
       Set oBook2 = oExcel.Workbooks.Open(sPath2 & "SST_SSC " & Combo1.Text & ".xls")  'file dove incollare
       Set oSheet2 = oBook2.Worksheets(1)
       Set oSheet = oBook.Worksheets(1)
       Set oRange0 = oSheet.Range("A1:L1800")
       Set oRange1 = oSheet.Range("A2:L1800")
        
    ProgressBar1.Value = ProgressBar1.Value + 1
    
         oRange0.AutoFilter Field:=4, Criteria1:="051"  'filtro colonna 4                                                               
         oRange0.AutoFilter Field:=6, Criteria1:=Array("bari-1", "bari-2", "Ancona-1", "Ancona-2", "Napoli", "Roma") 'filtro multiplo
        
             Trovato = False
        
    For j = 2 To 6000
        If oSheet2.cells(j, 2) = "" And oSheet2.cells(j, 3) = "" Then            
           Trovato = True                
                 oRange1.Copy Destination:=oSheet2.cells(j, 1) 'copio il risultato del filtro nel secondo file
                  j = 6001
        End If
    Next
    
    ProgressBar1.Value = ProgressBar1.Value + 1
      
       oBook.Close SaveChanges:=False
       oBook2.Close SaveChanges:=True       
       oExcel.Quit
    
    ProgressBar1.Value = ProgressBar1.Max
    MessageViewer1.AddMessage 1, "Trasferimento eseguito con successo!"
                
        Set oExcel = Nothing
        Set oBook = Nothing
        Set oBook2 = Nothing
        Set oSheet = Nothing
        Set oSheet2 = Nothing
        Set oRange0 = Nothing
        Set oRange1 = Nothing
    
    End Sub

  5. #5
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,939
    Blogs
    5
    E comunque non è consentito il crossposting

    Filtro multiplo su excel da VB6 : Forum Visual Basic 6.0

    Chiuso
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

Discussione chiusa

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi