+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Pulsante di Comando ActiveX

  1. #1
    Eusty non è in linea Scolaretto
    Post
    57

    Pulsante di Comando ActiveX

    Buongiorno a tutti,
    Ho scritto la Sub che scrivo qui sotto per copiare alcuni dati di un elenco nel Foglio "Prova2" in un nuovo elenco sempre nello stesso foglio.
    Poi ho creato nel Foglio "Prova1" un Pulsante di Comando ActiveX e gli ho assegnato la Sub.
    Il problema è che non riesco a farlo funzionare.
    Se scrivo la Sub in "Questa_cartella_di_lavoro" non succede nulla e se la scrivo in Foglio1(Prova1) mi filtra le celle del Foglio "prova1" e non del Foglio "Prova2".
    Cosa mi sfugge??

    codice:
    Sub CommandButton1_Click()
        Sheets("Prova2").Select
        i = 2
        k = 1
        NumRows = Range("L2", Range("L2").End(xlDown)).Rows.Count + 1
        For i = 2 To NumRows
            If Cells(i, 1) = Range("N1") Or Cells(i, 1) = Range("O1") Then
                k = k + 1
                Cells(k, 13) = Cells(i, 1)
            End If
        Next
    End Sub
    Grazie in anticipo per i suggerimenti

  2. #2
    L'avatar di gibra
    gibra non è in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    6,064
    Non sapendo nulla del tuo foglio (se e cosa contiene)...
    A volte avere il file da esaminare è risolutivo.

    Probabilmente basta eseguire

    codice:
    Sheets("Prova2").Activate
    Ma non sempre è utile farlo, né Select (a che pro selezionare tutto il foglio?), né Activate (magari non voglio farlo vedere all'utente).
    Come vedi, dipende dal contesto operativo.


    Di solito io non uso né uno né l'altro, ma preferisco sempre qualificare il foglio, ovvero:
    codice:
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Prova2)
    
    numRows = ws.Range("L2", ws.Range("L2").End(xlDown)).Rows.Count + 1
    
    ' ecc. ecc.

  3. #3
    Sgrubak non è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    278
    Quote Originariamente inviato da Eusty Visualizza il messaggio
    mi filtra le celle del Foglio "prova1" e non del Foglio "Prova2"
    Questo perché i vari [Range] e [Cells] che hai scritto è come se avessero anteposto il [Me], quindi riferiscono al foglio su cui risiede il codice. Per ottenere quel che ti serve, devi fare come ha detto Gibra e dichiarare un foglio e valorizzarlo con il foglio che ti interessa.

  4. #4
    L'avatar di dragone bianco
    dragone bianco non è in linea Moderatore Globale
    Luogo
    Aosta
    Post
    7,734
    Ciao Eusty

    usa questa sintassi
    codice:
    worksheets("Prova2").range("L2")
    Anteponendo worksheets("Prova2") dove "prova2" è il nome del foglio dici al codice che vuoi leggere il range L2 del foglio "Prova2"
    non mettendo niente indichi il range del foglio attivo

    se vuoi fare un copia incolla puoi scrivere
    codice:
    worksheets("Prova2").range("L2")=worksheets("Prova1").range("A2")
    esplicitamente indichi i fogli da cui leggere o scrivere
    in questo esempio scrivi nella Cella "L2" del Foglio "Prova2" il valore della cella "A2" del Foglio "Prova1"
    Questo metodo è comodo poiche il codice potrebbe girare da un modulo o da un altro foglio con lo stato attivo

    Ciao

  5. #5
    Eusty non è in linea Scolaretto
    Post
    57
    Grazie mille per i consigli.
    Alla fine ho optato per:


    codice:
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Prova2)
    
    numRows = ws.Range("L2", ws.Range("L2").End(xlDown)).Rows.Count + 1
    
    ' ecc. ecc.
    Usavo .Select perché sto imparando piano piano a usare vba e per ora era l'unico metodo che conoscevo

+ Rispondi al Thread

Permessi di invio

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