Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Aggiornamento Excel

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Aggiornamento Excel

Postdi vincosempre » 05/06/12 22:38

Salve a tutti, ho un problemino (mi auguro ridicolo per voi) con Excel 2010. Ho una colonna in cui metto codice articolo ed una in cui reperisco la descrizione tramite una subroutine in VBA che in base al codice, si aggancia ad una tabella di access e preleva la descrizione relativa. Nessun problema in fase di esecuzione.
Il problema è in fase di apertura del file di excel, in quanto se il DB è stato modificato, in excel mi ritrovo ugualmente il dato vecchio....a meno che non vado sul codice articolo, entro nella cella come se volessi modificare (esempio premendo F2) e poi aggiorno con INVIO. Allora si aggiorna.
Vorrei sapere (sperando di essere stato chiaro) cosa devo fare per avere un aggiornamento automatico della colonna descrizione, in cui ho messo
=SE(A1<>""; caricadati();" ")

Grazie
vincosempre
Utente Junior
 
Post: 10
Iscritto il: 05/06/12 16:09

Sponsor
 

Re: Aggiornamento Excel

Postdi ricky53 » 05/06/12 22:49

Ciao,
potresti, all'apertura del file excel, richiamare la routine che decodifica ... esempio utilizzando l'evento "Workbook_Open" come di seguito riportato
Codice: Seleziona tutto
Private Sub Workbook_Open()
' qui chiami la routine di decodifica
End Sub


L'evento va inserito in "ThisWorkbook" del VBAProject

E' solo un'idea non avendo il tuo file per controllare come decodifica ...
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Aggiornamento Excel

Postdi vincosempre » 07/06/12 14:34

Non credo...in realtà la routine in VBA ha in input 2 parametri che sono il valore della cella con il codice articolo e il nome della colonna del DB di access nella quale cercare la descrizione (nell'esempio che avevo messo sopra ero stato più vago per via di essere più sbrigativo). Facendo come mi suggerisci, dovrei fare un ciclo in cui inizio da una certa cella e scendo fino a quando è vuota...ma l'utente potrebbe avere "n" tabelle nello stesso foglio di excel distaccate da celle vuote e potrebbe anche avere vari fogli di excel.

Ma non c'è qualche parametro di excel da settare per far eseguire subito?...se avessi una formula senza routine me l'aggiornerebbe vero?...quindi...mah...

Anche con il tasto "aggiorna dati" non funziona...

Help me!
vincosempre
Utente Junior
 
Post: 10
Iscritto il: 05/06/12 16:09

Re: Aggiornamento Excel

Postdi ricky53 » 07/06/12 19:18

Ciao,
semplifichiamoci la vita ... hai un file di esempio che puoi inviarci?

In questo modo sarà più facile proporti una soluzione.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Aggiornamento Excel

Postdi Flash30005 » 07/06/12 19:24

Se quando premi invio sulla formula ottieni l'aggiornamneto allora potresti come dice Ricky su workbook_open inserire direttaamente la formula es.: A2 del Foglio1 (cambiare se necessario)
Codice: Seleziona tutto
Private Sub Workbook_Open()
Sheets("Foglio1").Range("A2").FormulaR1C1 = "=IF(R[-1]C<>"""", caricadati(),"" "")"
End Sub

Poi se necessario nel vba del foglio1 far attivare qualsiasi macro controllando la variazione della cella A2, o modificando il codice si può agire sull'intera colonna, con questo codice
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$2" Then Exit Sub
MsgBox "MacroMia"
End Sub


Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Aggiornamento Excel

Postdi Anthony47 » 07/06/12 21:35

Se parliamo di una o poche cella con formule allora i suggerimenti gia' ricevuti (vedi sopra) sono sufficienti; se invece parliamo di un lungo intervallo di articoli e relativa formula, allora io consiglierei questa macro di Workbook_Open:
Codice: Seleziona tutto
Private Sub Workbook_Open()
Vuota = "Z1"  '<< Una cella "meglio se vuota"
mieiArt = "A1:A100"     '<< L' intervallo degi Articoli
'
    Range(Vuota).Copy
    Range(mieiArt).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
Range(mieiArt).Range("A1").Select
End Sub

Va messa nel modulo ThisWorkbook del tuo file; da Excel:
-Alt-F11 per apire l' editor delle macro
-nel frame VBAProject (a sx; se non lo vedi premi Contr-r) fai doppioclick sulla riga ThisWorkbook
-copia la macro e incollala nel frame vuoto di dx
-personalizza le righe marcate <<

Torna su excel, salva e chiudi il file, poi riaprilo.

Ciao, fai sapere.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Aggiornamento Excel

Postdi vincosempre » 08/06/12 09:29

Vediamo se riesco a farmi capire meglio...
In cella B2 viene messo il codice articolo
In cella C2 ho messo:
Codice: Seleziona tutto
=SE($B12<>"";CaricaCampo("DESCRIZIONE";$B12;"02");"")


In VBA ho usato una procedura che era in altro foglio simile...senza correggere troppo, quindi
ho ad esempio strTipo che non è usato,...ma il concetto importante credo sia il contenuto della cella
C2, è quello che non si aggiorna...diciamo che la formula viene presa in considerazione solo al
cambiamento di B2...quindi all'apertura del foglio non viene eseguita...
Comunque posto qui sotto il VBA:

Codice: Seleziona tutto
Function CaricaCampo(strField, strParam, strTipo As String)
    Dim dbs As Database
    Dim rst As Recordset
    Dim strSQL As String

    strSQL = ""
    strSQL = "SELECT Costi." & strField + _
             " FROM Costi" + _
             " WHERE (((Costi.articolo)=""" & strParam & """));"

    Set dbs = OpenDatabase("D:\CLIENTI\costidb.mdb")
    Set rst = dbs.OpenRecordset(strSQL)
    If Not rst.EOF Then
        CaricaCampo = rst.Fields(strField).Value
    Else
        If strField = "LPARDA" Then CaricaCampo = "record non trovato"
    End If
    rst.Close
    dbs.Close
End Function


Grazie

EDIT Flash - Usare sempre il Tag "CODE" dell'editor quando si postano codici e/o formule
vincosempre
Utente Junior
 
Post: 10
Iscritto il: 05/06/12 16:09

Re: Aggiornamento Excel

Postdi Anthony47 » 08/06/12 14:50

Ma hai provato qualcuno dei suggerimenti??

Quello di Flash e' da adattare (avendo tu pubblicato in prima battuta una istruzione incompleta); il mio suggerimento e' che lavori sul codice articolo, usando come Private Sub Workbook_Open() questa:
Codice: Seleziona tutto
Private Sub Workbook_Open()
Range("B2").Value = Range("B2").Value & ""
End Sub

Purtroppo di "B2" non sono certo, perche' nella tua descrizione un po' parli di B2 e un po' di B12, vedi tu quale e' l' indirizzo giusto del codice articolo.

Il mio metodo avrebbe fuzionato col solo adattamento delle righe marcate <<, anche se per una sola cella e' piu' semplice il suggerimento di Flash.

Quindi prova e fai sapere.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Aggiornamento Excel

Postdi vincosempre » 08/06/12 15:41

Scusami molto...ho copiato la prima riga di excel...che parte dalla b12...e parlavo della B2, comunque il discorso lo hai capito.
Ho provato il tuo metodo e funziona. Avevo anche io pensato di fare un qualcosa del genere, però potrei avere il problema (come credo di aver detto sopra) che questa cosa posso averla 1) in più fogli dello stesso file 2) posso avere un range di articoli, qualche cella vuota, ancora un'intestazione (magari differente) di altre tabelle e poi ancora un range di articoli.

In definitiva mi state dicendo che devo trovare un "trucco" mediante codice VBA per ottenere quello che pensavo si potesse fare settando qualche opzione, giusto?

Potrei allora fare in modo di portare in apertura del file di excel tutti gli articoli, descrizioni e prezzi con del codice VBA da access in un foglio di excel...e cambiare le formule di reperimento dati in funzione dell'articolo con delle formule di excel (tipo cerca.verticale...)????

In questo modo la notte in automatico si aggiorna il db, poi all'apertura i dati passano da access ad excel...e istantaneamente si aggiornano quei dati già immessi....no?

graziee...e scusate gli errori precedenti e il mio modo di esporli.
vincosempre
Utente Junior
 
Post: 10
Iscritto il: 05/06/12 16:09

Re: Aggiornamento Excel

Postdi Anthony47 » 11/06/12 00:02

Se hai piu' range di articoli nello stesso foglio puoi usare il metodo che ti indicai qui: viewtopic.php?f=26&t=95757&p=549183#p549132
In modo precauzionale e' opportuno inserire la selezione del foglio subito dopo l' intestazione della macro, e indicherai piu' intervalli. Cioe'
Codice: Seleziona tutto
Private Sub Workbook_Open()
Sheets("Foglio1").select         '<< AGGIUNTA
Vuota = "Z1"  '<< Una cella "meglio se vuota"
mieiArt = "A1:A100", "A150:A200"     '<< L' intervallo degi Articoli (es Range doppio)
'
'continua come prima

Se lo devi fare su piu' fogli la cosa piu' semplice e' che prima di chiudere la macro RIPETI le istruzioni relative agli altri fogli; cioe'
Codice: Seleziona tutto
'
Sheets("Foglio2").select
mieiArt = "B1:B25", "B50:B100"     '<< L' intervallo degi Articoli
    Range(mieiArt).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks _
        :=False, Transpose:=False
'
'Ripeti per Foglio3
'
'Chiusura macro, istruzioni esistenti:
    Application.CutCopyMode = False
Range(mieiArt).Range("A1").Select
End Sub

Sull' opportunita' di portare in modo preventivo tutti i dati da Access a Excel non sono in grado di esprimere un giudizio, dipende da quanti codici sono interessati e dal tuo processo di lavoro. In linea di massima quando vedo dati duplicati chiedo sempre "chi garantisce l' allineamento tra 1 e 2?"

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Aggiornamento Excel

Postdi Anthony47 » 11/06/12 14:15

PERDONATE, la sintassi giusta per indicare due intervalli non e', ad esempio, mieiArt = "A1:A100", "A150:A200"
ma invece
mieiArt = "A1:A100, A150:A200"

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Aggiornamento Excel

Postdi vincosempre » 13/06/12 15:17

Grazie. I range non sono fissi, è l'utente che modifica il foglio a suo piacimento...quindi io posso mettere un range abbastanza lungo (esempio da b7:b200 salto prime righe fisse di intestazione), ma ho un problema...con file .xls funziona, ma con file .xlsm di excel 2010 (con macro) non funziona..o meglio non funziona per tutti i fogli.

io ho messo:

Private Sub Workbook_Open()
For i = 2 To Sheets.Count
Vuota = "A1" '<< Una cella "meglio se vuota"
mieiArt = "b7:b200" '<< L' intervallo degi Articoli

Sheets(i).Range(Vuota).Copy

Sheets(i).Range(mieiArt).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range(mieiArt).Range("b7").Select
Next i
End Sub

sbaglio qualcosa?
vincosempre
Utente Junior
 
Post: 10
Iscritto il: 05/06/12 16:09

Re: Aggiornamento Excel

Postdi Anthony47 » 13/06/12 23:23

Anche provando su XL2010 la macro fa quello che mi immaginavo; quando dici "...o meglio non funziona per tutti i fogli" che cosa intendi? Puoi cioe' dettagliare che cosa "non succede" o succede male?

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Aggiornamento Excel

Postdi vincosempre » 14/06/12 10:16

"Dovrei" aver risolto...il problema è che in alcuni fogli c'erano delle righe formattate con "unione celle"...e in quel caso non faceva il copia-incolla della macro VBA, quindi mi ritrovavo con alcuni fogli corretti ed altri no.
Il disguido tra .xls e .xlsm è stato dato dal fatto che nel mio foglio in xls tutto funzionava...mentre nel foglio che mi avevano dato in .xlsm c'erano queste formattazioni...

Ringrazio molto per la cortesia e la disponibilità.
Mi auguro di aver concluso con questo quesito.
Saluti.
vincosempre
Utente Junior
 
Post: 10
Iscritto il: 05/06/12 16:09


Torna a Applicazioni Office Windows


Topic correlati a "Aggiornamento Excel":


Chi c’è in linea

Visitano il forum: Nessuno e 142 ospiti