Condividi tramite

Data entry in Excel

Anonimo
2018-12-19T19:39:31+00:00

Buongiorno a tutti. Sono nuovo nella community scusate quindi per eventuali errori di procedura.

Ho creato un sistema di inserimento dati o meglio lo sto creando, ma ho un problema e non so neanche se Excel permette di fare quello che ho bisogno.

In una cartella ho creato un foglio per inserimento dati che attivando una macro li trasferisce in un altro file contenitore, praticamente il data-base.

Funziona il tutto solo se il file ricevente resta aperto (e fin qui non è un problema), ma il file deve trovarsi nello stesso PC, mentre io l'ho bisogno su un altro pc. Infatti da quello che ho capito della macro (non conosco VBA) la macro va a cercare la FINESTRA, non il file. Infatti il nome del comando è "windows ......"

Quindi la mia domanda è:

è possibile creare un semplice data entry multiutenza in excel dove i dati sono inseriti da più pc e finiscono un un database in un altro pc server?

No eh?

Grzie!

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

31 risposte

Ordina per: Più utili
  1. Anonimo
    2019-01-11T16:47:44+00:00

    Ciao,

    per verificare se un file excel (che non sia condiviso) è aperto potresti utilizzare questa Function (di Chip Pearson):

    Public Function IsFileOpen(FileName As String) As Boolean

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    ' IsFileOpen

    ' By Chip Pearson www.cpearson.com/excel ******@cpearson.com

    ' This function determines whether a file is open by any program. Returns TRUE or FALSE

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

      Dim FileNum As Long

      Dim ErrNum As Long

      On Error Resume Next   ' Turn error checking off.

      '''''''''''''''''''''''''''''''''''''''''''

      ' If we were passed in an empty string,

      ' there is no file to test so return FALSE.

      '''''''''''''''''''''''''''''''''''''''''''

      If FileName = vbNullString Then

          IsFileOpen = False

          Exit Function

      End If

      '''''''''''''''''''''''''''''''

      ' If the file doesn't exist,

      ' it isn't open so get out now.

      '''''''''''''''''''''''''''''''

      If Dir(FileName) = vbNullString Then

          IsFileOpen = False

          Exit Function

      End If

      ''''''''''''''''''''''''''

      ' Get a free file number.

      ''''''''''''''''''''''''''

      FileNum = FreeFile()

      '''''''''''''''''''''''''''

      ' Attempt to open the file

      ' and lock it.

      '''''''''''''''''''''''''''

      Err.Clear

      Open FileName For Input Lock Read As #FileNum

      ''''''''''''''''''''''''''''''''''''''

      ' Save the error number that occurred.

      ''''''''''''''''''''''''''''''''''''''

      ErrNum = Err.Number

      On Error GoTo 0      ' Turn error checking back on.

      Close #FileNum       ' Close the file.

      ''''''''''''''''''''''''''''''''''''

      ' Check to see which error occurred.

      ''''''''''''''''''''''''''''''''''''

      Select Case ErrNum

        Case 0

        '''''''''''''''''''''''''''''''''''''''''''

        ' No error occurred.

        ' File is NOT already open by another user.

        '''''''''''''''''''''''''''''''''''''''''''

            IsFileOpen = False

        Case 70

        '''''''''''''''''''''''''''''''''''''''''''

        ' Error number for "Permission Denied."

        ' File is already opened by another user.

        '''''''''''''''''''''''''''''''''''''''''''

            IsFileOpen = True

        Case Else

        '''''''''''''''''''''''''''''''''''''''''''

        ' Another error occurred. Assume the file

        ' cannot be accessed.

        '''''''''''''''''''''''''''''''''''''''''''

            IsFileOpen = True

      End Select

    End Function

    FileName è rappresentato dal "FullName" (quindi compreso il percorso dove si trova il file e il nome del file, compresa l'estensione).

    Es.  D:\Test\Cartel1.xlsx

    Poi le soluzioni da adottare possone essere differenti e a gusto.

    Ad es. all'apertura del file di "data entry" potresti, prima di aprire il file database, verificare se il file è aperto e se lo è avvisare l'utente che non è possibile operare e chiudere il file di "data entry".

    Potresti comunque mantenere i file data entry aperto ma non consentire di far partire la procedura che memorizza i dati (sempre lanciando un avviso che il file database è temporaneamente utilizzato da altri e che occorre attendere).

    Potresti lanciare un "loop" che per un certo tempo cerchi di aprire il file fino a che non diventa "disponibile", magari interrompendosi dopo che sia trascorso un tot di tempo in maniera automatica e avvisando che non è stato possibile aprire il database.

    Dipende da quale è la tua preferenza in base alle tue esigenze.

    2 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2018-12-20T16:09:52+00:00

    Ciao,

    il file che fa da "data base" potresti aprirlo da qualsiasi postazione.

    Poi l'importante è che venga salvato, anche copiandolo, in una postazione condivisa a tutti gli altri pc e che le cartelle di lavoro utilizzate come "data entry" vadano a "puntare" quel file salvato nel "percorso di rete", aprendolo (quindi in fase di apertura dovrà indicare il percorso dove è salvato il file) inserendo i dati, salvandolo e chiudendolo in base alle necessità.

    In pratica con la cartella di lavoro che fa da "data entry" potresti impostare che, all'apertura del "data entry", il file che fa da "data base" venga aperto, prima di ogni inserimento dei dati esegui un salvataggio, inserisci i dati ed esegui esegui immediatamente dopo l'inserimento dati un ulteriore salvataggio.

    Alla chiusura della cartella "data entry" chiudi il file aperto in quella postazione.

    La successione "salvataggio-inserimento dati-salvataggio" dovrebbe ridurre al minimo i possibili casi di inserimenti nella medesima riga del "data base" da parte di più utenti (con possibile conflitto).

    Però se si volesse scongiurare al massimo questa evenienza il file che fa da "data base" dovrebbe essere salvato come "non condiviso" e prevedere una procedura che verifichi se è già aperto e nel caso avvisare gli utenti che stanno tentando l'accesso che il file è già in uso da un altro utente e che al momento non è disponibile per l'inserimento dei dati.

    Ma non so se sarebbe una cosa praticabile e comoda in base alle tue esigenze.

    0 commenti Nessun commento
  3. Anonimo
    2018-12-20T15:29:40+00:00

    E' possibile.

    Occorre però fare riferiemento a Workbooks("nomecartelladilavoro.xlsx") la quale deve essere aperta dal pc da cui si opera.

    Se si volesse utilizzare quella cartella di lavoro da più pc contemporaneamente occorrerebbe che la stessa fosse salvata come cartella di lavoro condivisa.

    E andrebbero utilizzate delle accortezze perché ad es. più utenti non inseriscano nella medesima riga i propri dati avendo quindi dei "conflitti" tra modifiche di più utenti.

    Ad es. salvare il file immediatamente prima di intercettare l'ultima riga disponibile e salvare il file immediatamente dopo aver inserito i dati.

    Scusami casanmaner sto cercando di applicare ciò che hai detto alle mie esigenze perchè il tuo aiuto mi è molto prezioso. 

    Allora io potrei operare nel server, aprire nel server la cartella di riferimento (il database se ho capito bene)  e operare dal server.

    Rendo condivisa la cartella e faccio utilizzare la cartella da altri pc.

    Poi il fatto che nessuno operi dal server, ma tutti da altri pc non è un problema no?

    0 commenti Nessun commento
  4. Anonimo
    2018-12-20T15:17:11+00:00

    E' possibile.

    Occorre però fare riferiemento a Workbooks("nomecartelladilavoro.xlsx") la quale deve essere aperta dal pc da cui si opera.

    Se si volesse utilizzare quella cartella di lavoro da più pc contemporaneamente occorrerebbe che la stessa fosse salvata come cartella di lavoro condivisa.

    E andrebbero utilizzate delle accortezze perché ad es. più utenti non inseriscano nella medesima riga i propri dati avendo quindi dei "conflitti" tra modifiche di più utenti.

    Ad es. salvare il file immediatamente prima di intercettare l'ultima riga disponibile e salvare il file immediatamente dopo aver inserito i dati.

    Grazie mille Casanmaner. Questo mi dà speranze. Però devo capire bene la tua risposta perchè non sono un esperto di VBA.  Ci devo lavorare.  Però prima volevo chiederti una cosa fondamentale, mi preoccupa il fatto che la cartella di riferimento deve essere aperta nel pc da cui si opera. Infatti che resti aperta non è un problema, ma ho necessità che l'operatore che inserisce i dati NON VEDA e NON POSSA TOCCARE il file contenitore, il database in sostanza.  

    Praticamente il file database dovrebbe rimanere aperto nel server, che è sempre acceso, mentre i vari file di inserimento dati nei vari pc.

    Spero di non pretendere troppo, ma purtroppo questa è l'esigenza.

    Grazie ancora!

    0 commenti Nessun commento
  5. Anonimo
    2018-12-20T08:21:20+00:00

    E' possibile.

    Occorre però fare riferiemento a Workbooks("nomecartelladilavoro.xlsx") la quale deve essere aperta dal pc da cui si opera.

    Se si volesse utilizzare quella cartella di lavoro da più pc contemporaneamente occorrerebbe che la stessa fosse salvata come cartella di lavoro condivisa.

    E andrebbero utilizzate delle accortezze perché ad es. più utenti non inseriscano nella medesima riga i propri dati avendo quindi dei "conflitti" tra modifiche di più utenti.

    Ad es. salvare il file immediatamente prima di intercettare l'ultima riga disponibile e salvare il file immediatamente dopo aver inserito i dati.

    0 commenti Nessun commento