Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Messaggio "Attendere, prego ...."

289 views
Skip to first unread message

kar

unread,
Jun 6, 2011, 6:04:27 PM6/6/11
to
Salve a tutti.
Ho una maschera che funge da menu/inserimento dati.
Quando clicco sul pulsante eseguo una serie di

Sheets("Maschera_ins").Select
....
Sheets("Agenda").Select

Ma e' possibile non visualizzare il foglio "Agenda" quando lo
seleziono e rimanere (visivamente) sul foglio "Maschera_ins" ?

E, poiche' alcune operazioni sono lunghette, e' possibile avere sulla
"Maschera_ins" una finestra un po' ORIGINALE del tipo "Attendere,
prego ....." ?

Grazie

Mauro Gamberini

unread,
Jun 7, 2011, 4:03:44 AM6/7/11
to
"kar" ha scritto nel messaggio
news:da56b6c8-f213-44aa...@gv8g2000vbb.googlegroups.com...

Grazie

************************************

Io partirei da:
ma sono proprio necessari quei Select?

Che operazioni svolgi su quei fogli per doverli selezionare?
Lo sai che vb non ha bisogno che il foglio sia selezionato?

Due semplici macro che *lavorano* sul
Foglio2 qualunque sia il foglio selezionato.
La prima ti consente di continuare ad utilizzare Excel
anche se la macro è in funzione:

Public Sub m()
Dim sh As Worksheet
Dim lng As Long
Set sh = ThisWorkbook.Worksheets("Foglio2")
With sh
For lng = 1 To 50000
.Range("A" & lng).Value = lng
Next
End With
Set sh = Nothing
End Sub

La seconda blocca Excel e ti mostra una UserForm
fino a che la macro non ha finito:

Public Sub m()
Dim sh As Worksheet
Dim lng As Long
Set sh = ThisWorkbook.Worksheets("Foglio2")
UserForm1.Show vbModeless
With sh
For lng = 1 To 50000
.Range("A" & lng).Value = lng
Next
End With
Unload UserForm1
Set sh = Nothing
End Sub

Nota. Il codice delle due macro esegue una
iterazione a scopo dimostrativo.
Nella UserForm puoi mettere quello che vuoi
per indicare all'utente di attendere la fine delle
operazioni.

Ma forse non ho capito il tuo problema.

---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/

kar

unread,
Jun 7, 2011, 4:24:45 PM6/7/11
to
On 7 Giu, 10:03, "Mauro Gamberini"
<maurogscRIMUOV...@RIMUOVEREaliceposta.it> wrote:
> "kar"  ha scritto nel messaggionews:da56b6c8-f213-44aa...@gv8g2000vbb.googlegroups.com...

>
> Salve a tutti.
> Ho una maschera che funge da menu/inserimento dati.
> Quando clicco sul pulsante eseguo una serie di
>
> Sheets("Maschera_ins").Select
> ....
> Sheets("Agenda").Select
>
> Ma e' possibile non visualizzare il foglio "Agenda" quando lo
> seleziono e rimanere (visivamente) sul foglio "Maschera_ins" ?
>
> E, poiche' alcune operazioni sono lunghette, e' possibile avere sulla
> "Maschera_ins" una finestra un po' ORIGINALE del tipo "Attendere,
> prego ....." ?
>
> Grazie
>
> ************************************
>
> Io partirei da:
> ma sono proprio necessari quei Select?
>
> Che operazioni svolgi su quei fogli per doverli selezionare?
> Lo sai che vb non ha bisogno che il foglio sia selezionato?
>
> Due semplici macro che *lavorano* sul
> Foglio2 qualunque sia il foglio selezionato.
> La prima ti consente di continuare ad utilizzare Excel
> anche se la macro in funzione:

Salve.
Eccomi qui a domandare nuovamente....
Il mio codice e' questo:

Sub Aggiorna_modifica()
Dim age As Worksheet
Dim ins As Worksheet
Dim strdate As String
Dim c As Range
Set age = ThisWorkbook.Worksheets("Agenda")
Set ins = ThisWorkbook.Worksheets("Maschera_ins")

On Error GoTo No_Foglio

ins.Cells(1, 1).Select
strdate = ins.Range("B4").Value

If strdate = "" Then
MsgBox "Data obbligatoria !!", vbExclamation, "Errore"
Exit Sub
End If

' Sheets("Agenda").Select <===== se tolgo questa riga ottengo
l'errore "Errore nel metodo Select della classe range" altrimenti
funziona ...
age.Cells(2, 1).Select

trov = 0
For x = age.Cells(Rows.Count, "A").End(xlUp).Row To 1 Step -1
If age.Cells(x, 1).Value = CDate(strdate) Then
trov = x
age.Rows(x).Select
Exit For
End If
Next

Ne approfitto .....
il ciclo for mi serve per verificare se la data digitata e' gia'
presente nel foglio. Se si, mi posiziono sulla riga. Evidentemente
questa operazione e' lunga, in quanto devo leggere tutte le righe che
sono circa 1.550 ad oggi.
Ho provato col metodo find, ma non sono riuscito a velocizzare, e le
mie conoscenze di vba ( e di programmazione in generale ...) non sono
altissime (come si puo' notare dalle tante domande postate...)
Secondo te, come posso individuare velocemente una data sul foglio in
colonna A e se non presente posizionarmi sulla prima riga vuota ?

Grazie

r

unread,
Jun 7, 2011, 6:20:15 PM6/7/11
to
se la sub finisce li ovvero con il select della cella o eviti il select prima quello del foglio maschera_ins oppure usi una funzione ad hoc per il calcolo dell'ultima riga evitando quindi quel (brutto per me) End(xlUp) ...

questa è la function che uso io normalmente:
https://sites.google.com/site/e90e50/vba/funzionitascabili/ultimariga-1

un ciclo su 1550 celle non dura molto quindi la lentezza probabilmente è dovuta al resto del codice che non mostri e dove poi credo tu vai a utilizzare in qualche modo quel trov = x

però ... senza vedere l'intera procedura è difficile valutare.

saluti
r

r

unread,
Jun 7, 2011, 6:28:11 PM6/7/11
to
p.s.

per l'attesa ... oltre al suggerimento di mauro puoi guardare qui per qualcosa di già completo:
http://spreadsheetpage.com/index.php/tip/displaying_a_progress_indicator/

saluti
r

r

unread,
Jun 7, 2011, 6:33:28 PM6/7/11
to
0 new messages