Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Norman ,
il sistema funziona l'unica cosa negativa è che mi crea i fogli
fastidioso perchè devo chiuderli a mano sennò non si aggiorna.
Con un titolo l'ha fatto solo una volta
con piu di uno lo da di più.
Se è fattibile senza tribulare ok sennò lascia stare .ù
Io intanto ti ringrazio per la tua disponibilità
e per la tua preparazione .
Grazie.
Emanuele
Ciao Emanuele,
Innanzitutto, non posso replicare questo comportamento indesiderato.
Comunque, non sono sicuro di aver capito: ulteriori fogli vuoti vengono inseriti nella cartella di lavoro con i nomi predefiniti sequenziali Foglio4, Foglio5 ecc?
===
Regards,
Norman
Ciao Emanuele,
Un altra domanda!
Che intervallo di tempo stai usando ed il comportamento sgradevole si manifesta anche con intervalli di tempo più lunghi?
===
Regards,
Norman
Ciao Emanuele,
In attesa di una risposta alle mie due domande di ieri, se la risposta alla domanda penultima dovesse essere affermativa, potresti provare il seguente workaround (accorgimento) eventuale:
Nel modulo ThisWorkbook, al di sotto della dichiarazione:
'=============>>
Option Explicit
incolla la seguente routine aggiuntiva:
'------------>>
Private Sub Workbook_NewSheet(ByVal SH As Object)
On Error Resume Next
With Application
.DisplayAlerts = False
.ScreenUpdating = False
SH.Delete
.DisplayAlerts = False
.ScreenUpdating = False
End With
End Sub
'------------>>
Nel modulo normale che avevi creato, dopo il codice esistente, incolla il seguente codice aggiuntivo:
'=============>>
Public Sub AddSheet()
Dim sStr As String
Dim aStr As String
Dim bStr As String
Dim dStr As String
Dim eStr As String
Dim Res As String
Const cStyle As Long = vbCritical
eStr = vbNewLine & "Non si è creato un nuovo foglio!"
aStr = "Inserisci un nome per il nuovo foglio"
bStr = "Non hai inserito un nome!" & eStr
dStr = "Hai cancellato il nome!" & eStr
sStr = "Errore!" _
& vbNewLine _
& "Un foglio di con questo nome esiste già!" _
& eStr
Res = Application.InputBox( _
Prompt:=aStr, _
Title:="Nuovo Foglio", _
Type:=2)
On Error Resume Next
Select Case Res
Case "False"
MsgBox Prompt:=dStr, Buttons:=cStyle
Case vbNullString
MsgBox Prompt:=bStr, Buttons:=cStyle
Case Else
If Not SheetExists(Res) Then
Call AddNewSheet(Res)
Else
MsgBox Prompt:=sStr, Buttons:=cStyle
End If
End Select
End Sub
'------------>>
Public Function AddNewSheet(sNome As String)
Dim WB As Workbook
Dim SH As Worksheet
Set WB = ThisWorkbook
'On Error Resume Next
Application.EnableEvents = False
With WB.Worksheets
Set SH = WB.Worksheets.Add '(Before:=(.Count))
End With
Application.EnableEvents = True
SH.Name = sNome
'MsgBox Err.Number
End Function
'------------>>
Private Function SheetExists(ShName As String) As Boolean
Dim WB As Workbook
Dim SH As Worksheet
Set WB = ThisWorkbook
On Error Resume Next
Set SH = WB.Worksheets(ShName)
SheetExists = Not SH Is Nothing
Err.Clear
End Function
'<<=============
La procedura di evento, Workbook_NewSheet, cancella immediatamente qualsiasi nuovo foglio che si crea in quella cartella di lavoro.
Ho anche aggiunto la routine AddSheet e due nuove funzioni per permettere che si aggiunga un nuovo foglio programmaticamente. Le nuove funzioni AddNewSheet e SheetExists sono utilizzate dalla routine AddSheet per verificarsi che il foglio di lavoro non esista già, di disattivare e poi riattivare la procedura di evento di cui sopra. La macro AddSheet raccoglie informazioni sul nuovo foglio di lavoro e passa le istruzioni per le due funzioni.
Come indicato in una risposta precedente, ti consiglio vivamente di provare sempre qualsiasi nuovo codice su una copia della cartella di lavoro interessata.
Inizialmente, vorrei suggerire che non riduca il valore della costante cRunIntervalSeconds a meno di 10 secondi.
===
Regards,
Norman