Newsgroup: it.comp.lang.visual-basic
Titolo: problema di esportazione

Ho una tabella in MS-Access che contiene dati relativi ad ordini
clienti più percorso immagine.
Visto che da Access non è possibile farlo, vorrei poter esportare
questi dati + foto in un foglio Excel, in particolare la prima cella
deve contenere la foto nel formato 3x3cm o 4x4cm e le celle successive
devono contenere i restanti dati (numero ordine, codice descrizione
ecc ecc ecc...)
Mi date delle dritte per poter realizzare il tutto visto che non sono
molto pratico di VB?
Ho a disposizione VB Express...
ringrazio in anticipo chiunque mi possa aiutare in tempi molto
brevi...
Nicola

 ecc ecc ecc...)
Credo che tu lo possa fare pure da access, tanto dovresti comunque farlo
via macro, e usando l'object di excel.
Sostanzialmente da excel avvii il registratore di marco, simuli quello che
vuoi fare, stoppi, vedi il codice e poi lo inserisci in una macro.
Questo è un esempio VB6 ma immagino valga pure per il VBA
http://www.vbforums.com/showthread.php?t=391665
Ma sei sicuro di farlo su excel e non su un normale report visualizzato?
No perchè le foto su excel a quanto ricordo non si agganciano ad una cella.

 No perchè le foto su excel a quanto ricordo non si agganciano ad una cella.
Il problema è proprio quello...
In access ho già realizzato tutto con i report completi di immagini e
dati...
per una questione di comodità e di modificabilità, mi è stato chiesto
di poter esportare il tutto in excel in modo che distribuendo il
foglio elettronico ai vari punti vendita possano compilarlo avendo
tutto l'occorrente a vista.
Ho visionato alcuni file XLS ottenuti da altri programmi gestionali e
visivamente sono molto leggibili in quanto dotati di linee di
divisioni, bordi e foto di dimensione sempre uguale esattamente come
se fossero report di access o similari...


Un modo:
Public Sub m()
    'dichiaro le variabili
    Dim wk As Workbook
    Dim sh As Worksheet
    'metto un riferimento al workbook
    'che contiene il codice
    Set wk = ThisWorkbook
    'metto un riferimento al Foglio1
    With wk
        Set sh = .Worksheets("Foglio1")
    End With
    With sh
        .Pictures.Insert("C:\RikiSam.jpg").Select '<<===
        Selection.Name = "Pippo" '<<=== se voglio dare un nome alla shape
        .Shapes("Pippo").Top = .Range("B5").Top '<<=== Top
        .Shapes("Pippo").Left = .Range("B5").Left '<<=== Left
    End With
    'Set a Nothing delle variabili oggetto
    Set sh = Nothing
    Set wk = Nothing
End Sub
-- 
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/threads
 
__________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 4992 (20100401) __________
Il messaggio � stato controllato da ESET NOD32 Antivirus.
www.nod32.it

<cut>
Aggiungo una cosa dopo aver letto meglio.
Se devi bloccare l'immagine, aggiungi questa riga:
.Shapes("Pippo").Locked = True
all'interno del With.
L'immagine sar� bloccata nella posizione scelta
se il foglio *� protetto*. Immagino che lo sia,
almeno per i Range e gli oggetti che non devono
essere modificati da chi riceve il report.


 
www.nod32.it
Grazie Mauro
Questa Sub va eseguita da VB giusto?
E' valida anche per VBA? Se potessi fare tutto da Access a questo
punto sarebbe tutto più facile ed immediato visto che ho già tabelle e
query pronte per essere elaborate....
Nicola

 
www.nod32.it
Grazie Mauro


 query pronte per essere elaborate....
Dai incollala e prova...


Io non ho capito bene cosa vuoi fare.
Se parli di un semplice file di Excel con
un foglio che riceve i dati in forma tabellare,
l'aggiunta della foto sar� una cosa tipo:
Private Sub Comando7_Click()
    'dichiaro le variabili
    Dim objExcel As Object
    Dim objWorkbook1 As Object
    Dim objWorksheet1 As Object
    Dim sPath As String
On Error GoTo RigaErrore
    'definisco la Path del db
    sPath = Application.CurrentProject.Path & "\"
    'creo l'oggetto Excel
    Set objExcel = CreateObject("Excel.Application")
    'apro e metto un riferimento ai workbook tuoFile.xls
    Set objWorkbook1 = objExcel.Workbooks.Open(sPath & "tuoFile.xlsx")
    'metto un riferimento al Foglio1 del workbook tuoFile.xls
    Set objWorksheet1 = objWorkbook1.worksheets("Foglio1")
    'rendo visibile Excel(se serve)
    objExcel.Visible = True
    With objWorksheet1
        .Unprotect Password:="Pippo"
        .Pictures.Insert("C:\RikiSam.jpg").Select
        .Shapes(1).Top = .Range("B5").Top
        .Shapes(1).Left = .Range("B5").Left
        .Shapes(1).Locked = True
        .Protect Password:="Pippo"
    End With
    'salvo le modifiche
    objWorkbook1.Save
    'chiudo i due workbook
    objWorkbook1.Close
RigaChiusura:
    'chiudo Excel
    objExcel.Quit
    'Set a Nothing dei vari oggetti
    Set objWorksheet1 = Nothing
    Set objWorkbook1 = Nothing
    Set objExcel = Nothing
    Exit Sub
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura
End Sub
Nell'esempio qui sopra il codice � eseguito tramite
un CommandButton di Access e utilizza un file di Excel
che si trova nella stessa directory del db e chiamato
tuoFile.xls.
Grazie per l'attenzione.
-- 
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/


    objWorkbook1.Close
Ehmmmm, chiudo *il* workbook.. .;-)
-- 
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/threads
 
__________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 4992 (20100401) __________
Il messaggio è stato controllato da ESET NOD32 Antivirus.
www.nod32.it

 
Ciao Andrea.
E' colpa mia che non avevo specificato
che il primo codice postato era utilizzabile
da Excel. Mi sembra di capire che l'OP
voglia invece fare tutto da Access.
-- 
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/threads
 
__________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 4992 (20100401) __________
Il messaggio è stato controllato da ESET NOD32 Antivirus.
www.nod32.it

 voglia invece fare tutto da Access.
Bhe perņ in 2 minuti vedeva se il codice ci girava come macro.

 Bhe però in 2 minuti vedeva se il codice ci girava come macro.
Grazie Mauro.... funziona ma con un pò di problemi..
1) nell'esempio riportato, si fa riferimento ad una singola immagine
che però viene piazzata a centro foglio...
quali sono i comandi per ridimensionare o settare una certa dimensione
della foto??
ho provato         '.shapes(1).Right = .Range("D5").Right ma
giustamente mi dà errore
2) in una maschera che contiene il campo che contiene il percorso,
inserendo il pulsante e specificando il comando
        .Pictures.Insert(me.percorso).Select mi viene restituito un
errore... causato da che?
3) come inserisco altri campi (codice, descrizione ecc ecc) in
posizioni stabilite nel file XLS???
Grazie 1000


Te l'ho detto, io *importerei* in Excel.
La query mi porta in excel un recordset che posso
leggere record per record, colonna per colonna e
decidere dove mettere i dati.
-- 
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/threads
 
__________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 4993 (20100401) __________


 
www.nod32.it
Lo so che sarebbe più logico importare da xls però non vorrei correre
il rischio di effettuare un doppio passaggio visto che cmq l'xls
dovrei esportarlo sempre da Access e dallo stesso programma ho la
gestione completa degli ordini...
ora, tornando al ridimensionamento... le foto a disposizione hanno
dimensioni pressochè differenti (800x600, 1024x768, 1024x680) pertando
scalandole avrei una situazione poco uniforme....
Per il testo ho risolto con ilseguente codice da adattare
         objWorksheet1.Cells(5, 5) = Me.Percorso
         objWorksheet1.Cells(5, 6) = Me.Articolo
mi resta solo il problema del percorso variabile usando il campo
me.percorso
dopo aver risolto questi ultimi 2 "enigmi" (per me sono tali)  posso
adattare il tutto per la creazione del file xls finale con 1 o più
righe...
Continuo a ringraziarti per il grosso aiuto che mi hai dato
Nicola


Meglio specificare *anche* la proprietà:
objWorksheet1.Cells(5, 5).Value =
Spiacente ma io non so cosa sia quel Me.Percorso.
-- 
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/


 
www.nod32.it
Buongiorno Mauro
il mio intento è di voler sostituire il comando
.Pictures.Insert("C:\RikiSam.jpg").Select
con
.Pictures.Insert(me.percorso).Select
dove me.percorso è il controllo su maschera access che contiene il
percorso dell'immagine
PS:
se volessi sostituire
.Shapes(1).Top = .Range("B5").Top
.Shapes(1).Left = .Range("B5").Left
con un incrocio di celle del tipo (1,5) come dovrei modificare il
comando??
Nicola

 Io non ho capito bene cosa vuoi fare.
zac
...non l'hai capito????
dai ti facevo più perspicace:
vuol fare l'app a spese tua!......si chiama spaghetti-code.....in
italia è workmodel molto diffuso...altro che CRUD ...MVC...MVVM....
In Italia abbiamo inventato: C-cubeASMA
C...chiedo
C...codice
C...copio e incollo
AS....applicazione sviluppata
M.....Minchione (di turno)
A.....abbandonato
E' un metodo velocissimo di sviluppo....e risente dell'estro artigiano
italiano: da sempre il popolo italiano ha svolto lavori con il "poco"
che la natura procurava.
Ne è un esempio la cucina che ricicla materiali alientari poveri per
trasformarli in piatti accettabili al palato ed energetici per il
vivere quotidiano: polenta, minestra di pane, cacciucco, farina di
castagne, etc
Nell'era moderna l'estro artigiano si è spostato in ambiti sempre più
vasti fino a toccare ambienti impensabili.
Ne è un esempio l'informatica dove tanti artigiani creano, combinando
i materiali più disparati, apparecchiature accettabili ai gusti più
grossolani del mercato.
Le caratteristiche di questi prodotti artigiani sono sempre le
medesime: accattivanti esteticamente, apparentemente sviluppati per lo
specifico cliente, funzionanti solo in determinate condizioni di
input, assolutamente unici ed instabili. La frase tipica è "ho un
prodotto che funzionicchia....ma è sviluppato solo per me!"
ovvio che sono ferocemente (ma non tanto... posso far di meglio!)
ironico......
alla prossima!

 vuol fare l'app a spese tua!......si chiama spaghetti-code.....in
Mi ero insospettito da quando ho letto
"in tempi molto brevi"
Col link che gli ho postato ha TUTTI gli strumenti per capire come iniziare
a lavorare con VBA/VB6, il resto si fa col registratore di macro e tante
prove.

On 2 Apr, 09:45, "Andrea [Work]" <andrea.isworkDELET...@gmail.invalid>
wrote:

E' nato...
ho inserito tutto in un ciclo for...to e funziona alla grande.
non capisco però il motivo per cui non mi accetta la sintassi
.Pictures.Insert(me.percorso).Select
e la accetta passando per un variabile con la sintassi
xx=me.percorso
.Pictures.Insert(xx).Select
Grazie anche ad Andrea per il link che mi è stato di grande aiuto e a
Mauro per la gran pazienza....
e Grazie pure al tipo che ci ha messo la feroce ironia :-)
Nicola

 .Pictures.Insert(xx).Select
Me.Percorso che tipo di dato č?
xx che tipo di dato č?

 xx che tipo di dato è?
è il campo della tabella access che rappresenta l'origine del file XLS
e che contiene il percorso completo della foto relativa all'articolo
ordinato...
Nicola

 ordinato...
Vabbč se rispondi cosě io chiudo con i reply, spero lo facciano pure gli
altri...

 altri...
dimenticavo xx è di tipo string
ultima cosa e poi si può chiudere...
Il file XLS prodotto può avere un numero variabile di righe
ho quindi realizzato un modello vuoto del file XLS opportunamente
formattato "esteticamente" e impostato per la stampa, che dopo essere
stato compilato viene salvato con altro nome, vorrei sapere se è
possibile portarsi la formattazione della prima riga dati fino
all'ultimo record importato in modo da avere celle formattate in modo
differente....
si può?
Nicola


<cut>
Ma ROTFL!
-- 
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/threads
 
__________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 4994 (20100402) __________
Il messaggio è stato controllato da ESET NOD32 Antivirus.
www.nod32.it


Scusa ma non sono molto pratico
di Access, ti posso aiutare
solo per ciň che riguarda Excel e le sue librerie.
Inoltre oggi pomeriggio stacco fino a martedě 8-)))))).
Comunque, immagino che da qualche parte
avrai la stringa da passare alla variabile.
Dove si trova? In un controllo
di una maschera, nel campo di una
query, nel campo di una tabella, ...?
-- 
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/threads
 
__________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 4994 (20100402) __________
Il messaggio č stato controllato da ESET NOD32 Antivirus.
www.nod32.it


Si!


percorso è il nome del controllo su maschera che contiene il percorso
+nomefile.
ho cmq risolto tutto, sia formattazione celle che altezza senza
ulteriori problemi....
c'è solo una piccola modifica che vorrei fare, ovvero evitare che si
vedano gli sfarfallii delle foto che vengono ridimensionate nel file
xls durante la compilazione... è fattibile?
Nicola


Proprietà: ScreenUpdating
nella guida del vb di Excel,
oppure qui:
http://msdn.microsoft.com/en-us/library/bb221605.aspx
-- 
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/threads
 
__________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 5004 (20100406) __________
Il messaggio è stato controllato da ESET NOD32 Antivirus.
www.nod32.it