Leggere dati da un file chiuso o aperto

Anonimo
2018-02-26T16:50:24+00:00

Ciao a tutti

dovrei leggere dei dati da un file che può essere chiuso oppure aperto.

Va bene se uso:

MyFile="c:\miacartella\miofile.xlsm"

Set oExcel = New Excel.Application

oExcel.Workbooks.Open MyFile, ReadOnly = True?

grazie per la vs. attenzione

Domenico

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-02-26T19:16:02+00:00

Ciao Domenico,

dovrei leggere dei dati da un file che può essere chiuso oppure aperto.

Va bene se uso:

MyFile="c:\miacartella\miofile.xlsm"

Set oExcel = New Excel.Application

oExcel.Workbooks.Open MyFile, ReadOnly = True?

Volendo, certo!

Ad esempio, il seguente codice funziona a me:

'=========>>

Option Explicit

'--------->>

Public Sub NuovoIstanzaExcel()

    Dim oExcel As Excel.Application

    Dim srcWB As Workbook

    Dim srcSH As Worksheet

    Dim srcRng As Range

    Dim vVal As Variant

    Const MyFile = "C:\Users\NDJ\Documents\Pippo.xlsm"  

    Const sFoglio As String = "Foglio1"

    Const sIntervallo As String = "A1"

    Set oExcel = New Excel.Application

    Set srcWB = oExcel.Workbooks.Open(MyFile, ReadOnly:=True)

    Set srcSH = srcWB.Sheets(sFoglio)

    Set srcRng = srcSH.Range(sIntervallo)

    vVal = srcRng.Value

    srcWB.Close SaveChanges:=False

    oExcel.Quit

    Set oExcel = Nothing

    Debug.Print "NuovoIstanzaExcel  " & vbTab & vVal

End Sub

'<<=========

Comunque, non è chiaro perchè vorresti creare una nuova istanza di Excel. A mio modesto avviso, più veloce e più efficiente sarebbe qualcosa del genere:

'=========>>

Option Explicit

'--------->>

Public Sub StessaIstanzaExcel()

    Dim srcWB As Workbook

    Dim srcSH As Worksheet

    Dim srcRng As Range

    Dim vVal As Variant

    Const MyFile = "C:\Users\NDJ\Documents\Pippo.xlsm"

    Const sFoglio As String = " "Foglio1"

    Const sIntervallo As String = "A1"

    Set srcWB = Application.Workbooks.Open(MyFile)    

    Set srcSH = srcWB.Sheets(sFoglio)

    Set srcRng = srcSH.Range(sIntervallo)

    vVal = srcRng.Value

    srcWB.Close SaveChanges:=False

    Debug.Print "StessaIstanzaExcel " & vbTab & vVal

End Sub

'<<=========

===

Regards,

Norman

La risposta è stata utile?

2 persone hanno trovato utile questa risposta.
0 commenti Nessun commento

4 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2018-02-28T17:13:29+00:00

    Grazie Norman

    problema risolto

    cari saluti

    domenico

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2018-03-13T12:06:55+00:00

    Ciao Domenico,

    prima di procedere volevo essere sicuro di questo fatto. Purtroppo io non ho una rete e non poso testarlo.

    Faccio un esempio:

    A file principale

    B file secondario.

    Cosa devo fare: con il file B aperto, aprire file A  (sul quale non so se ci stanno o meno lavorando), prendere  alcuni dati da A. 

    A questo punto vorrei chiudere A ma non so se interrompo l'elaborazione di qualcuno che stava gia lavorando in A.

    Il tuo Metodo chiude solo la mia istanza di A ? ovviamente a me lavorando con un PC mi trovo A chiuso.

    Poi proseguo in B con quello che devo fare.

    Ora, tardivemente, capisco il motivo per cui hai voluto evitare di aprire il file di interesse!

    Tuttavia, credo che tu possa stare tranquillo in quanto, potresti sempre aprire il file in modalità read-only e la chiasura della tua istanza del file non impedirà un altro eventuale utente.

    Se tu volessi stabilire se il file sia stato già aperto da un altro utente, posterò una funzione adatta ma, visto che vuoi solo leggere dati, non credo che sia necessario.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2018-03-13T11:30:14+00:00

    caro Norman

    prima di procedere volevo essere sicuro di questo fatto. Purtroppo io non ho una rete e non poso testarlo.

    Faccio un esempio:

    A file principale

    B file secondario.

    Cosa devo fare: con il file B aperto, aprire file A  (sul quale non so se ci stanno o meno lavorando), prendere  alcuni dati da A. 

    A questo punto vorrei chiudere A ma non so se interrompo l'elaborazione di qualcuno che stava gia lavorando in A.

    Il tuo Metodo chiude solo la mia istanza di A ? ovviamente a me lavorando con un PC mi trovo A chiuso.

    Poi proseguo in B con quello che devo fare.

    grazie per la collaborazione

    un caro saluto

    domenico

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2018-02-28T17:16:58+00:00

    Ciao Domenico,

    Grazie Norman

    problema risolto

    Mi fa piacere che tu abbia risolto il problema e ti ringrazio per il cortese riscontro.

    Per chiudere questo thread, vorrei chiederti gentilmente di contrassegnare la mia risposta come Risposta

    Alla prossima.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento