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

Discussione: Inserimento dati in Excel

  1. #1
    roccolamann non è in linea Scolaretto
    Post
    474

    Inserimento dati in Excel

    Con questa routine inserisco un dato in un foglio Excel
    codice:
    Sub DatiInserisciInFoglioExcel()
      On Error Resume Next
        Dim objexcel As Excel.Application                           
        Dim objworkbook As Excel.Workbook
        Dim objworksheet As Excel.Worksheet
         Set objexcel = CreateObject("Excel.Application")           
                    objexcel.Visible = False                                            
             Set objworkbook = objexcel.Workbooks.Open(FileExcel)    'Apro il foglio
             Set objworksheet = objworkbook.Worksheets("DATI")
            objworksheet.Range("B12").Value = Now      'Inserisco i dati nella cella
          objworkbook.SaveAs ("C:\Database.xls")        'Salvo il foglio di lavoro
        Set objworkbook = Nothing                               'Poi scarico la memoria
       Set objworkbook = Nothing
      Set objexcel = Nothing
    End Sub
    Funziona bene; solo che al momento di salvare il foglio
    esce sempre un messaggio che dice("Esiste già un file con questo nome; vuoi sostituirlo?")
    Come posso fare in modo che questo messaggio venga eliminato?

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,215
    Blogs
    5
    https://stackoverflow.com/questions/...atic-overwrite


    @rocco ... non sei nuovo e sai che c'è la sezione Excel ... questa volta sposto io ...
    Ultima modifica di AntonioG; 17-12-2018 17:31 
    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

  3. #3
    GiuseppeMN non è in linea Scribacchino
    Post
    751
    Buona sera, Rocco;
    consentimi un saluto a @AntonioG.

    Tornando alla tua richiesta, premesso che a me da una serie di errori, il più significativo all'Istruzine:
    codice:
     objworksheet.Range("B12").Value
    A beneficio degli Utenti di Forum allego l'immagine dell'errore.

    Errore di compilazione.jpg

    Ciò premesso, per non visualizzare la richiesta di sovrascrire il File, potresti provare con:

    codice:
    ...
    ...
    ...
    Application.DisplayAlerts = False
    objworkbook.SaveAs ("C:\Database.xls")        'Non sono riuscito a testarla, rende l'errore di cui sopra
    Application.DisplayAlerts = True
    ...
    ...
    ...


    A disposizione.

    Buona serata.

    Giuseppe
    Ultima modifica di GiuseppeMN; 30-12-2018 16:52  Motivo: Correzione errore lessicale.

  4. #4
    alfrimpa non è in linea Scolaretto
    Luogo
    Napoli
    Post
    330
    @roccolamann

    Onestamente non capisco come il tuo codice possa funzionare quando hai questa istruzione

    codice:
    objworksheet.Range("B12").Value
    che è monca; cosa ci deve andare in B12?

    Poi non capisco perchè ad inizio macro apri una nuova istanza di Excel.

    Alfredo

  5. #5
    roccolamann non è in linea Scolaretto
    Post
    474
    Premesso che si tratta di una routine inserita nel VBA di un documento Word e se non aprissi una
    nuova istanza di Excel non funzionerebbe nulla fin dal principio
    ammetto che l'istruzione
    codice:
    objworksheet.Range("B12").Value
    va corretta nel seguente modo
    codice:
    objworksheet.Range("B12").Value=now
    Comunque tutto questo nulla toglie alla validità della mia domanda
    ho provato a correggere la routine secondo i vostri consigli nel seguente modo:
    codice:
    Sub DatiInserisciInFoglioExcel()
      On Error Resume Next
        Dim objexcel As Excel.Application                           
        Dim objworkbook As Excel.Workbook
        Dim objworksheet As Excel.Worksheet
         Set objexcel = CreateObject("Excel.Application")           
                    objexcel.Visible = False                                            
             Set objworkbook = objexcel.Workbooks.Open(FileExcel)    'Apro la cartella Excel
             Set objworksheet = objworkbook.Worksheets("DATI")        'Seleziono il foglio
            objworksheet.Range("B12").Value=now                               'Inserisco i dati nella cella
                Application.DisplayAlerts = False                                    'Modifica da te suggerita
                    objworkbook.SaveAs ("C:\Database.xls")        'Salvo il foglio di lavoro
              Application.DisplayAlerts = True                   
                 Set objworkbook = Nothing                                 'Poi scarico la memoria
       Set objworkbook = Nothing
      Set objexcel = Nothing
    End Sub
    Comunque continua a non funzionare: esce sempre il messaggio che dice("Esiste già un file con questo nome; vuoi sostituirlo?")

  6. #6
    GiuseppeMN non è in linea Scribacchino
    Post
    751
    Sarò di coccio, ma non capisco perché non funziona:

    Application.DisplayAlerts = False
    objworkbook.SaveAs ("C:\Database.xls")
    Application.DisplayAlerts = True
    evita che si presenti il messaggio ""Esiste già un file con questo nome; vuoi sostituirlo?" che ti compare.

    Magari potresti provare con:
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:="C:\Database.xls"
    Application.DisplayAlerts = True

    Giuseppe
    Ultima modifica di GiuseppeMN; 08-01-2019 17:46 

  7. #7
    L'avatar di Hollywood
    Hollywood non è in linea Scolaretto
    Post
    292
    Quote Originariamente inviato da GiuseppeMN Visualizza il messaggio
    Sarò di coccio, ma non capisco perché non funziona:
    Probabilmente perché usi "DisplayAlerts=False" riferito ad Application, che in questo caso è l'istanza di Word aperta… prova invece a scrivere:
    codice:
     objexcel.DisplayAlerts = False
    che si riferisce all'istanza Excel aperta per modificare i dati…

    Inoltre è buona norma NON scrivere/salvare/file in radice, anzi alcuni SO te lo impediscono proprio (credo da W7 in poi…)

    Saluti

  8. #8
    roccolamann non è in linea Scolaretto
    Post
    474
    Grazie Hollywood.
    Con il tuo suggerimento ho risolto il problema.
    Adesso funziona.
    Quanto al salvataggio del file in radice chiarisco che ho scritto
    codice:
    objworkbook.SaveAs ("C:\Database.xls")
    unicamente perché mi tornava più facile e sbrigativo, invece di scrivere:
    codice:
    objworkbook.SaveAs ("C:\..eccetera\eccetera\Database.xls").
    Di nuovo grazie.
    Ultima modifica di roccolamann; 10-01-2019 15:20 

  9. #9
    GiuseppeMN non è in linea Scribacchino
    Post
    751
    Buona giornata, @Hollywood;
    ti ringrazio della tua attenzione, sinceramente mi era sfuggito che il Codice VBA fosse in un Documento WORD.

    Buona giornata, @roccolamann;
    molto indegnamente mi chiedo se, nel tuo Codice, non varrebbe la pena, dopo aver salvato il File Excel, chiuderlo con l'istruzione:
    codice:
     objworkbook.Close ("C:\Database.xls")
    In caso contrario, credo che il File Database.xls lo potrai riaprire solo in "Sola lettura":

    File in sola lettura.png

    o mi sbaglio?


    A disposizione.

    Giuseppe
    Immagini allegate Immagini allegate
    Ultima modifica di GiuseppeMN; 11-01-2019 04:23 

  10. #10
    roccolamann non è in linea Scolaretto
    Post
    474
    Giusto, Giuseppe.
    Mi era sfuggito questo particolare.

+ Rispondi al Thread

Permessi di invio

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