+ Rispondi al Thread
Pagina 2 di 2 primaprima 12
Visualizzazione dei risultati da 11 a 20 su 20

Discussione: Contare righe

  1. #11
    firstcode non è in linea Novello
    Post
    13
    in questi giorni ho continuato a provare e riprovare ma non riesco a fare funzionare la macro, e io che all'inizio pensavo fosse una cosa relativamente semplice ...

    questa volta c'è un errore nel blocco
    codice:
       Set rFind =  Range("A:A").Find(What:=oSap, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
             :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
             False, SearchFormat:=False)
        If not rFind is Nothing then '... (esegue le operazioni solo se Find ha successo)
            lRighe=1
            Do While rFind=rFind.Offset(lRighe,0)
    in quanto il debug mi restituisce : "errore di runtime 13 tipo non supportato"
    non capisco da cosa dipenda, perchè qui abbiamo solo sostituito Cells con Range ma non mi pare che debbano essere dichiarate o modificate delle variabili e nell colonna A non ci sono date

  2. #12
    L'avatar di dragone bianco
    dragone bianco non è in linea Moderatore Globale
    Luogo
    Aosta
    Post
    7,712
    Ciao

    Su quale riga ti da errore?

    Sul Set rFind
    Sull IF not rFind is Nothing then

    Dove?

    Vedo che c'è anche in ciclo di LOOP

    Ciao

  3. #13
    firstcode non è in linea Novello
    Post
    13
    in questo blocco

    codice:
     Set rFind =  Range("A:A").Find(What:=oSap, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
             :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
             False, SearchFormat:=False)
    procedendo con l'F8 me lo seleziona in giallo e il click successivo mi dà l'errore

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

    Ti dico cosa leggo
    La ricerca è finalizzata al primo dato trovato
    Setti la rFind (variabile di tipo Range) con l'esito della ricerca

    la Ricerca Avviene nella Colonna A (di un foglio non definito) - Range("A:A")
    Cerchi nel seguente modo:
    • What:=oSap - deve contenere la striga contenuta nella variabile di testo)
    • After:=ActiveCell - Cerca dopo la cella attiva
    • LookIn:=xlFormulas - Cerca nelle Formule della cella (lookin:=xlValues per cercare nei valori della cella)
    • LookAt:=xlPart - non confronta l'intero contenuto della cella
    • SearchOrder:=xlByRows - fa una ricerca per riga
    • SearchDirection:=xlNext - Specifica la direzione di ricerca (successiva all'intervallo)
    • MatchCase:= False - Ricerca parole sia maiuscole che minuscole
    • SearchFormat:=False - Non Specifici il formato di ricerca.

    Errori possibili sono:
    se sei in un modulo non specifici il foglio su cui cercare
    la variabile oSap potrebbe contenere valori Nulli
    Ometterei tutte quelle voci non necessarie, a parte What: tutte le altre sono facoltative

    Ciao

  5. #15
    L'avatar di Zer0Kelvin
    Zer0Kelvin ora è in linea Scolaretto
    Luogo
    Teramo - provincia
    Post
    271
    Ciao a tutti e buon anno...
    L'errore potrebbe essere dovuto alla vaiabile oSap, ma non sappiamo cosa contiene.
    Forse sarebbe meglio allegare un file coerente con quello che usi, altrimenti potrebbe volerci parecchio per venirne a capo.

    PS: è meglio postare sempre tutto il codice, e non solo poche righe; l'errore potrebbe essere altrove.
    __________________________
    [Excel 2010]
    -Condividere la conoscenza aumenta la ricchezza di tutti. (Z0°K)
    -Dai ad un uomo un e pesce lo avrai sfamato per un giorno; insegnagli a pescare e lo avrai sfamato per sempre. (Confucio)
    -Il sonno della ragione genera mostri. (Francisco Goya)
    -Il sapere non si propaga spontaneamente, l'ignoranza lo fa. (Z0°K)

  6. #16
    firstcode non è in linea Novello
    Post
    13
    riprendo un attimo quanto detto da patel45
    ancora non funziona ma grazie per la risposta perchè mi ha fatto ragionare su una questione: all'inizio dichiaro la variabile oSap come Range e le attribuisco un "valore-oggetto", non so se la definizione sia corretta ma intendo dire che attraverso questa dichiarazione la variabile diventa la cella D1, non anche il suo contenuto.
    Così, dopo che attivo il foglio per far partire la ricerca, il metodo "Find(What:=oSap)" altro non fa che ricercare la cella D1, e infatti scorrendo la routine mi si seleziona quella cella e poi parte un loop infinito.
    Forse mi sbaglio io ma l'errore mi sembra questo e credo che per risolverlo io debba fare in modo di attribuire a oSap un valore di String e non di Range (del contenuto della cella e non della cella stessa); ho provato quindi a dichiarare "Dim oSap as String", ma restituisce un altro errore (necessario oggetto per la riga "Set oSap = cells (1, 4)"); ho provato anche "Dim oSap as Variant", giusto per provarle tutte, ma a quel punto rimane selezionata una cella a caso, non va nemmeno in D1.

    anche se tutte le altre volte (mi sembra) che ho utilizzato il VBA la variabile cella restituiva il contenuto e non la cella stessa, la mia interpretazione è corretta?

    appena riesco allego un esempio di quello che sto cercando di fare

  7. #17
    firstcode non è in linea Novello
    Post
    13
    provo ad allegare un'immagine di quel che dovrei effettivamente realizzare.

    premetto che si tratta di una parte di una macro più ampia già funzionante, per questo non sto a scrivere tutto il codice. Di fatto partendo dal Foglio1 ogni campo (A5, B5 etc) viene estratto e copiato su un foglio Word al proprio posto, a mo' di lettera.
    A fine della pagina Word dovrei copiare una tabella, che si trova nel foglio 2. Come potete vedere la tabella è divisa da alcune righe gialle a seconda della chiave di riferimento che lega il Foglio1 al Foglio2.

    dunque, partendo per esempio dalla cella A5 del Foglio1 dovrei fare una ricerca nel medesimo campo sul Foglio2 e trovare il primo valore disponibile, che nell'esempio è la cella A24 (i valori corrispondenti sono nelle celle azzurre). A questo punto dovrei contare il numero di righe con chiave di riferimento 302470, spostarmi verso destra e selezionare il range "B24:E27" (qui color mattone) per poi copiarlo e incollarlo come tabella sul foglio Word.
    dopodichè si passa alla riga successiva del Foglio1 e avanti così con un ciclo, fino ad esaurimento righe.
    si noti anche che nel Foglio2 possono esserci chiavi con riga singola, la qual cosa -se non ricordo male- potrebbe creare qualche problema.


    PS. ma come si fa ad allegare un file .jpg?

  8. #18
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    15,024
    Blogs
    5
    Usa un sito che te lo fa fare gratuitamente e posta il link
    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

  9. #19
    firstcode non è in linea Novello
    Post
    13
    dopo una serie di altri tentativi sono riuscito (in parte) ad ottenere quel che volevo, a questo punto non è così importante postare l'immagine
    ringrazio zer0Kelvin perchè la soluzione, di fatto, era nel suo post precedente, evidentemente sbagliavo qualcosa io.
    il codice che funziona è questo:

    codice:
    Dim oSap As Range
     Dim rFind As Range
     Dim lRighe As LongPtr
     Set oSap = cells(3, 12)
    
    'faccio partire l ricerca che trova il valore ricercato
    Sheets("Foglio1").Activate
        Set rFind = Range("B:B").Find(What:=oSap)
        rFind.Select
        
        If Not rFind Is Nothing Then '... (esegue le operazioni solo se Find ha successo)
            lRighe = 1
            Do While rFind = rFind.Offset(lRighe, 0)
                  lRighe = lRighe + 1
                  'lRighe = rFind.CurrentRegion.Rows.Count
            Loop
             lRighe = rFind.CurrentRegion.Rows.Count
                MsgBox (lRighe)
                activecell.Offset(0, 1).Select
                Set rResize = Selection.Resize(numRows + lRighe, numColumns + 4)
                rResize.Select
    il codce funziona ma non è del tutto perfetto: per il primo valore della lista che trovo (solo il primo, per i seguenti non capita e nemmeno i valori con riga singola non danno problemi) quello della cella A2, il conto delle righe include anche la cella A1 che per me è la riga d'intestazione dei campi.
    non è poi un problema così grosso, posso tranquillamente passarci sopra ma mi piacerebbe sapere perchè fa così.

    il problema vero viene adesso.
    come vedete il conto delle righe viene effettutato e viene selezionata l'area che mi interessa, al quale assegno il valore variabile "rResize".
    Questo range deve essere copiato in una tabella presente in un foglio Word, ma non riesco a farlo
    Per prima cosa chiedo se devo aprire un altro post, qui o riferito a word o se vabene prosefguire qui la discussione.
    Se va bene proseguire, come credo, qui ecco qual'è la questione: devo portare il range selezionato su word, per la precisione in una tabella di word.
    l'idea sarebbe allora di utilizzare la variabile e inserirla in un segnalibro, come faccio per tutti gli altri campi, ma inserendo il comando
    codice:
    .Bookmarks("masterR").Range = rResize
    non succede niente: non ho errori ma non viene copiato nulla, forse il motivo risiede nel fatto che si tratta di una tabella in word
    L' alternativa che mi pongo è un copia/incolla, ma non credo si possa incollare in un segnalibro.
    Forse potrei impostare un copia/sostituisci, ma come per il copia incolla non so come impostare il cursore all'interno della tabella.
    qualcuno ha qualche idea da suggerirmi?

  10. #20
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    15,024
    Blogs
    5
    Problema nuovo, nuovo thread, con titolo opportuno.

    Questo è concluso.
    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

+ Rispondi al Thread
Pagina 2 di 2 primaprima 12

Permessi di invio

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