Sviluppare funzionalita su Microsoft Office con VBA cancellare parte di una riga

Login Registrati
Stai vedendo 14 articoli - dal 26 a 39 (di 39 totali)
  • Autore
    Articoli
  • #39643 Score: 0 | Risposta

    tanimon
    Partecipante
      16 pts

      M.Paolo ha scritto:

      ciao leggi post 39635

      ok, grazie.

      scusami tanto ma tra il mio post 39621 ed il post 39635, come detto al post 39637,

      mancava solo una ) 

       

      #39644 Score: 0 | Risposta

      DeletedUser
      Bloccato
        13 pts

        Ok ho capito funziona pure la tua, non ho notato che mancava una parentesi. SCUSAMI TANTO ma non mi sembra il caso di fare polemiche. Avevate ragione un pò tutti ed ho ringraziato tutti. Che altro devo fare, pagare una marca da bollo come imposta? Mamma mia che pignoleria.

        #39645 Score: 0 | Risposta

        tanimon
        Partecipante
          16 pts

          M.Paolo ha scritto:

          non mi sembra il caso di fare polemiche

          scusami tu,

          forse la precisione richiesta da Vba nel compilare la sequenza di istruzioni che deve eseguire,

          mi porta involontariamente a farne, ma non è mia intenzione fare polemiche.

          Inoltre come da post 39618, ho scritto il 39621 da cellulare e mi è scappata la parentesi....

           

          #39647 Score: 0 | Risposta

          DeletedUser
          Bloccato
            13 pts

            tanimon scusami ma davvero non ho notato la parentesi e comunque all'inizio il mio file non funzionava con nessuno quindi  non avrebbe funzionato nemmeno con la tua. Ok anche la tua formula è corretta. Fossi l'ammnistratore del forum cancellerei questo  post per intero. Saluti tanimon

            #39648 Score: 0 | Risposta

            rollis13
            Partecipante
              8 pts

              M.Paolo ha scritto:

              Sinceramente mi amareggio quando leggo certe cose. Se ti chiedo di aiutarmi a mettere su una formula ti devo mandare 100 file excel e 100.000 e passa dati metastock? Ho chiesto solo una formula, non serviva tutto questo ambaradan. Saluti

              Vabbè, allora, visto che il tuo file funziona da almeno 10 anni, vista l'documentazione che hai messo a nostra disposizione in questo thread, a quel punto (#post-39623) avrei avuto solo due soluzioni, o astenermi dal postare oppure, prima, cercarmi su Wish una sfera di cristallo. Tutto sommato preferisco ancora il mio #post-39636.

              #39649 Score: 0 | Risposta

              DeletedUser
              Bloccato
                13 pts

                Ragazzi, basta polemiche inutili. davvero inutili. Io 10 anni fa ho fatto lavori in vba che ancora oggi non ci credo. ora non ricordo nulla o quasi di vba.

                Vorrei in un cella di excel Range("Last_Var") il valore di questa formula scritta in excel, qualcuno me la traduce per favore? "

                =100*((INDICE(close;Record)/INDICE(close;Record-1)-1))"

                close e record sono due valori presenti sul foglio. Non chiedetemi di postare nulla perchè non è possibile, se qualcuno mi ha capito e mi aiuta lo ringrazio altrimenti grazie lo stesso a tutti. Rollis13 per favore niente polemiche.

                #39651 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  272 pts

                  Però non dici se "close" è monodimensionale oppure no. E c'è differenza.

                  A parte che VBA espone l'insieme WorksheetFunction dove trovi tutte le funzioni del foglio, per cui si potrebbe facilmente pensare a qualcosa come WorksheetFunction.Index e tradurre di conseguenza paro paro la formula, a parte questo dicevo io preferirei un approccio più VBistico.
                  Nel tuo esempio "close" è un range (è una matrice nella formula quindi è un intervallo per VBA), mentre "record" potrebbe essere un nome definito dall'utente oppure una costante letterale oppure una variabile. Supponendo che "close" sia monodimensionale puoi provare le istruzioni seguenti.

                  Se "record" ha un valore fisso o variabile deve essere previamente assegnato un valore in un altro punto del codice:

                  j = 100 * (( range(close).Cells(record) / range(close).Cells(record-1)  -1))

                  Se invece è un range definito allora:

                  j = 100 * (( range(close).Cells(range(record)) / range(close).Cells(range(record)-1)  -1))

                  In entrambi i casi, "record" è un numero che identifica la cella numero "record" all'interno dell'intervallo. 

                   

                  #39652 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    272 pts

                    E chiaramente visto che "Close" è uno statement di VBA, quindi è una parola riservata, bisogna cambiare nome alla matrice oppure usare la notazione a partentesi quadre.

                    #39653 Score: 0 | Risposta

                    DeletedUser
                    Bloccato
                      13 pts

                      ciao vecchio frac mi sei mancato.... ascolta sia close che record sono etichette quindi sono due colonne con quei nomi. L'ho copiato pari pari da un vecchio file e non funziona ed io ormai ne so troppo poco, la memoria con l'età inganna. close l'ho usata in 100 file come etichetta e funziona senza problemi. Ora con le nuove informazioni che ti ho dato mi daresti gentilmente la formula corretta. Poi se sei disponibile ne devo fare un'altra uguale e poi se Dio vuole con il vba ho chiuso. Grazie MILLE e bentornato. Le due formule citate danno errore. A te se vuoi posso mandare un piccolo file in cui mettermi le 3 formule che mancano.

                       

                      #39654 Score: 0 | Risposta

                      DeletedUser
                      Bloccato
                        13 pts

                        vecchio frac hai posta... senza impegno, se puoi, io conto su di te. ciao e grazie a tutti per la partecipazione

                        #39655 Score: 0 | Risposta

                        vecchio frac
                        Senior Moderator
                          272 pts

                          M.Paolo ha scritto:

                          vecchio frac hai posta... senza impegno, se puoi, io conto su di te. ciao e grazie a tutti per la partecipazione

                          Ho visto adesso e ho risposto 😀

                          #39790 Score: 0 | Risposta

                          DeletedUser
                          Bloccato
                            13 pts

                            Buongiorno a tutti, volevo ringraziare di cuore vecchio frac, persona gentilissima e sempre disponibile, oltre che ovviamente molto competente. Mi è stato di grandissimo aiuto. Grazie amico mio, grazie mille.

                            #39791 Score: 0 | Risposta

                            vecchio frac
                            Senior Moderator
                              272 pts

                              Grazie grazie per tutti questi complimenti, non del tutto meritati a dire il vero 🙂

                              La parte più interessante del lavoretto è consistita in questo: dato un elenco (piuttosto lungo), inserire il valore di ogni cella dell'elenco in una cella precisa di un altro file, la "base", il quale deve poi essere salvato con altro nome, costruito in parte sul contenuto della medesima cella. Il file "base" è un file Excel con attivazione di macro e il file salvato deve conservare questa caratteristica (contiene codice che deve essere eseguito individualmente dal nuovo file).

                              Un approccio classico suggerisce di leggere cella per cella del file elenco, aprire il file base, modificare la cella di destinazione, salvare con nome (secondo una regola prefissata) mantenendo il formato xlsm, chiudere il file, passare alla cella successiva e ricominciare.

                              Ho adottato un'altra tecnica, che si rifà al mio articolo sull'utilizzo di ADO (invece che in lettura, in scrittura). Il risultato è quello desiderato, con un incremento di velocità (non devo far aprire ad Excel alcun file) e di prestazioni (il file base contiene una macro auto_open che viene eseguita all'apertura e questo complicava le operazioni).

                              Lo scheletro delle operazioni è questo: leggo cella per cella del file elenco, copio il file base in altra locazione rinominandolo con la regola prefissata, apro una connessione ADO a questo nuovo file, modifico la cella interessata, chiudo la connessione ADO, passo alla successiva cella dell'elenco. La parte interessante è che nel momento dell'esecuzione del comando di scrittura, il file non ha bisogno di essere "salvato" in modo tradizionale, perchè il dato viene inserito direttamente nel file xlsm. Quindi il file xlsm non viene propriamente aperto e non viene eseguita alcuna macro auto_open.

                              Option Explicit
                              
                              Sub skeleton()
                              Dim cn As Object
                              Dim s As String
                              dim d as String
                              
                                  s = "C:\Users\TestUser\Desktop\base.xlsm"
                                  p = "C:\Users\TestUser\Desktop\pippo.xlsm"
                                  FileCopy s, d
                                  Set cn = CreateObject("ADODB.Connection")
                                  
                                  cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & s & ";Extended Properties=""Excel 12.0;HDR=Yes;"";"
                                  cn.Execute "INSERT INTO [Foglio1$A1:A1] VALUES ('hello world')"
                                  cn.Close
                                  Set cn = Nothing    
                              End Sub
                              

                              La particolarità (di cui mi sono accorto dopo qualche tentativo) è che la cella modificata non è A1 del Foglio1, bensì A2 (perchè la stringa di connessione indica chiaramente che l'elenco ha un'intestazione e quindi è come se parlassimo di un range relativo: la prima cella di dati dell'elenco che ha l'intestazione in A1 è chiaramente A2).
                              Inoltre ho sperimentato che nel file "base" la cella A2 deve essere vuota altrimenti compare un errore (campo "XXX" non trovato, dove XXX è l'header stesso, cioè A1).

                              HTH 🙂

                              #39792 Score: 0 | Risposta

                              DeletedUser
                              Bloccato
                                13 pts

                                vecchio frac ha scritto:

                                Grazie grazie per tutti questi complimenti, non del tutto meritati a dire il vero 🙂

                                Perchè non tutti meritati.... hai fatto un lavorone in pochissimo tempo. A me sarebbe servito un mese e non so nemmeno se ci sarei riuscito. I complimenti sono meritatissimi. Grazieeeeeeeeeeeeeeeeeeeee.

                              Login Registrati
                              Stai vedendo 14 articoli - dal 26 a 39 (di 39 totali)
                              Rispondi a: cancellare parte di una riga
                              Gli allegati sono permessi solo ad utenti REGISTRATI
                              Le tue informazioni: