Newsgroup: it.comp.appl.access
Titolo: access -excel macro per excel

Dovrei eseguire una macro di excel ( si tratta di un ordinamento) ma poichč 
il foglio excel viene generato da access con un output e non contiene la 
macro, č possibile far risiedere la macro in un modulo access ed eseguirla 
in excel?
grazie
Ps se necessario posto anche la macro 

 typed:

Ciao,
ma se lo generi da access non puoi esportare i dati
gia' ordinati ?
--
Lorenzo


ciao

 record.
[...]
Ah, andiamo bene, in Excel in pagella avevo (-1)  LOL
Vediamo se ho capito, hai una tabella dove hai la necessità
di ordinare alcuni elementi *per riga*.
Se questo e' vero ci sono delle routine per il sort di elementi
(quick sort, bubble sort etc.)
Prova a vedere se ricavi qualcosa dalla routine piu' sotto.
La puoi richiamare ad esempio come Sorter(5,3,4,7,8,...)
e dovrebbe restituirti un insieme ordinato di elementi.
(nel codice devi sostituire TABELLA1 con una qualsiasi
tua tabella esistente)
Public Function Sorter(ParamArray v())
Dim Sel$
Dim x%
Dim Tb As Recordset
For x = 0 To UBound(v)
   If x = 0 Then
      Sel = "SELECT " & v(x) & " AS C1 FROM TABELLA1 "
   Else
      Sel = Sel & "UNION SELECT " & v(x) & " AS C1 FROM TABELLA1 "
   End If
Next
Sel = Sel & "ORDER BY C1"
Set Tb = CurrentDb.OpenRecordset(Sel)
Do Until Tb.EOF
   Debug.Print Tb(0)
   Tb.MoveNext
Loop
End Function
--
Lorenzo 


ciao

 10 20 30 40 50 60 70
Potresti fare cosě: Vai nella sezione moduli e ne crei uno nuovo.
All'interno copi-incolli il codice che segue e poi lanci la routine
principale dalla finestra di immediata:
?Ordina()
*Fatti una copia* del DB prima di eseguire nel caso in cui
non sia quello che ti serviva e anche perche' lo messa giu'
di getto .
E' un po' grezza, ci servirebbero dei controlli sugli errori,
ma dovrebbe funzionare.
--
Lorenzo
Public Function Ordina()
Dim Tbl As DAO.Recordset
Set Tbl = CurrentDb.OpenRecordset("tblTabella1")
Do Until Tbl.EOF
   Sorter Tbl, 3
   Sorter Tbl, 10
   Sorter Tbl, 17
   Sorter Tbl, 24
   Sorter Tbl, 31
   Tbl.MoveNext
Loop
Tbl.Close
End Function
Public Function Sorter(Tbl As Recordset, StartField%)
Dim Sel$
Dim x%
Dim Tb As Recordset
For x = 0 To 6
   If x = 0 Then
      Sel = "SELECT " & x & "AS X," & Tbl(x + StartField) & " AS C1 FROM 
tblTabella1 "
   Else
      Sel = Sel & "UNION SELECT " & Tbl(x + StartField) & " AS C1 FROM 
tblTabella1 "
   End If
Next
Sel = Sel & "ORDER BY C1"
Set Tb = CurrentDb.OpenRecordset(Sel)
Tbl.Edit
For x = 0 To 6
   Tbl(x + StartField) = Tb(1)
   Tb.MoveNext
Next
Tbl.Update
Tb.Close
End Function


ciao

>      Sel = "SELECT " & x & "AS X," & Tbl(x + StartField) & " AS C1
Modifica aggiungendo uno spazio su "AS X,"
che diventa " AS X,"
Se ci va diritta in puaio di colpi la faccimao andare :-)
--
Lorenzo


ciao 


Opss,
Anche qui serve una modifica:
Sel = Sel & "UNION SELECT " & Tbl(x + StartField) & " AS C1 FROM
diventa:
Sel = Sel & "UNION SELECT " & X & " AS X," & Tbl(x + StartField) & " AS C1 
FROM
OE non e' il massimo come editor vba ;-)
Forse ancora un errore poi va .
--
Lorenzo


ciao 

 Lo stesso di prima
Ok, tra ritorni a capo di OE e altro....
Sostituisci l'intera funzione Sorter con questa che ho
provato in questo momento:
Public Function Sorter(Tbl As Recordset, StartField%)
Dim Sel$
Dim x%
Dim Tb As Recordset
For x = 0 To 6
   If x = 0 Then
      Sel = "SELECT " & x & " AS X,"
      Sel = Sel & Tbl(x + StartField) & " AS C1 FROM tblTabella1 "
   Else
      Sel = Sel & "UNION SELECT " & x & " as X,"
      Sel = Sel & Tbl(x + StartField) & " AS C1 FROM tblTabella1 "
   End If
Next
Sel = Sel & "ORDER BY C1"
Set Tb = CurrentDb.OpenRecordset(Sel)
Tbl.Edit
For x = 0 To 6
   Tbl(x + StartField) = Tb(1)
   On Error Resume Next
   Tb.MoveNext
   On Error GoTo 0


 Run-time error 3141
Errori di compilazione non ce ne sono.
ciao 

> Run-time error 3141
Uhm, questo e' strano.
Che versione di Access usi ?
Se l'errore lo da nel medesimo punto
    Set Tb = CurrentDb.OpenRecordset(Sel)
Quando il codice si ferma sull'istruzione, nella
finestra immediata immetti:
    ?Sel <INVIO>
Posta il risultato.
--
Lorenzo


ciao 

 6 as X, AS C1 FROM tblTabella1 ORDER BY C1
Ok, stiamo tirando fuori valori nulli.
E' possibile che la tabella contenga valori nulli ?
Se non e' cosi sono errate le chiamate nella routine
Ordina()
                Do Until Tbl.EOF
                    Sorter Tbl, 3
                    Sorter Tbl, 10
                    Sorter Tbl, 17
                    Sorter Tbl, 24
                    Sorter Tbl, 31
                   Tbl.MoveNext
                Loop
I numeri di chiamata si riferiscono ciascuna alla prima colonna
del gruppo di 7 colonne, Nelle tabelle la prima colonna e' la zero.
Se hai contato da uno basta incrementare di una unita' la chiamata,
ad esempio    Sorter Tbl, 3+1
Se invece esiste la possibilitą che ci siano di valori nulli
puoi convertirli in zero (se non ti da' fastidio):
Sostituisci nella routine Sorter le *due* espressioni
        Tbl(x + StartField)
Con     nz(Tbl(x + StartField),0)
--
lorenzo


ciao 


Ops, decrementare.
Sorter Tbl,3-1
;-)
--
Lorenzo 

 Sorter Tbl, 2 ?
Si, vedi errata corrige. :-)
--
Lorenzo 

 ?Sel....
Eh,Eh, l'esperienza ;-)
Se te lo da' nello stesso punto vuole dire che non hai
solo valori Nulli ma anche campi con stringa a lunghezza
zero.
Prova a postare la stringa che ne deriva (?Sel)
--
Lorenzo


opss
evidentemente non ci sono celle in access ma campi 


ciao 

 a me sembra la stessa di prima
Uhm,
Hai sostituito pero' nella routine sorter
            Tbl(x + StartField)
Con
            Nz(Tbl(x + StartField),0)
In fase di ordinamento i valori vengono forzati a Zero,
poi pero' vengono rimessi a Nullo prima di aggiornare
la tabella di origine.
--
Lorenzo

 a me sembra la stessa di prima
...e visto che o tutti i 7 valori sono nulli o sono pieni
puoi anche aggiungere nella funzione Sorter,
che diventa nella parte iniziale:
Public Function Sorter(Tbl As Recordset, StartField%)
Dim Sel$
Dim x%
Dim Tb As Recordset
If IsNull(Tbl(StartField)) Then        'PATCH delle 23.19
   Exit Function                                 'PATCH delle 23.19
End If                                                 'PATCH delle 23.19
...
--
Lorenzo


ciao 

 Alla riapertura la tabella non è ordinata.
Quanti record hai nella tabella ?
Se sono molti e' possibile che il pc rallenti di molto,
se poi sposti il fuoco fuori da access potresti vedere
una maschera bianca se cerchi di rientrare.
Questo fino a quando non ha finito.
Con l'unltima aggiunta gli facciamo saltare i gruppi di 7 nulli
per cui dovrebbe accelerare.
Alla fine della routine Sorter puoi aggiungere un monitoraggio:
Debug.Print "Sortato " & Tbl(0) & "-" & Tbl(1) & " (" & StartField & ")"
End Function
--
Lorenzo

 "Lorenzo(pyx)"  wrote
x Riepilogo queste dovrebbero essere le routine
complete che almeno a me non danno errore e
fanno l'ordinamento :
Public Function Ordina()
Dim Tbl As DAO.Recordset
Set Tbl = CurrentDb.OpenRecordset("tblTabella1")
Do Until Tbl.EOF
   Sorter Tbl, 3 - 1
   Sorter Tbl, 10 - 1
   Sorter Tbl, 17 - 1
   Sorter Tbl, 24 - 1
   Sorter Tbl, 31 - 1
   Tbl.MoveNext
Loop
Tbl.Close
End Function
Public Function Sorter(Tbl As Recordset, StartField%)
Dim Sel$
Dim x%
Dim Tb As Recordset
If IsNull(Tbl(StartField)) Then
   Exit Function
End If
For x = 0 To 6
   If x = 0 Then
      Sel = "SELECT " & x & " AS X,"
      Sel = Sel & Nz(Tbl(x + StartField), 0) & " AS C1 FROM tblTabella1 "
   Else
      Sel = Sel & "UNION SELECT " & x & " as X,"
      Sel = Sel & Nz(Tbl(x + StartField), 0) & " AS C1 FROM tblTabella1 "
   End If
Next
Sel = Sel & "ORDER BY C1"
Set Tb = CurrentDb.OpenRecordset(Sel)
Tbl.Edit
For x = 0 To 6
   Tbl(x + StartField) = IIf(Tb(1) = 0, Null, Tb(1))
   On Error Resume Next
   Tb.MoveNext
   On Error GoTo 0
Next
Tbl.Update
Tb.Close
Debug.Print "Sortato " & Tbl(0) & "-" & Tbl(1) & " (" & StartField & ")"
End Function


Esatto.
Mi ci vuole un bel pņ, ma mantiene ciņ che promette. ;-)
La si puo usare nel punsante di una maschera non associata con un Call 
ordina  ?
grazie
ciao 

 ciao
--
Lorenzo