Usare Find per trovare colonna



  • Usare Find per trovare colonna?
    di Luca.Donati data: 28/03/2014 14:26:31

    Ciao a tutti.
    Sto tentando di farmi una Function che possa dirmi in che colonna si trova una determinata stringa, in modo da poterla poi usare sotto forma di variabile di tipo string. Per esempio: Cells(3, col).
    Ho quindi fatto un primo codice sotto forma di Private Function TrovaColonna, che usavo sia all’interno di una macro che in una cella. Ma non funziona.
    Allora, ho provato a riportare tutto in una macro rinunciando provvisoriamente alla Function, e ovviamente rendendo tutto più rigido. Ma mi fa un sacco di storie anche così e mi rimprovera di non saper fare i blocchi With: prima non voleva l’end with, adesso protesta che non gli avrei impostato la variabile?!? (Errore di run-time ‘91’).
    Certo, che è un gran viziato, questo VBA!
    Qualcuno mi sa spiegare perché fa i capricci?
    Grazie, Luca

     
    Private Function TrovaColonna(testoCercato As String, foglio As String) As String
    'QUALCOSA NON VA nella riga annullata
    Worksheets(foglio).Select
    If Not Find(testoCercato) Is Nothing Then
        'TrovaColonna = Find(testoCercato).Columns
    Else
        TrovaColonna = "boh..."
    End If
    End Function
    
    Sub rigaDiOre()
    '
    ' rigaDiOre Macro
    ' tratta una giornata secondo una regola
    'ma non vi preoccupate per ora dello scopo finale, che non ha niente a che vedere con la ricerca di colonne…
    
    'prima parte da mettere in constanti
    Dim e1 As String, e2 As String, e3 As String 'colonne entrate
    Dim u1 As String, u2 As String, u3 As String 'colonne uscite
    Dim colReg As Range, cReg As String
    '--------parte da sostituire con TrovaColonna
    With Sheets("monitor").UsedRange
        colReg = .Find("Regole", LookIn:=xlValues)
        If Not colReg Is Nothing Then
            cReg = colReg.Column
        Else
            cReg = "Non Trovato"
        End If
    End With
    '--------fine parte da sostituire con TrovaColonna
    MsgBox ("le regole stanno a colonna " & cReg)
    



  • di Luca.Donati data: 28/03/2014 14:30:31

    Ho dimenticato di precisare che i capricci di With sono una curiosità "didattica", comunque importante per altri usi; invece, per l'utilità immediata mi sarebbe più utile arrivare a fare la Function.
    grazie ancora.



  • di lepat (utente non iscritto) data: 28/03/2014 14:40:58

    prova così
     
    Sub rigaDiOre()
    Dim colreg As Range
    With Sheets("monitor").UsedRange
        Set colreg = .Find("Regole", LookIn:=xlValues)
        If Not colreg Is Nothing Then
            cReg = colreg.Column
        Else
            cReg = "Non Trovato"
        End If
    End With
    '--------fine parte da sostituire con TrovaColonna
    MsgBox ("le regole stanno a colonna " & cReg)
    End Sub