Condividi tramite

Problema visualizzazione fogli dopo uso macro con Excel

Anonimo
2016-05-26T15:36:19+00:00

Buongiorno a tutti.

Ho creato una macro che cerca un determinato record in un foglio che fa da database, ne trasferisce i contenuti in un secondo foglio che fa da pannello di modifica per l'utente, nasconde il foglio database e mostra il pannello di modifica per l'utente.

Entrambi i fogli sono protetti e la macro effettua la rimozione della protezione e ripristina la protezione come prima.

La macro funziona correttamente, ma quando la macro cessa e l'utente si trova di fronte il pannello di modifica:

  1. questo non è modificabile come se tutte le celle fossero protette (a volte), mentre invece alcune non sono protette perché devono essere modificate, appunto, dall'utente;
  2. oppure lo si modifica ma in realtà i dati non sono presenti in quella cella e in quel foglio ma altrove (altre volte), su un altro foglio della stessa cartella;
  3. oppure più banalmente muovendo lo scoll o la rotella del mouse la schermata resta ferma, salvo poi scoprire che lo scroll o la rotella del mouse hanno agito su un altro foglio (altre volte ancora).

In buona sostanza è come se quello che si vede è il pannello di modifica utente, ma in realtà si agisce su un altro foglio (che il più delle volte è quello di provenienza).

E' un problema che mi si è presentato in un altro caso, ma allora non ci avevo dato peso visto che l'utente doveva solo visualizzare il contenuto senza dover interagire con esso.

Non ho trovato in rete niente di simile. La cosa più pertinente che ho trovato pare che affermi che il foglio è corrotto (mi piacerebbe sapere perché e da cosa) e che deve essere ripristinato (come si fa?).

La mia versione di Excel è di un Office Pro 2013.

Altre idee?

Ringrazio tutti per l'attenzione.

-Simone-

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

19 risposte

Ordina per: Più utili
  1. Anonimo
    2016-05-30T11:06:06+00:00

    Ho fatto altri test...

    In pratica sembra che Excel digerisca male che una macro venga lanciata su un foglio e atterri su un altro.

    Ho provato a spostare il codice che avevo creato e associato al pulsante del form in una macro di un generico modulo. A questo punto il codice si esegue senza problemi.

    Se però faccio sì che sia il form a richiamare la macro, il problema c'è lo stesso.

    Non conosco VBA a sufficienza per un aspetto simile: è possibile quindi che un form aperto in foglio e le cui macro associate "partono" dallo stesso foglio, possano creare problemi una volta che la macro trasferisca, interagisca ed infine porti l'utente a visualizzare un altro foglio ancora?

    C'è un modo per far sì che un form sia di dominio di tutto la cartella senza che si creino problemi?

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2016-05-27T07:43:39+00:00

    Sono più che sicuro che correggere un codice di qualcun altro è molto più complesso che scrivere da capo un proprio codice. Perciò, invece che cercare di capire cosa fa la mia applicazione, forse potrebbe essere più semplice che chiedessi:

    1. se volessi scrivere una macro che passa da un foglio ad un altro,
    2. nascondendo il foglio di provenienza e scoprendo quello di destinazione (che prima dell'avvio della macro non si vede)
    3. se volessi che terminata la macro l'utenza non possa scoprire i foglio nascosti ne togliere la protezione dai fogli stessi
    4. e volessi che la macro scrivesse alcuni dati nel foglio di destinazione, il quale foglio poi deve avere delle celle sbloccate che devono poter essere compilate dall'utente...

    Che codice scriveresti?

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-05-27T07:07:58+00:00

    Excel ha solo alcune funzionalità di database e solo sulle tabelle che puoi avere sui fogli.

    Quindi, sarebbe corretto dire che hai una tabella dati su un foglio.... ;-)

    Capito poco del tuo codice. Mancano tutte le proprietà, ci sono molte ripetizioni che un semplice With eviterebbe, non utilizzi gli oggetti. Troppa confusione e troppi pochi dati (per me, eh).

    Mi dispiace, ma così non riesco (non riesco io, eh) ad aiutarti.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2016-05-26T17:14:42+00:00

    Grazie Mauro, ho letto velocemente cosa proponi, ma non volevo trattare il tutto con un form dato che attualmente non ho competenza per gestire una DB su un userform.

    Perciò ora sto operando con 2 fogli excel classici a cui ho dato "aspetti" differenti:

    Questo è il foglio database (foglio: Anno Corrente)da cui l'app deve, una volta che l'utente ha specificato il numero del progetto, prelevare i dati del record:

    Mentre questo è il pannello di modifica dei dati (foglio: PROGETTO DETTAGLIO) da parte dell'utente (le caselle rosa dovrebbero restare sbloccate una volta che il foglio è protetto):

    E questa è la app che legge il numero del progetto che l'utente inserisce e ne copia i valori nei campi del pannello (togliendo e rimettendo le password al pannello).

    Private Sub UPDT_Click()

    Workbooks("CRUSCOTTO 300004.xlsm").Unprotect password:="simo7466"

    Workbooks("CRUSCOTTO 300004.xlsm").Worksheets("PROGETTO DETTAGLIO").Unprotect password:="simo7466"

    HOTJOBS.Hide

    Worksheets("PROGETTO DETTAGLIO").Cells(4, 3) = ""

    Worksheets("PROGETTO DETTAGLIO").Cells(4, 5) = ""

    Worksheets("PROGETTO DETTAGLIO").Cells(4, 7) = ""

    Worksheets("PROGETTO DETTAGLIO").Cells(4, 10) = ""

    Worksheets("PROGETTO DETTAGLIO").Cells(6, 3) = ""

    Worksheets("PROGETTO DETTAGLIO").Cells(6, 10) = ""

    Worksheets("PROGETTO DETTAGLIO").Cells(8, 3) = ""

    Worksheets("PROGETTO DETTAGLIO").Cells(8, 10) = ""

    Worksheets("PROGETTO DETTAGLIO").Cells(10, 3) = ""

    Worksheets("PROGETTO DETTAGLIO").Cells(10, 10) = ""

    Worksheets("PROGETTO DETTAGLIO").Cells(12, 3) = ""

    Worksheets("PROGETTO DETTAGLIO").Cells(18, 3) = ""

    Worksheets("PROGETTO DETTAGLIO").Cells(20, 3) = ""

    Worksheets("PROGETTO DETTAGLIO").Cells(20, 7) = ""

    Worksheets("PROGETTO DETTAGLIO").Cells(22, 3) = ""

    row1 = 4

    Do

    counter = 0

    project = InputBox("Specificare il numero seriale del progetto.")

    Do

    If Len(project) = 0 Then

    counter = 1

    Else

    If Workbooks("CRUSCOTTO 300004.xlsm").ActiveSheet.Cells(row1, 2) = project Then

    Workbooks("CRUSCOTTO 300004.xlsm").Worksheets("PROGETTO DETTAGLIO").Visible = True

    Workbooks("CRUSCOTTO 300004.xlsm").Worksheets("PROGETTO DETTAGLIO").Select

    Range("A1:K1").Select

    ActiveWindow.Zoom = True

    Workbooks("CRUSCOTTO 300004.xlsm").Worksheets("PROGETTO DETTAGLIO").Range("J4").Select

    'Workbooks("CRUSCOTTO 300004.xlsm").Worksheets("Anno Corrente").Visible = False

    'Workbooks("CRUSCOTTO 300004.xlsm").Worksheets("Anno precedente").Visible = False

    'In questo caso il progetto viene individuato e si passa alla schermata di modifica

    counter = 1

    Worksheets("PROGETTO DETTAGLIO").Cells(4, 3) = Worksheets("Anno Corrente").Cells(row1, 2)

    Worksheets("PROGETTO DETTAGLIO").Cells(4, 5) = Worksheets("Anno Corrente").Cells(row1, 1)

    Worksheets("PROGETTO DETTAGLIO").Cells(4, 7) = Worksheets("Anno Corrente").Cells(row1, 6)

    Worksheets("PROGETTO DETTAGLIO").Cells(4, 10) = Worksheets("Anno Corrente").Cells(row1, 4)

    Worksheets("PROGETTO DETTAGLIO").Cells(6, 3) = Worksheets("Anno Corrente").Cells(row1, 3)

    Worksheets("PROGETTO DETTAGLIO").Cells(6, 10) = Worksheets("Anno Corrente").Cells(row1, 5)

    Worksheets("PROGETTO DETTAGLIO").Cells(8, 3) = Worksheets("Anno Corrente").Cells(row1, 7)

    Worksheets("PROGETTO DETTAGLIO").Cells(8, 10) = Worksheets("Anno Corrente").Cells(row1, 8)

    Worksheets("PROGETTO DETTAGLIO").Cells(10, 3) = Worksheets("Anno Corrente").Cells(row1, 9)

    Worksheets("PROGETTO DETTAGLIO").Cells(10, 10) = Worksheets("Anno Corrente").Cells(row1, 10)

    Worksheets("PROGETTO DETTAGLIO").Cells(12, 3) = Worksheets("Anno Corrente").Cells(row1, 11)

    Worksheets("PROGETTO DETTAGLIO").Cells(20, 3) = Worksheets("Anno Corrente").Cells(row1, 12)

    Worksheets("PROGETTO DETTAGLIO").Cells(20, 7) = Worksheets("Anno Corrente").Cells(row1, 13)

    Else

    End If

    End If

    row1 = row1 + 1

    Loop Until counter = 1 Or Workbooks("CRUSCOTTO 300004.xlsm").ActiveSheet.Cells(row1, 2) = ""

    If Workbooks("CRUSCOTTO 300004.xlsm").ActiveSheet.Cells(row1, 2) = "" And counter = 0 Then

    MsgBox "Non esiste un progetto con il codice specificato. Verificare e riprovare."

    Else

    End If

    Loop Until counter = 1

    Workbooks("CRUSCOTTO 300004.xlsm").Worksheets("PROGETTO DETTAGLIO").Protect password:="simo7466"

    Workbooks("CRUSCOTTO 300004.xlsm").Protect password:="simo7466"

    End Sub

    La macro viene lanciata da un userform che si apre quando l'utente clicca il pulsante menu nel foglio database.

    Il problema è che quando poi la macro termina e l'utente visualizza il foglio PROGETTO DETTAGLIO, le celle rosa sono (inspiegabilmente) non modificabili. Il cursore stesso si muove tra le celle e ha la stessa reazione che avrebbe come se fosse rimasto sul foglio Anno Corrente.

    Contestualmente a questo, capita che la scroll bar o la rotella del mouse non funzionino e che il foglio presenti dei problemi di salvataggio in fase di chiusura (anziché fare un salva normale chiede un salva con nome); e in fasi di successiva riapertura presenta problemi.

    Grazie per l'attenzione e il tempo dedicato.

    Attendo un suggerimento! :)

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2016-05-26T15:48:34+00:00

    Senza vedere il file (e il codice), difficile rispondere.

    Probabilmente non gestisci bene gli oggetti.

    Intanto vedi qui dove la gestione del foglio che funge da repository dei dati viene gestito da una UserForm:

    La risposta è stata utile?

    0 commenti Nessun commento