Discussione:
Excel-access con vba
(troppo vecchio per rispondere)
l***@gmail.com
2007-11-05 09:23:37 UTC
Permalink
Salve a tutti,
sono disperato,non sono riuscito a risolvere i miei problemi con i
vostri aiuti.
Ora spero di spiegarmi meglio:
Ho un file excel di nome BASE con contenuto già pieno di formule al
secondo e terzo foglio che fanno riferimento ai dati inseriti nel
primo foglio.
Il primo foglio sono 11 colonne che devo inserire da access, cioè sono
il risultato di una query in creazione tabella che si chiama
STATISTICHE che eseguo su access.
Questa query ha tre parametri(data_inizio_indagine,
data_fine_indagine, famiglia_di_prodotti) che ogni volta l'utente può
cambiare per ottenere risultati diversi a seconda della statistica che
gli serve.
Poi riginava la tabella RISULTATI che banalmente copiavo e incollavo
su excel adesso ho scoperto che posso automatizzare il tutto con VBA.
Non so se mi convenga scrivere codice su excel o su access?
Comunque qualcuno avrebbe la gentilezza di scrivermi il codice da
eseguire per aprire le connessioni all'apllicazione(access o excel),
trasferire i dati o incollarli,ecc..?
Vi ringrazio e spero di essere stato chiaro.
Ho bisogno di una mano vi prego perchè sono fermo da giorni.
Grazie
Mauro Gamberini
2007-11-05 09:56:37 UTC
Permalink
Poi riginava la tabella RISULTATI che banalmente copiavo e incollavo
su excel adesso ho scoperto che posso automatizzare il tutto con VBA.
Non so se mi convenga scrivere codice su excel o su access?
Comunque qualcuno avrebbe la gentilezza di scrivermi il codice da
eseguire per aprire le connessioni all'apllicazione(access o excel),
trasferire i dati o incollarli,ecc..?
*********************************************

Se non lo sai tu...

Comunque, preferisci:

aprire Access e creare un file di Excel nel quale
esportare i dati

o

avere un file di Excel che si collega al db di Access
e recupera i dati di tuo interesse?

Guarda questi semplici esempi(Excel che apre
Access e ne recupera i dati):

http://www.webalice.it/maurogsc/esempi/xlsvbaExcelAccess.zip
http://www.webalice.it/maurogsc/esempi/xlsvbaExcelAccessComboBoxQuery.zip
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
Mauro Gamberini
2007-11-05 10:09:38 UTC
Permalink
Post by l***@gmail.com
Non so se mi convenga scrivere codice su excel o su access?
Aggiungo un link(dei tanti) in cui puoi approfondire
l'argomento:

http://www.erlandsendata.no/english/index.php?t=envbadac
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
l***@gmail.com
2007-11-05 11:57:00 UTC
Permalink
Gentile Mauro ho guardato con attenzione i tuoi esempi..molto utili!!!
Ti ringrazio.
Ho deciso di avere un file excel che si collega al mio database e
lancia una query che ha dei parametri...sai qual'è la riga di codice
VBA che legge la mia query in sql e la esegue con i parametri da
inserire.
Come il tuo esempio ho creato un foglio di inserimento dati...solo che
questi dati non sono da accodare alla tabella del database ma da
immettere come parametri nella query..ad esempio gli stessi dati tuoi
da B2 a B10 solo che passati come parametri...sai come fare?
TU HAI FATTO COSì:

'...riempio il recordset...
rs.CursorLocation = adUseClient
rs.Open "SELECT * FROM tblAnagrafica", cn, adOpenKeyset,
adLockOptimistic, adCmdText

'...passo al recordset i dati del foglio da inserire nel
database.
With rs
.AddNew
.Fields("Nome") =
Worksheets("InserimentoDati").Range("B2").Value
.Fields("Cognome") =
Worksheets("InserimentoDati").Range("B3").Value
.Fields("Indirizzo") =
Worksheets("InserimentoDati").Range("B4").Value
.Fields("Cap") =
Worksheets("InserimentoDati").Range("B5").Value
.Fields("Comune") =
Worksheets("InserimentoDati").Range("B6").Value
.Fields("Provincia") =
Worksheets("InserimentoDati").Range("B7").Value
.Fields("Telefono") =
Worksheets("InserimentoDati").Range("B8").Value
.Fields("Fax") =
Worksheets("InserimentoDati").Range("B9").Value
.Fields("e-mail") =
Worksheets("InserimentoDati").Range("B10").Value
.Update

IO VORREI ESEGUIRE LA QUERY CON QUESTO SQL:

PARAMETERS Data_inizio DateTime, Data_fine DateTime, Famiglia Text;
SELECT MATRICOLE.CodiceCommerciale, MATRICOLE.[N°Serie],
MATRICOLE.CodiceCliente, MATRICOLE.Data,
[1__Richiesta_di_servizio].Cliente,
[1__Richiesta_di_servizio].CodCliente,
[1__Richiesta_di_servizio].DataAcc,
[1__Richiesta_di_servizio].Numero_Int, (IIf([1__Richiesta_di_servizio]!
[DataAcc] Is Null,CLng((Now()-[MATRICOLE]!
[Data])*24),CLng(([1__Richiesta_di_servizio]![DataAcc]-[MATRICOLE]!
[Data])*24))) AS Ore_Indagine, MATRICOLE.NumSped,
IIf(IsNull([1__Richiesta_di_servizio]![DataAcc]),"Sospeso","Guasto")
AS [Sospeso/Guasto] INTO Foglio1
FROM 1__Richiesta_di_servizio RIGHT JOIN (MATRICOLE INNER JOIN
[Modelli SIM2] ON MATRICOLE.CodiceCommerciale = [Modelli
SIM2].NomeModello) ON ([1__Richiesta_di_servizio].CodCliente =
MATRICOLE.CodiceCliente) AND ([1__Richiesta_di_servizio].S_N =
MATRICOLE.[N°Serie])
WHERE (((MATRICOLE.CodiceCliente)>"1") AND ((MATRICOLE.Data) Between
[Data_inizio] And [Data_fine]) AND (((IIf([1__Richiesta_di_servizio]!
[DataAcc] Is Null,CLng((Now()-[MATRICOLE]!
[Data])*24),CLng(([1__Richiesta_di_servizio]![DataAcc]-[MATRICOLE]!
[Data])*24))))>0) AND (([Modelli SIM2].Famiglia)=[Famiglia]))
ORDER BY (IIf([1__Richiesta_di_servizio]![DataAcc] Is Null,CLng((Now()-
[MATRICOLE]![Data])*24),CLng(([1__Richiesta_di_servizio]![DataAcc]-
[MATRICOLE]![Data])*24)));

GRAZIE
Mauro Gamberini
2007-11-05 14:48:22 UTC
Permalink
Ho deciso di avere un file excel che si collega al mio database e
lancia una query che ha dei parametri...sai qual'è la riga di codice
VBA che legge la mia query in sql e la esegue con i parametri da
inserire.
************************************************

Non ho capito.


Come il tuo esempio ho creato un foglio di inserimento dati...solo che
questi dati non sono da accodare alla tabella del database ma da
immettere come parametri nella query..ad esempio gli stessi dati tuoi
da B2 a B10 solo che passati come parametri...sai come fare?
***************************************************

C'è un esempio nell'altro file.
Nell'esempio, selezionando una voce nella ComboBox,
viene passato come parametro alla query il
valore(Text) selezionato.

Per la corretta sintassi SQL sarebbe meglio
questo ng:

microsoft.public.it.sql

Ad ogni modo, indicativamente, per passare
parametri che hai inserito nelle celle al db:

'Dichiaro una variabile String
Dim s As String

'Riempio la mia stringa con la stringa SQL
s = "SELECT * FROM tblAnagrafica WHERE Nome=" & _
"""" & .Range("A1").Value & """" & " AND Comune = " & """" & _
.Range("B1").Value & """", cn, adOpenKeyset, adLockOptimistic,
adCmdText

'Passo la stringa SQL al metodo Open del Recorset
rs.Open s

'Seleziono la cella da cui iniziare a inserire i dati recuperati
.Range("A3").Select
'Inserisco i dati
Selection.CopyFromRecordset rs

Ti faccio notare(ti chiedo scusa se dico cose che sai già)
che ho dei riferimenti ai Range all'interno di un With/End With,
quindi utilizzo .Range(ecc).
Ovviamente puoi specificare un foglio diverso
dove recuperare i tuoi dati.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
Continua a leggere su narkive:
Loading...