Interazione Excel: prima casella vuota disponibile

di il
14 risposte

Interazione Excel: prima casella vuota disponibile

Ciao a tutti.

Non vado molto d'accordo con Excel, ma ogni  tanto purtroppo devo usarlo.

Volevo automatizzare un aggiornamento di un file excel prendendo dei valori da un db access in uso.

in teoria la cosa è molto semplice: nel file Excel ho gli anni (dal 2013) come intestazione di colonna, e per ogni anno su ogni riga inserisco un  numero. Lavoro “in tempo reale”, nel senso che lavoro sempre e solo sull'anno in corso, non ho necessità di andare su anni precedenti.

Sono una totale zappa con interazione excel (word ancora ci vado d'accordo), così ho cercato un pò in rete e avrei trovato quello che fa al caso mio, quindi ho fatto una prova:

With ws
     '================
     'COORDINATE EXCEL
     '================
     
     'Calcola la colonna dell'anno in corso
     Y = 2 + ((2013 - Year(Now)) * -1)    '2 perchè il primo anno nel mio file è il 2013 che sta in colonna 2, -1 perchè dalla differenza mi esce un numero negativo
     
     'Ricava la prima cella libera dell'anno in corso
     X = (Cells(Rows.Count, Y).End(xlUp).Row + 1)
     
     Debug.Print "(" & X & "," & Y & ")"
     
     .Cells(X, Y) = "STO SCRIVENDO QUI"

End With

funziona a metà…. nel senso che nel file excel la colonna dell'anno corrisponde, ma mi scrive molto più sotto della prima cella libera, nel mio esempio scrive nella cella con coordinate (43,11) quando invece la prima cella libera di quella colonna è alla riga 35, quindi dovrebbe essere (35,11)

Cos'è che sbaglio (perchè di sicuro sbaglio)?

Andrea

14 Risposte

  • Re: Interazione Excel: prima casella vuota disponibile

    Sicuro che nelle celle precedenti non ci siano formule?

  • Re: Interazione Excel: prima casella vuota disponibile

    No niente sono tutte vuote.

    L'unica formula è presente nella riga 2, cioè sotto l'intestazione, dove per ogni anno mi fa un totale di quante celle sono piene per l'anno riportato

  • Re: Interazione Excel: prima casella vuota disponibile

    Beh strano, così non ti si può dire molto. Forse se si potesse scaricare il file Excel …

  • Re: Interazione Excel: prima casella vuota disponibile

    Cosa ancora più strana…..

    la funzione la sto testando lanciandola con un pulsante.

    A parte che adesso, stranamente, ha iniziato a prendermi la casella giusta. Giuro che non ho fatto nulla a parte provare ad imbrogliare sottraendo 8 (visto che trovava la 43 e invece doveva andare alla 35…..).

    Comunque, senza l'imbroglio, ha cominciato a considerarmi la casella giusta.

    peccato che se provo a premere più volte il pulsante, la prima volta mi ha scritto il testo nella casella giusta (la 35,11), le volte successive mi restituisce sempre e soltanto la casella (0,11)……..

    riguardo il file excel si può fare, ho eliminato gli altri fogli (dati sensibili) e lasciato il foglio incriminato, sempre in seconda posizione.

    solo….come lo allego?

  • Re: Interazione Excel: prima casella vuota disponibile

    Usa dropbox o simili.

    E mostra tutto il codice VBA che hai usato (anche l'apertura del file) non solo quello mostrato.

  • Re: Interazione Excel: prima casella vuota disponibile

    Dropbox e similari sono stati tutti bloccati in ufficio….

    vedrò di portarmi il file a casa a fine giornata e lo faccio da là.

    Ecco il codice completo dei test:

    Dim appExcel As Excel.Application    'Se dovesse dare errore su questa riga, è perchè bisogna aggiungere Strumenti/Riferimenti e flaggare Microsoft Word Object (e excel o/o quant'altro)
    Dim wb As Excel.Workbook
    Dim ws As Excel.Worksheet
    
    Dim X As Integer
    Dim Y As Integer
    
    'Se Excel non è in funzione evita il messaggio di errore
    On Error Resume Next
    Err.Clear
    
    'Definisce l'apertura di Excel per compilare il modello e decide se visualizzarlo o no
    Set appExcel = New Excel.Application
    
    appExcel.Visible = False  'metti True se vuoi vedere excel a video
    
    'Se Excel non è aperto in background lo avvia
    If Err.Number <> 0 Then
    Set appExcel = New Excel.Application
    End If
    
    'Apre il file Excel 
    Set wb = appExcel.Workbooks.Open("C:\Users\Andrea\Desktop\PROVA EXCEL\Test.xlsm")
    
    'seleziona il foglio 2
    Set ws = wb.Worksheets(2)
    
    With ws
         '================
         'COORDINATE EXCEL
         '================
         
         'Calcola la colonna dell'anno in corso
         Y = 2 + ((2013 - Year(Now)) * -1)   '2 perchè il primo anno nel mio file è il 2013 che sta in colonna 2, -1 perchè dalla differenza mi esce un numero negativo
         
         Debug.Print Y
    
         'Ricava la prima cella libera dell'anno in corso
         X = Cells(Rows.Count, Y).End(xlUp).Row + 1
         
         
         Debug.Print X
         
         
         Debug.Print "(" & X & "," & Y & ")"
         
         ws.Cells(X, Y) = "STO SCRIVENDO QUI"
    
    End With
    
    wb.Save
    wb.Close
    
    appExcel.Quit
    
    Set wb = Nothing
    Set appExcel = Nothing
    
    End Sub
    

    Grazie per la pazienza.

  • Re: Interazione Excel: prima casella vuota disponibile

    Sei in un blocco With e ti manca il punto prima di Cells su questa riga.

    
    X = Cells(Rows.Count, Y).End(xlUp).Row + 1

    Se lo scrivi così, invece di riferirti all'oggetto ws, ti riferisci all'ActiveSheet.


    Qui invece sei sempre dentro al blocco, ma lo espliciti

    
    ws.Cells(X, Y) = "STO SCRIVENDO QUI"

    Per comodità, semplificherei anche il calcolo di Y con

    
    Y = Year(Now()) - 2015

    Non che implichi qualcosa, ma così, giusto per dare un'idea. :)

  • Re: Interazione Excel: prima casella vuota disponibile

    Uhmmmmm…..

    Purtroppo sono a casa adesso, ma domani effettivamente correggo e riprovo.

    in ogni caso, ecco il file excel:

    https://www.dropbox.com/scl/fi/yc6rsbpxhdutrr6uprbmw/Test.xlsm?dl=0&rlkey=kr9uok17en143xw8fgpe9udwg

  • Re: Interazione Excel: prima casella vuota disponibile

    Ho fatto un test tramite Access (nuova maschera ? pulsante ? copia/incolla del codice) sul file che hai condiviso e ti confermo che il problema è in quella istruzione.

    Per l'esattezza, deve diventare

    X = .Cells(.Rows.Count, Y).End(xlUp).Row + 1

    quindi serve il punto prima di Cells ed anche prima di Rows.

    Onestamente a me restituiva errore l'istruzione (ignorata dal Resume Next ma intercettata in debug), quindi non so come facesse a prenderti un numero di riga maggiore. A me X restava proprio a zero… Fai qualche prova, salvando la cartella lasciando attivi fogli sempre diversi (ammesso che tu ne abbia più di due nel file di produzione), per vedere se effettivamente è li il problema.

  • Re: Interazione Excel: prima casella vuota disponibile

    Onestamente non so neanche io come facesse a considerarmi un numero maggiore. E neanche perchè ad un certo punto (cioè da quando ho cercato di “imbrogliarlo” sottraendo il numero di celle in eccesso) abbia cominciato a calcolare il numero giusto. Tipo “mann….se ne è accorto….” 

    Comunque, come avevo detto nel primo post “Cos'è che sbaglio?”; e infatti era tutto dovuto ad errore mio, la mancanza dei punti.

    Ho provato a fare come hai suggerito (aggiungere fogli, inoltre lavorando dentro blocchi with oppure al di fuori esplicitando), e andava

    In ogni caso il problema sembra risolto: fa quello che gli dico dove gli dico….

    Grazie a tutti per la pazienza e la cortesia

    Andrea

  • Re: Interazione Excel: prima casella vuota disponibile

    28/11/2022 - Jocman ha scritto:


    On Error Resume Next

    A volte è inevitabile dover ignorare degli errori, occorre però sempre ricordare che voler saltare (tutti) gli errori può portar ad un comportamento non previsto/non prevedibile/casuale del programma

  • Re: Interazione Excel: prima casella vuota disponibile

    A dirla tutta io l'errore riscontrato da Sgrubak non l'ho mai avuto. Probabilmente avrò qualche impostazione di Access messa in modo diverso (e se non mi segnala l'errore, vuole dire che l'impostazione è sbagliata….)

  • Re: Interazione Excel: prima casella vuota disponibile

    29/11/2022 - Jocman ha scritto:


    A dirla tutta io l'errore riscontrato da Sgrubak non l'ho mai avuto. Probabilmente avrò qualche impostazione di Access messa in modo diverso (e se non mi segnala l'errore, vuole dire che l'impostazione è sbagliata….)

    28/11/2022 - Sgrubak ha scritto:


    …Onestamente a me restituiva errore l'istruzione (ignorata dal Resume Next ma intercettata in debug)…

    Giusto per ribadire a cosa può portare l'uso non controllato di On Error Resume Next 

  • Re: Interazione Excel: prima casella vuota disponibile

    29/11/2022 - Jocman ha scritto:


    Onestamente non so neanche io come facesse a considerarmi un numero maggiore. E neanche perchè ad un certo punto (cioè da quando ho cercato di “imbrogliarlo” sottraendo il numero di celle in eccesso) abbia cominciato a calcolare il numero giusto. Tipo “mann….se ne è accorto….” 

    Io li chiamo "fantasmini nel pc". Fatico a trovare con quali logiche certi errori si presentino (anche su sw pagati e fatti da esperti). Una volta salta fuori, la volta dopo no, poi ricompaiono… Buh?!

    Sicuramente non andava in errore e calcolava l'ultima riga di qualche altro foglio. Avesse beccato l'errore e l'avesse ignorato col Resume Next, non scrivevi niente da nessuna parte (perché X restava a zero e quindi anche la scrittura sollevava errore che sarebbe stato ignorato a sua volta). La variabile X è locale, quindi non può restare sporca da altro codice.

    Misteri del VBA… XD

Devi accedere o registrarti per scrivere nel forum
14 risposte