Newsgroup: it.comp.lang.visual-basic
Titolo: Aiuto VBA

Per la prima volta mi sto cimentando con il VBA, partendo dal nulla
Dato il seguente codice:
Sub UseFunction()
    Dim myRange As Range
    Set myRange = Worksheets("Foglio1").Range("A5:a2000")
    Application.WorksheetFunction.Max (myRange)
N = myRange
End Sub
Private Sub CommandButton1_Click()
K = 13
Cells(N, 11) = K
End Sub
Cio' che vorrei ottenere e' che, premendo il bottone, la cella (N,11)
sia pari a K, dove N rappresenta il valore massimo dei dati compresi
tra a5 e a 2000
L'errore l'ottengo proprio in corrispondenza di Cells(N, 11) = K,
perche'?
Scusatemi la banalita'
Grazie
Ciao

> "SilverChair" [...]:

    Figurati. Temo che dovro' scusarmi piu' io di te. Perche' se scrivero'
quello che mi passa per la testa in questo momento va a finire che io faccio
una pessima figura e tu o t'incazzi o ci resti male. Cerchero' di
trattenermi, lo giuro.
    Cominciamo dall'oggetto di questo tuo post: "Aiuto VBA". Non e' scritto
secondo quanto previsto dal Manifesto di questo ng, che puoi trovare
cercando fra i post recenti di questo ng in quanto viene postato
frequentemente. Puoi anche leggerlo all'indirizzo:
 
http://www.it-lang-vb.net/docs/Manifesto.txt
    Ma, a parte le regole, prima di tutto un oggetto simile e'...
sconsiderato! Dimostra cioe' che non consideri, per ignoranza o per
pigrizia, l'utilita', lo scopo, la funzione dell'oggetto, sia attiva che
passiva: ovvero sia a tuo favore che a favore degli altri frequentatori.
    Agli altri frequentatori serve per decidere se leggere o meno il tuo
post, in base ai loro interessi ed alla loro disponibilita' o capacita' di
aiutare. Ma anche per capire se il tuo problema e' anche un loro problema e
se l'eventuale soluzione puo essere utile anche a loro.
    Il vantaggio che da' a te un oggetto significativo e coerente col resto
del post e' enorme: aumenta le probabilita' che il post venga letto.
    Considera anche che i post non hanno vita effimera ma vengono
archiviati, privatamente e pubblicamente (google, per esempio), e la ricerca
piu' veloce e' ovviamente basata sull'oggetto.
    Veniamo ora al testo: mancano alcune indicazioni fondamentali che,
secondo me, sarebbe sempre bene scrivere, in forma sintetica, anche quando
non necessarie. Meglio: quando non *apparentemente* necessarie:
     . Hardware, configurazione;
     . Sistema operativo, nome e versione;
     . Ambiente di sviluppo: nome e versione.
    Nel tuo caso questo e' ancora piu' vero in quanto non operi col prodotto
di riferimento di questo ng, Visual Basic.
    Ed ora... il tuo problema: chiedi aiuto, scrivi che parti dal nulla e
che e' la prima volta che ti cimenti col VBA. Non posso quindi "infierire",
ma una domanda te la devo proprio fare: perche' non parti dalle basi?
    Inoltre: prima scrivi il codice, poi lo scopo per cui l'hai scritto, ma
quello e' conseguenza di questo, e da questo dobbiamo partire:
    "Cio' che vorrei ottenere e' che, premendo il bottone, la cella (N,11)
sia pari a K, dove N rappresenta il valore massimo dei dati compresi tra a5
e a2000".
    "Premendo il bottone", come ben sai, si traduce:
        Private Sub CommandButton1_Click()
        End Sub
e, tra parentesi, mi assicurerei che il tutto sia preceduto da:
        Option Explicit
    "N rappresenta" eccetera si traduce:
        Dim wsh As Excel.Worksheet
        Dim n   As Double
        Set wsh = Worksheets("Foglio1")
        n = WorksheetFunction.Max(wsh.Range("A5:A2000"))
        Set wsh = Nothing
    "la cella (N,11) sia pari a K":
        Const k = 13
        Cells(n, 11) = k
e, mettendo insieme il tutto:
Option Explicit
Private Sub CommandButton1_Click()
  Const k = 13
  Dim wsh As Excel.Worksheet
  Dim n   As Double
  Set wsh = Worksheets("Foglio1")
  n = WorksheetFunction.Max(wsh.Range("A5:A2000"))
  Cells(n, 11) = k
  Set wsh = Nothing
End Sub
    Resta pero' da capire cosa intendessi fare con quella sub "UseFunction"
apparentemente slegata dal resto. Una funzione che restituisce il valore
massimo in A5:A2000? E' probabile. Quindi riscriverei il tutto cosi':
Option Explicit
Private Function RicavaMax()
  Dim wsh As Excel.Worksheet
  Set wsh = Worksheets("Foglio1")
  RicavaMax = WorksheetFunction.Max(wsh.Range("A5:A2000"))
  Set wsh = Nothing
End Function
Private Sub CommandButton1_Click()
  Const k = 13
  Cells(RicavaMax, 11) = k
End Sub
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------


Innanzitutto grazie per l'aiuto; ho capito l'errore che commettevo.
Mi sto rendendo conto che, almeno per me, il problema principale della
programmazione, ovvero la cosa che piu' ti fa perdere tempo, non e' il
pensare e impostare il programma stesso, ma e' l'andare a cercarsi di
volta in volta la sintassi e le notazioni giuste da utilizzare per
tradurre cio' che hai in mente in un modo comprensibile dal pc.
In ogni caso per imparare, a mio avviso, non c'e' altra strada che
iniziare a scrivere autonomamente qualcosa e quindi imparare sul
campo, risolvendo i problemi via via che ti si presentano......magari
con l'aiutino di qualcuno.
Infatti, dopo il tuo aiuto, sono riuscito abbastanza agevolmente a
completare il piccolo programmino che avevo in mente (la parte che ho
postato nel NG era solo l'introduzione)
Ancora Grazie
Ciao