Newsgroup: it.comp.lang.visual-basic
Titolo: Problema con VB per Excel (facile)

Ciao a tutti,
ho un problema con una macro per Excel.
Ho creato un foglio di excel dove una sub principale, "simulazione()" subito
prima di terminare ne chiama un'altra aspetta che compia alcune elaborazioni
sui risultati , e poi termina.
la routine principale in questa versione "ridotta" crea una tabella 100x100
con numeri casuali.
La seconda routine, che qui ho inserito per semplicità direttamnete nel
listato della macro principale,analizza questa tabella considerando prima
solo la prima colonna, poi le prime due, poi le prime tre ecc., scrivendo
come risultati sotto la tabella (riga 101 e 102)
101: L'1%-esimo valore più piccolo dei valori considerati (quindi il più
piccolo dei primi 100, il secondo più piccolo dei primi 200 e così via)
102: la media di tutti gli 1% valori più piccoli del valore che ha trovato
al punto precedente, sempre tra le colonne considerate.
il problema è che nel 90% dei casi mi viene restituito un errore:
errore di run time 1004
Errore definito dall'applicazione o dall'oggetto
alla riga che ho segnalato sotto.
Il fatto è che se queste due macro le chiamo separatamente (quando finisce
la prima avvio manualmente la seconda..tipo con un secondo pulsante)
funzionano regolarmente!!!
Avreste qualche suggerimento??
Ciao
IaNjOeY
Sub Simulazione()
 Dim simtot As Double
 Dim var As Double
 Dim nes As Integer
 Dim ces As Double
 Dim es As Double
 Dim numvar As Integer
Dim sim As Integer
'raccoglie i dati dal foglio
simtot = Worksheets("Risk").Cells(20, 3).Value
sim = 0
Do
    sim = sim + 1
Randomize
totale = rnd
Col = Int((sim - 1) / 100)
Worksheets("Database").Cells(sim - Col * 100, Col + 1).Value = totale
'ripete per tutte le simulazioni
Loop Until sim = simtot
'''''''''''''''''''''''Calcola il VaR e l'expected
Shortfall'''''''''''''''''''''''''''''''''
posticolonna = 100
pcvar = 0.01
colonnamax = simtot / posticolonna
colonna = 0
Do
es = 0
colonna = colonna + 1
numvar = colonna * pcvar * posticolonna
'trova il var come numvar-esimo valore più piccolo del range
''''l'errore viene sengalato in questa riga!!!!!
var =
Application.WorksheetFunction.Small(Worksheets("Database").Range(Cells(1,
1), Cells(posticolonna, colonna)), numvar)
'''''''''''''''''''''''''''''
'ora calcola l'expected shortfall
'considera tutti i valori più piccoli del var e ne fa la media
nes = 0
    Do
   nes = nes + 1
    ces =
Application.WorksheetFunction.Small(Worksheets("Database").Range(Cells(1,
1), Cells(posticolonna, colonna)), nes)
    es = es + ces / numvar
    Loop Until nes = numvar
Worksheets("Database").Cells(posticolonna + 1, colonna).Value = var
Worksheets("Database").Cells(posticolonna + 2, colonna).Value = es
Loop Until colonna = colonnamax
End Sub

Ciao
Prova così:
strRangeAddress = Range(Cells(1, 1),
Cells(posticolonna, colonna)).Address
var =
Application.WorksheetFunction.Small(Worksheets("Database").Range(strRangeAddress),
numvar)
Saluti
               Sergio
serg...@katamail.com
--------------------------------
Inviato via 
http://usenet.iol.it
 

La routine che fa girare il tutto è una routine di eventi? Dico ciò perchè
le routine di evento non accettano (o meglio non sempre) riferimenti a
"Range"... cioè es:
this workbook before_double_ click.....
Range("a1").value = 100
può dare errore!!!
Non mi viene in mente altro, anche perchè il fatto che fatta girare
singolarmente funzioni e nell'altro modo nò, mi sembra molto strano!!!
Ciao. Cesare