Newsgroup: it.comp.appl.access
Titolo: Si possono costruire routine all' interno di word (o excel) che siano poi richiamabili dall' esterno ?

Cioe' mi spiego :
dato un componente word, excel, outlook,
e' possibile al loro interno costruire delle
routine che fungano poi da METODI richiamabili
dall' esterno ?
Per esempio supponiamo che in excel apriate
strumenti -> macro -> visual basic editor.
Poi visualizza -> gestione progetti.
Puntando col mouse sulla voce :
"microsoft excel oggetti" , inserite un modulo.
E dentro il modulo scrivete :
public sub (o function) MyProc ( .... )
   ...
   fai questo e quello
   ...
end sub
Poi da vba in access scrivete :
dim Exl as new excel.application
Exl.MyProc( ... )
Secondo voi funzionerebbe ?
OPPURE bisogna costruire non una
routine normale ma lavorare in un modulo
di classe ?

 Secondo voi funzionerebbe ?

Non ho mai affrontato questa problematica, per� hai provato con il metodo
Run (vedi Help)?.. cio� una cosa del tipo:
Dim OggettoW As Word.Document
Set OggettoW = CreateObject("Word.Document")
OggettoW.Application.Documents.Open "C:documentiDocWord.doc"
OggettoW.Application.Visible = True
OggettoW.Application.Run "MiaSub"
--
sv
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Se crei Funzioni dichiarate Public in moduli Standard ovviamente si
saranno accessibili.
Per i moduli di Classe invece per renderli Accessibili dall'esterno
serve editare un parametro accessibile
solo con un Editor di testo, quindi devi Esportarlo, aprirlo con
Notepad, modificare il Parametro(non ricordo il nome, ma
è uno dei primi nelle prime righe)... a quel punto reimportarlo nel
progetto sarà fruibile.
@Alex


Quella che tu chiami "routine normale" non e' altro che un metodo di classe.
Mai fatto quello che esponi,access-->excel, ma secondo logica non c'e' 
motivo per cui non funzioni. Secondo me pero' MyProc *non*  e' un metodo 
dell'oggetto Excel ma un metodo dello specifico oggetto Document in cui 
hai definito la funzione (metodo). La stessa cosa e' valida per access. 
Se hai inserito un modulo/funzione su uno specifico mdb non e' e non 
puo' essere che diventi patrimonio di access ma e' patrimonio di quello 
specifico mdb, puo essere utilizzata in altri mdb ma tali mdbs devono 
avere un riferimento all'mdb in cui e' definita.
Con le classi e' ancora piu' complicato perche' una classe che e' 
definita in un altro mdb se provi a richiamarla da errore e bisogna 
usare un "giragliintorno" per poterlo fare.
-- 
ac (x=y-1)

 usare un "giragliintorno" per poterlo fare.
Pero' se volessi esporre *proprieta'* invece di metodi, non credi
che in tal caso occorra scrivere una property let in un modulo
di classe e non in un modulo normale ?
O anche in tal caso basterebbe dichiarare una variabile pubblica
X in un modulo pubblico M e poi semplicemente richiamare la
X con la solita sintassi : componente.X ?

 X con la solita sintassi : componente.X ?
Appunto come farebbe uno smanettone...
Nel panorama della programmazione ObjectOriented cosa mi rappresenta
dichiarare una Variabile Public...?
Di fatto è la versione comoda che si usa invece di chiamarla con il
nome che dovrebbe... Public Property Let/Get/Set...
Ovvio che è una palla pazzesca, quindi si abbrevia facendo come hai
detto, ma è questa l'eccezione, la regola è l'altra..
@Alex

 di classe e non in un modulo normale ?
Cioe' ho detto che sarebbe meglio (anche se in tono di domanda)
scrivere delle property let INVECE di semplici variabili pubbliche.

 progetto sarà fruibile.
Scusa,  ma non capito nulla.
E poi, perche' sussiste questa differenza tra accessibilita' tra
routine scritte in moduli "normali" e routine scritte in moduli
di classe ?


Perchè di Default i Moduli di Classe non sono Pubblicati
all'esterno... verificalo di persona, esportalo in TXT e leggi la
Properties
Attribute VB_Name = "clsCalendar"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False    < ------------- QUESTA è QUELLA CHE
SERVE METTERE A TRUE
Questi Attributi non sono previsti per i Moduli Normali....( a parte
il Nome)
Per il resto allora abbiamo detto lastessa cosa.
@Alex