Originariamente inviato da Boolean
ti sei assicurato del fatto che l'istanza di Excel aperta venga poi chiusa effettivamente?
non te ne sei assicurato... 
Originariamente inviato da Boolean
sei sicuro che *tutti* i riferimenti all'applicazione excel, come al workbook e ai fogli di lavoro siano effettuati tutti tramite le variabili oggetto istanziate?
come volevasi dimostrare non facevi riferimento a Excel esclusivamente tramite variabili oggetto... 
l'errore si scatenava per un problema noto nell'uso dell OLE Automation, in due parole, se da VB si usano riferimenti diretti alle celle, o ai fogli o al workbook stesso, VB crea implicitamente delle variabili oggetto che fanno riferimento all'oggetto chiamato, ma una volta chiusa (almeno così si crede) l'istanza di Excel, l'area di memoria utilizzata per i riferimenti agli oggetti non viene liberata, e quindi l'istanza di Excel rimane "appesa"...
la prima volta questo non crea problemi, perchè di istanze di excen non ce ne sono... ma alla seconda volta, quando già un'istanza di excel è in sospeso, il problema si presenta puntualmente!
per evitare questo, come ti ripeto, è necessario istanziare delle variabili oggetto che facciano riferimento a TUTTI gli oggetti che si intendono utilizzare (tranne, in qualche caso, per il Range).
poi un'altra cosa... nel momento in cui decidi di utilizzare il riferimento alla libreria direttamente in VB, è inutile utilizzare la CreateObject. se la utilizzi (decisamente consigliabile farlo) è possibile NON includere alcun riferimento alla libreria nel progetto.
questo è il codice come l'ho modificato... e dovrebbe funzionare a dovere 
codice:
Option Explicit
Dim ApplExcel As New Excel.Application
Dim WorkExcel As Excel.Workbook
Dim SheetExcel As Excel.Worksheet
Dim ExcRow As Byte
Dim ExcCol As Byte
Private Sub cmdCreateSheet_Click()
Set ApplExcel = New Excel.Application
Set WorkExcel = ApplExcel.Workbooks.Add
Set SheetExcel = WorkExcel.ActiveSheet
With SheetExcel
For ExcRow = 1 To 20
For ExcCol = 1 To 7
.Cells(ExcRow, ExcCol).Value = Rnd(1) * 10
Next ExcCol
Next ExcRow
ExcCol = ExcCol - 1
ApplExcel.Visible = True
For ExcRow = 1 To 20
If ExcRow Mod 2 = 0 Then
.Range(SheetExcel.Cells(ExcRow, 1), SheetExcel.Cells(ExcRow, ExcCol)).Interior.Color = &H80FF&
Else
.Range(SheetExcel.Cells(ExcRow, 1), SheetExcel.Cells(ExcRow, ExcCol)).Interior.Color = &H80C0FF
End If
Next ExcRow
ExcRow = ExcRow - 1
.Range(SheetExcel.Cells(1, 1), SheetExcel.Cells(ExcRow, ExcCol)).Borders.LineStyle = xlContinuous
.Range(SheetExcel.Cells(1, 1), SheetExcel.Cells(ExcRow, ExcCol)).Font.Name = "Arial"
.Range(SheetExcel.Cells(1, 1), SheetExcel.Cells(ExcRow, ExcCol)).Font.Size = 10
End With
WorkExcel.SaveAs "C:\TuoNuovoFoglio.xls"
WorkExcel.Close
ApplExcel.Quit
Set WorkExcel = Nothing
Set ApplExcel = Nothing
Set SheetExcel = Nothing
Exit Sub
GeErr:
Select Case Err.Number
Case Is = 1004
Err.Number = 0
Resume Next
Case Else
MsgBox Err.Number & " " & Err.Description
Exit Sub
End Select
End Sub
Private Sub Form_Load()
Me.Left = (Screen.Width - Me.Width) / 2
Me.Top = (Screen.Height - Me.Height) / 2
End Sub
Boolean