Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

crea gruppo autorizzati all'apertura del file

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

crea gruppo autorizzati all'apertura del file

Postdi matzap » 19/09/13 14:07

di nuovo ciao :)

ho questa macro che abbiamo creato in una altro post:
Private Sub Workbook_Open()
Foglio1.Select
If Application.username <> "MIO NOME" Then
Foglio1.Shapes.Range(Array("CommandButton1")).Visible = msoFalse
Foglio1.Shapes.Range(Array("CommandButton2")).Visible = msoFalse
Else
Foglio1.Shapes.Range(Array("CommandButton1")).Visible = msoTrue
' Foglio1.Shapes.Range(Array("CommandButton2")).Visible = msoTrue
End If
End Sub

oltre a MIO NOME, vorrei creare un gruppo di autorizzati.



la lista degli autorizzati pensavo di inserirla in una userform tipo questa:
http://rapidshare.com/share/74A9ABCEF5E ... 9B56CED21D
in ogni textbox c'è un nome e nella checkbox a fianco--> true=autorizzato, false= non autorizzato.

PRIMO PROBLEMA:
alla chiusura della Userform con il pulsante esci ( userform1.hide) i valori delle checkbox si resettano

SECONDO PROBLEMA:
per il controllo avevo pensato a questa macro, ma non funziona :( scusate per voi sarà uno scempio, ma sono un principiante!
Private Sub Workbook_Open()
amministratore = Application.username
For Each TextBox In UserForm1
If TextBox.Value = amministratore Then
Foglio1.Shapes.Range(Array("CommandButton1")).Visible = msoTrue
Foglio1.Shapes.Range(Array("CommandButton2")).Visible = msoTrue
Exit Sub
Else
Foglio1.Shapes.Range(Array("CommandButton1")).Visible = msoFalse
Foglio1.Shapes.Range(Array("CommandButton2")).Visible = msoFalse
End If
Next TextBox
End Sub

il testo aggiungi dovrebbe creare una nuova textbox e una nuova checkbox per inserire un nuovo nome,

TERZO PROBLEMA:
mentre riesco più o meno a crearli sul foglio, non riesco a crearli nella macro.

potete aiutarmi?
grazie
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Sponsor
 

Re: crea gruppo autorizzati all'apertura del file

Postdi Anthony47 » 20/09/13 00:33

Userai la form se vuoi popolare una lista con input da parte dell' utente; qui la lista la vuoi usare e basta...

Metti l' elenco nel codice; ad esempio (da usare all' interno della tua Workbook_Open):
Codice: Seleziona tutto
Dim UserList
UserList = Array("MIO NOME", "Suo Nome", "Altro Nome", "Quarto nome")    '<<< Elenco utenti autorizzati
If IsError(Application.Match(Application.UserName, UserList, 0)) Then
    'Istruzione per utente non autorizzato
Else
    'Istruzioni per utente autorizzato
End If
In questo modo, pero', se vuoi aggiornare l' elenco dovrai distribuire un nuovo file con una nuova macro.

Oppure metti l' elenco su un file in rete; poi nella Workbook_Open apri questo file, controlli se l' utente e' in lista, chiudi subito il file. In questo modo ti bastera' aggiornare quel file in rete; ma l' utente potra' essere riconosciuto come autorizzato solo se il pc e' in rete.

Vedi tu...
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: crea gruppo autorizzati all'apertura del file

Postdi matzap » 20/09/13 11:11

buongiorno Anthony,
effettivamente così funziona.

il file che ho creato però sarà usato per molto tempo, anche quando io ad esempio potrei fare un altro lavoro. cercavo però di creare una "interfaccia utente" che un responsabile potesse utilizzare per aggiungere o togliere autorizzati senza dover entrare nel codice.

l'ipotesi del file in rete è interessante ma rischiosa.
quella di inserire i nomi in una userform all'interno dello stesso file, mi sembrava migliore.

Tieni presente che le autorizzazioni non servono per rendere il file sicuro per lo spionaggio :lol: ma solo per evitare involontari problemi e variazioni e per rendere l'interfaccia utente generico più snella.

che ne pensi?
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: crea gruppo autorizzati all'apertura del file

Postdi Anthony47 » 20/09/13 13:14

Allora creati su un foglio di servizio, in una colonna di servizio, l' elenco degli utenti autorizzati; io ho usato Foglio2!A1:A100. Poi semplifichi il controllo in
Codice: Seleziona tutto
If IsError(Application.Match(Application.UserName, ThisWorkbook.Sheets("Foglio2").Range("A1:A100"), 0)) Then
    'Istruzione per utente non autorizzato
Else
    'Istruzioni per utente autorizzato
End If

Se poi per compilare l' elenco vuoi usare una form...

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: crea gruppo autorizzati all'apertura del file

Postdi matzap » 20/09/13 14:59

ok,
con la la lista nella userform mi sembrava + carino, però anche così va bene.

solo due piccoli aiuti:

1)come posso fare per dargli una istruzione del tipo:

"per ogni textbox della userfom"
ho provato con :
For Each xtextbox in userform1 ma non va bene

e anche con:
Dim c As Control
For Each c In c.Controls
' If TypeOf c Is TextBox Then

ma non funzionano
da considerare che la userform1 è chiusa.

2) fino a ieri, quando aprivo dal foglio il Vba mi si aprivano affinacate le finestre "gestione progetti" e "codice".
ora mi si aprono tutte sovrapposte e ogni volta devo sistemarle.
come posso fare?

ciao e grazie
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: crea gruppo autorizzati all'apertura del file

Postdi Anthony47 » 20/09/13 23:03

Scusa, non capisco il vantaggio di scrivere in una userform che poi compila una tabella in un foglio invece che direttamente sulla tabella (una delle prime cose che si impara a fare con excel)...

Comunque se vuoi ciclare tra i textbox di Userform1 puoi usare un ciclo come questo:
Codice: Seleziona tutto
Dim c As Control
For Each c In UserForm1.Controls
    If TypeName(c) = "TextBox" Then
        'Istruzioni per il textbox
    End If
Next c

Quanto all' incasinamento della finestra vba, potresti aver attivato "Sovrapponi finestre" (Menu /Finestre /Sovrapponi); in questo caso ti basta massimizzare una delle finestrelle che vedi e dovresti tornare a una visione decorosa.
Guarda anche cosa aveva scoperto papiriof in questa discussione: viewtopic.php?p=567258#p567752

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: crea gruppo autorizzati all'apertura del file

Postdi matzap » 23/09/13 14:13

Ciao Anthony,
la soluzione proposta va benissimo, la mia richiesta del codice per ciclare scaturisce dal fatto che quando provo a fare una cosa e non mi riesce, mi incuriosisco e cerco di capire dove sbaglio.....

la discussione di papiriof, mi è stata molto utile: anche a me macavano dei flag sull'ancoraggio.

ciao e grazie
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: crea gruppo autorizzati all'apertura del file

Postdi Anthony47 » 24/09/13 01:38

Probabilmente lo sbaglio e' che vuoi usare la userform per compilare un elenco, probabilmente l' elenco delgli utenti autorizzati. Ma la userform avra' bisogno di essere popolata da un elenco1 (tutti i possibili utenti, da poter poi marcare quelli autorizzati), e questo elenco1 deve esistere da qualche parte; dove vorresti che sia scritto, se non su un foglio excel?
Da questo elenco1 totale di utenti , tramite una userform vorresti creare un elenco2 filtrato, da scrivere in un altra area del foglio excel (per poterlo usare); io ti ho suggerito di compilare direttamente l' elenco2 filtrato, scrivendolo a mano.
Comunque se vuoi studiare questa interfaccia, per una futura applicazione, allora potresti lavorare con una userform con un solo Listbox a scelta multipla (MultiSelect=fmMultiSeectMulti), popolato con l' elenco1 (usando la proprieta' RowSource), le cui selezioni inserirai in Elenco2 (fai un ciclo For iI= 0 To ListBox1.ListCount - 1, dove sondi If ListBox1.Selected(I) e se True lo accodi all' Elenco2, inizialmente azzerao).
Sono tasselli che vanno montati opportunamente per creare tutte le opzioni richieste.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: crea gruppo autorizzati all'apertura del file

Postdi matzap » 24/09/13 12:08

Ciao Anthony,
sto giocando un pò con lelistbox ( non le ho mai usate)
ho creato una listbox con i nomi e poi questa macro:

Private Sub CommandButton1_Click()
a = ListBox1.ListCount
MsgBox (a)
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
Sheets("Foglio2").Select
ActiveSheet.Range("b1").End(xlDown).Offset(1, 0).Select
Selection = ListBox1.Selected(i)
End If
Next i
UserForm1.Hide
End Sub
l'unico problema che invece di accodarmi il testo selezionato, nella prima casella libera della colonna B mi scrive vero,

quando chiudo la userform è possibile salvare tutte le modifiche apportate a textbox, checkbox , listbox ecc?

Curiosità:
il codice
ActiveSheet.Range("b1").End(xlDown).Offset(1, 0).Select
seleziona la prima casella libera ma se b1 è vuota da errore, oltre a una istruzione if c'è un altro modo di ovviare al problema?

ciao e grazie
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: crea gruppo autorizzati all'apertura del file

Postdi Anthony47 » 24/09/13 14:50

Prova con
Codice: Seleziona tutto
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
  Sheets("Foglio2").Cells(rows.count,2).End(xlup).offset(1,0).Value =ListBox1.List(i)
'Sheets("Foglio2").Select
'ActiveSheet.Range("b1").End(xlDown).Offset(1, 0).Select
'Selection = ListBox1.Selected(i)
End If
Next i

quando chiudo la userform è possibile salvare tutte le modifiche apportate a textbox, checkbox , listbox ecc?
Che cosa, ad esempio, vorresti salvare?

il codice
ActiveSheet.Range("b1").End(xlDown).Offset(1, 0).Select
seleziona la prima casella libera ma se b1 è vuota da errore
Infatti io non controllo mai dall' alto in basso, ma da basso in alto (vedi il codice di prima); comunque basterebbe inserire in riga 1 una intestazione e il problema non succederebbe.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: crea gruppo autorizzati all'apertura del file

Postdi matzap » 24/09/13 15:50

si funziona, ma funziona anche con
Selection = ListBox1.List(i)


quello che vorre salvare nella userform è ad esempio il valore di checkbox impostato a true che prima era false. quando chiudo mi si resetta al valore impostato in proprietà.


fin'ora poi ho sempre inserito nella prima cella qualcosa per ovviare al problema.
seguirò il consiglio di partire dal basso.
ciao
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: crea gruppo autorizzati all'apertura del file

Postdi Anthony47 » 24/09/13 20:20

si funziona, ma funziona anche con
Selection = ListBox1.List(i)
Lungi da me l' idea che solo quello che suggerisco io funziona... In genere evito di selezionare un foglio per scriverci sopra, ma non e' proibito farlo; salvo che in quel modo si scrive anche su un foglio nascosto, il Select presuppone che sia visibile.

quello che vorre salvare nella userform è ad esempio il valore di checkbox impostato a true che prima era false
Avevamo lavorato con un listbox; traduco quindi la tua richiesta in "come faccio la prossima vota che attivo il listbox ad avere automaticamente selezionate le stesse righe che avevo manualmente selezionato la volta prima".
Per questo dovrai impostare a True la proprieta' "Selected" di ogni voce che avevi precedentemente selezionato e salvato su un foglio di lavoro; per questo e' importante che la struttura dati sia convenientemente disegnata.
Ad esempio puoi inserire accanto alla tua lista di utenti un Vero /Falso a seconda di come erano stati impostati nell' operazione precedente. Come farlo lo hai gia' imparato (vedi tuo messaggio precedente " nella prima casella libera della colonna B mi scrive VERO"), salvo che lo scriverai accanto alla lista con cui popoli il list box.
Il come RowSource ho usato Foglio6.Range("B1:B100").
Quindi il codice per salvare Vero/Falso e'
Codice: Seleziona tutto
For I = 0 To ListBox1.ListCount - 1
    Foglio6.Range("B1").Offset(I, 1).Value = ListBox1.Selected(I)
Next I

Userai questi Vero/Falso per impostare i vari Selected(I); ad esempio inserirai nella Sub UserForm_Activate il codice complementare a quello di sopra:
Codice: Seleziona tutto
For I = 0 To ListBox1.ListCount - 1
    ListBox1.Selected(I) = Foglio6.Range("B1").Offset(I, 1).Value
Next I

Ti fila il discorso?

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: crea gruppo autorizzati all'apertura del file

Postdi matzap » 26/09/13 14:10

non molto, anzi non ho proprio capito nulla!!! :cry:
dove devo inserire questi due cicli? e a che cosa servono?
la macro che uso è questa:

Private Sub CommandButton1_Click()
a = ListBox1.ListCount
MsgBox (a)
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
Sheets("Foglio2").Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Value = ListBox1.List(i)
End If
Next i
UserForm1.Hide
End Sub

Quello che ho capito è:

Su foglio2 nella colonna A ho una lista di nomi, sulla colonna B aggiungo vero o falso.
la listbox della userform contine su ogni riga il nome e vero o falso.
ma questo a cosa serve?

La mia domanda era un'altra:

ho un checkbox imposta di default a false, clicco nella casella e la imposto a true. chiuda la userfom e la riapro e mi trovo di nuovo su false. come faccio per evitare questo reset?
vorrei che riaprendola mi la trovassi su true.
viceversa se fosse su true e la impostassi su false, chiudendo e riaprenod la userform la ritrovassi su false.
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: crea gruppo autorizzati all'apertura del file

Postdi Anthony47 » 27/09/13 01:24

Gli sviluppi vanno supportati da una struttura dati simbiotica con quanto si vuole realizzare.

Anche se continui a dire che vuoi mantenere il valore di checkbox che non esistono (stiamo usando una ListBox, vero?) il tuo obiettivo (credo di capire) sia mantenere le scelte gia' fatte nella sessione precedente.
Quei Vero /Falso rappresentano le scelte fatte precedentemente, e vengono usati dal codice che ho suggerito di inserire nella Sub UserForm_Activate proprio per pre-selezionare all' interno della lista presente nel Listbox gli utenti scelti precedentemente.

Ragionevolmente metti i Vero /Falso accanto all' elenco completo; questo potrebbe comportare che l' elenco dei soli autorizzati (sempre che si voglia creare, e non si voglia usare l' elenco completo con i Vero/Falso a fare da discriminante) debba essere spostato perche' il loro posto e' occupato dai Vero /Falso.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: crea gruppo autorizzati all'apertura del file

Postdi matzap » 30/09/13 10:57

Buongiorno Anthony,
usando i codici che mi hai suggerito sono riuscito ad avere le stesse selezioni nella textbox all'apertura della userform.
le copia in foglio2 alla chiusura e le riprende alla successiva apertura.

Tuttavia se rileggi li problemi che avevo elencato quando ho aperto il post, il secondo problema era quello di fare in modo che all'apertura di una userform il valore di un checkbox fosse l'ultimo che avevo selezionato precedentemente.

il terzo problema era quello di creare una textbox e una check box all'interno della userfom.

Anche se con i consigli che tu mia hai dato per questa specifica applicazione questi codici non mi servono più, mi saranno sicuramente utili per future applicazioni.

Se ritieni che dabba aprire un post specifico posso farlo.
Per ora grazie
Buona giornata
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: crea gruppo autorizzati all'apertura del file

Postdi Anthony47 » 01/10/13 03:30

Al momento, cioe' per questo livello di dettaglio, non c' e' bisogno di una nuova discussione.
Comunque l' approccio e' sempre lo stesso: memorizzi da qualche parte il valore "precedente", e all' attivazione della userform popoli i controlli che vuoi con quel valore.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: crea gruppo autorizzati all'apertura del file

Postdi matzap » 01/10/13 07:56

ok grazie,
pensavo ci fosse un modo per non passare per o fogli.

per l atextbox nella userform sto provando con:
UserForm1.AddTextbox(msoTextOrientationHorizontal, 100, 100, 200, 50).TextFrame.Characters.text = "OK"

ma non va.

buona giornata
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: crea gruppo autorizzati all'apertura del file

Postdi Anthony47 » 01/10/13 15:02

Non e' obbligatorio passare per un foglio; puoi anche memorizzare in un file txt o in un' altra struttura dati, ma da qualche parte devi salvare.

Quell' istruzione che non va non lavora su userform, ma su una forma del worksheet.

Mi pare che tu stia cercando di creare tanti textbox quante sono le voci da inserire; puoi fare cio' inserendo i textbox che servono in fase di UserForm_Initialize; ad esempio con questo codice da associare alla form:
Codice: Seleziona tutto
Private Sub UserForm_Initialize()
For I = 1 To 10
   With Me.Controls.Add("Forms.TextBox.1")
        .Width = 150
        .Height = 20
        .Top = 20 + I * 25
        .Left = 20
   End With
Next I
Me.Height = 80 + I * 25
End Sub
Nota che i textbox non vengono salvati, ma questo e' meglio perche' puoi lavorare sempre in base al numero assoluto di textbox che vuoi inserire e non come delta rispetto a quanti ce ne sono gia' presenti.

Volendo invece salvare la nuova struttura della userform, si puo' fare prima di aprire la userform, usando la proprieta' "Designer" sull' Insieme VBComponents del VBProject corrente; ma e' tecnicamente un po' piu' complesso e, nella tua situazione, funzionalmente peggiorativa.

Ma se il tuo obiettivo e' sempre consentire la gestione di una lista di utenti, la soluzione piu' semplice e' che lavori col listbox; avrai notato che nell' impostazione MultiSelect = fmMultiSelectMulti e ListStype = fmListStyleOption l' elenco viene gia' visualizzato con un checkbox adiacente per consentirne la selezione. Mi pare che sia questo l' effetto scenico che vorresti realizzare. Con un unico controllo (il listbox).

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: crea gruppo autorizzati all'apertura del file

Postdi matzap » 01/10/13 15:31

veramente la proprietà
ListStype = fmListStyleOption
non l'avevo vista :o


la macro che mi hai fornito dato che non salva non mi è molto utile però ho tutto quello che mi serve.

Grazie e a alla prossima :D
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: crea gruppo autorizzati all'apertura del file

Postdi Anthony47 » 02/10/13 01:02

veramente la proprietà ListStype = fmListStyleOption non l'avevo vista :o
Credevo di avertela gia' citata parlando del MultiSelect, ma mi sbagliavo.

la macro che mi hai fornito dato che non salva non mi è molto utile però ho tutto quello che mi serve
Mi permetto di continuare a pensare che e' piu' sfruttabile perche' non salva che se invece salvasse; perche' e' molto piu' semplice creare e gestire 18 textbox per inserire 18 nominativi, piuttosto che aggiungerne 3 a una form che ne avesse gia' 15 e dover gestire sempre l' elenco completo di 18 nominativi. Questo nel contesto di questa discussione, cioe' la validazione di un elenco di nominativi.

Alla prossima, comunque.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "crea gruppo autorizzati all'apertura del file":


Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti