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
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/
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
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
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