Condividi:        

Copiare verso il basso riferimento caselle di controllo

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

Copiare verso il basso riferimento caselle di controllo

Postdi lobelis » 20/07/07 11:30

Ciao a tutti, qualcuno può aiutarmi a risolvere questo problema, che al momento mi ha bloccato sun un lavoro che stavo per finire?
Sulla cella b1 ho inserito una casella di controllo collegata alla cella a1. Il problema è che devo inserire un migliaio di caselle di controllo...ma come faccio ad aggiornare il formato di controllo? Cioè come faccio a fare in modo che la casella di controllo sulla cella b521 sia collegata alla cella a521? Copiando le celle verso il basso non si aggiorna il riferimento.

Fin'ora l'ho fatto manualmente, ma mille sono decisamente troppe.
Ringrazio tutti coloro che mi aiuteranno
lobelis
Utente Junior
 
Post: 11
Iscritto il: 16/06/06 08:05

Sponsor
 

Postdi Anthony47 » 20/07/07 22:58

Mille caselle di controllo???

Io farei delle finte caselle di controllo tramite un bordo sulle caselle B1:B1000 (per esempio); poi con una macro commuterei il valore della stessa cella tra 1 e 0 (alternativamente) tutte le volte che la seleziono; volendo posso “visualizzare” il segno di “spuntato” tramite la seguente formattazione:
-tipo di carattere: webdings
-Formato /Celle, tab Numero, categoria Personalizzato, come Tipo digiti “[Nero]"a";0.0##;"-";_(@_)” (senza le virgolette
(se invece vuoi visualizzare X, come font metti uno standard e come Tipo userai “[Nero]"X";0.0##;"-";_(@_)”)
La macro che fa cio’ e la seguente:
Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
CheckArea = "B1:B1000"              '<<<<< Vedi nota
If Not Application.Intersect(ActiveCell, Range(CheckArea)) Is Nothing Then
Application.EnableEvents = False
  If Selection.Value <> 0 Then
  Selection.ClearContents
  Else: Selection.Value = 1
  End If
ActiveCell.Offset(0, 1).Select
End If
Application.EnableEvents = True
End Sub


Nota: modifica l’ istruzione marcata <<<< a seconda di quale e’ l’ area utilizzata dai finti checkboxes.
Va inserita sul "foglio" su cui lavori: tasto dx sul tab del nome foglio, scegli "visualizza codice, incolli le istruzioni sul frame vuoto di dx (se non fosse vuoto, controlla che non esista gia' una macro intitolata Sub Worksheet_SelectionChange).


Se proprio vuoi procedere con i chek box, allora io li compilerei con una macro. Esempio questa:
Codice: Seleziona tutto
Sub CboxMaker()
I = 1
For Each cbcell In Range("B1:B10")    '<<<<< Area in cui inserire Check Box
cbcell.select
plotx = Selection.left
ploty = Selection.top
Activesheet.Checkboxes.Add(plotx, ploty, 60, 18).Select
With Selection
        .Value = xloff
        .Linkedcell = Activecell.Offset(0, -1).Address
        .Display3Dshading = False
        .Characters.Text = "CB-" & I
End With
I = I + 1
Next cbcell
End Sub


(modificare l’ istruzione <<<< con l’ effettivo range che si vuole riempire con check box).
La macro compila ogni cella del range definito con un checkbox a cui assegna il nome CB-n (CB-1, CB-2, etc; eventualmente modifica l' istruzione .Text) e a cui associa come cella di controllo quella adiacente a sx (il che comporta che il range dei checkbox non puo’ essere in colonna A; non con queste istruzioni).

Se vuoi eliminare TUTTI i check box da un foglio che gia’ hai compilato, allora potresti usare questa macro, DOPO AVER FATTO un paio di copie di backup del tuo file:
Codice: Seleziona tutto
Sub CBCancel()
'
ZZ = Activesheet.Shapes.Count

'For I = 1 To Activesheet.Shapes.Count
For I = 1 To 500

On Error GoTo Skip
Activesheet.Shapes(I).Select
'AZZ = Selection.Name
'aaa = Selection.Topleftcell.Address
If (Left(Selection.Name, 9) = "Check Box") Then Selection.Delete

Procedi:
Next I
Exit Sub


Skip:
Resume Procedi
End Sub

Questa non e’ assolutamente ottimizzata (vedi le tante righe commentate), e potrebbe essere necessario lanciarla piu’ volte per eliminare tutti i checkbox (ma non le relative celle di controllo, che possono essere cancellate col comando Cancella).

Dovresti avere sufficienti elementi su cui lavorare; o no?
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Anthony47 » 20/07/07 23:01

Ho selezionato in modo errato le istruzioni dell' utima macro, che ovviamente sono:

Codice: Seleziona tutto
Sub CBCancel()
'
ZZ = Activesheet.Shapes.Count

'For I = 1 To Activesheet.Shapes.Count
For I = 1 To 500

On Error GoTo Skip
Activesheet.Shapes(I).Select
'AZZ = Selection.Name
'aaa = Selection.Topleftcell.Address
If (Left(Selection.Name, 9) = "Check Box") Then Selection.Delete

Procedi:
Next I
Exit Sub


Skip:
Resume Procedi
End Sub


Ri-ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi lobelis » 30/07/07 10:18

Grazie mille, fra le varie opzioni di scelta che mi hai dato è andata benissimo la prima, quella delle finte caselle di controllo.
Ho già concluso il lavoro, rimasto bloccato a causa di questo inconveniente.
Grazie ancora per la tua disponibilità.

Scusa per il ritardo, ma sono rientrato ieri dalle ferie
lobelis
Utente Junior
 
Post: 11
Iscritto il: 16/06/06 08:05

Postdi lobelis » 01/08/07 09:16

Ciao, scusami se approfitto ancora della tua gentilezza.
La macro delle false caselle di controllo che mi hai consigliato va benissimo...
però è sorto un problema.
Come faccio a deselezionare le caselle? Capita a volte che su un elenco di 1000 righe ne ho selezionate 100 e deselezionarle una alla volta, cercandole nelle varie righe, diventa un pò faticoso.
Non si potrebbe creare un'altra macro che avviandola riporta tutte le caselle allo stato iniziale, e cioè senza segno di spunta.
Ti ringrazio moltissimo per la tua disponibilità
lobelis
Utente Junior
 
Post: 11
Iscritto il: 16/06/06 08:05

Postdi Anthony47 » 01/08/07 14:52

Puoi utilizzare il comando Cancella (selezioni le caselle, Modifica /Cancella); oppure dovrebbe andare bene la seguente macro:
Codice: Seleziona tutto
Sub CBClear()
CheckArea = "B1:B1000"              '<<<<< Vedi nota
scelta = MsgBox(Prompt:="Vuoi azzerare TUTTE le caselle ?", Buttons:=vbYesNo)
If scelta = 7 Then Exit Sub    '6 = SI; 7=No
Range(CheckArea).ClearContents
End Sub


Ovviamente per CheckArea devi dare le giuste coordinate.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi lobelis » 01/08/07 15:41

Purtoppo selezionando le righe manualmente e usando il tasto canc, non so perchè non mi funziona più la macro (la prima che mi avevi creato).
Comunque usando la tua nuova macro è tutto risolto.
Grazie ancora
Ciao
Alla prossima
lobelis
Utente Junior
 
Post: 11
Iscritto il: 16/06/06 08:05

Postdi Anthony47 » 01/08/07 16:25

lobelis ha scritto:Purtoppo selezionando le righe manualmente e usando il tasto canc, non so perchè non mi funziona più la macro

Eh gia'. La macro va in debug in caso di selezione multipla, e rimane in stato Application.EnableEvents = False.
Per sicurezza, anche se ora ti funziona, aggiungi la seguente riga prima di Application.EnableEvents = False

Codice: Seleziona tutto
If (Selection.Rows.Count + Selection.Columns.Count) > 2 Then Exit Sub


Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi lobelis » 02/08/07 09:40

Ok! Lo faccio subito
Grazie ancora
Ciao
lobelis
Utente Junior
 
Post: 11
Iscritto il: 16/06/06 08:05


Torna a Applicazioni Office Windows


Topic correlati a "Copiare verso il basso riferimento caselle di controllo":


Chi c’è in linea

Visitano il forum: Nessuno e 65 ospiti

cron