Newsgroup: it.comp.lang.visual-basic
Titolo: Problema con riferimento Excel

Ciao a tutti,
ho realizzato un'applicazione che si collega a Microsoft Excel.
Durante lo sviluppo ho inserito il riferimento alla libreria di Excel.
Poi ho deciso di toglierlo e quindi dichiarare tutte le variabili con 
"Object"
cioč:
Dim Excel As Object, Workbooks As Object, Sheet As Object
funziona tutto tranne la seguente riga (che dovrebbe inserire 
un'interruzione di pagina):
Sheet.ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
in quanto mi dice che ActiveCell non č una variabile definita.
Se scrivo Dim ActiveCell as Object, non emette nessun errore ma non viene 
inserita nessuna interruzione di pagina....
Avete qualche consiglio in merito?
Grazie in anticipo 

 ha scritto nel messaggio
news:474b3dc5$0$4798$4faf...@reader4.news.tin.it...

'Dim ActiveCell As Object' puň anche andare bene,
ma devi usare poi il commando 'Set ActiveCell = Sheet.ActiveCell' per
esempio,
o probabilmente va bene anche 'Sheet.ActiveCell'
--
Ciao Fede
By Chicco Production
http://www.webalice.it/bychicco/

 o probabilmente va bene anche 'Sheet.ActiveCell'
Avevo già provato con entrambi ma non funziona lo stesso!
Non viene emesso nessun errore da VB, ma purtroppo non fa nemmeno quello che 
deve fare...
Non è che invece di 'Dim ActiveCell As Object' occorra dichiararla in modo 
diverso?
Grazie 

  <cut>
ActiveCell č una proprietą, non un oggetto.
Vedere la guida del vba di Excel per maggiori
delucidazioni.
    Dim objExcel As Object
    Dim objWorkbook As Object
    Dim objWorksheet As Object
    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open("C:\tuoFile.xls")
    Set objWorksheet = objWorkbook.WorkSheets("Foglio1")
    objExcel.Visible = True
    With objWorksheet
        MsgBox objExcel.ActiveCell.Address '<<===
    End With
    'Resto drel codice
-- 
---------------------------
Mauro Gamberini
http://www.riolab.org/
 

Mi sa che ti sbagli...
--
Ciao Fede
By Chicco Production
http://www.webalice.it/bychicco/
"Mauro Gamberini" <maurogsc...@RIMUOVEREaliceposta.it> ha scritto nel
messaggio news:474bddc7$0$4790$4faf...@reader4.news.tin.it...


 delucidazioni.
Prego vedere il 'visualizzatore oggetti' per maggiori delucidazioni.
ActiveCell non è una proprietà, è un OGGETTO;
è esattamente la classe denominata 'Range'.
Quindi puoi tranquillamente usare:
Dim ActiveCell As Object
o
Dim ActiveCell As Range



Parliamo della stessa cosa?
Facendo come dici tu, funziona?
Hai provato?
Dalla guida del vba di Excel:
<on>
Proprietà ActiveCell
Restituisce un oggetto Range che rappresenta la cella attiva nella finestra 
attiva, vale a dire quella in primo piano, o nella finestra specificata. Se 
la finestra non visualizza un foglio di lavoro, questa proprietà non 
produrrà alcun risultato. Ha l'attributo di sola lettura.
</on>



Tu qui dichiari un oggetto al quale
hai asseganto il none ActiveCell, che equivale
a Pippo. Questo active Cell non ha nulla
a che fare con l'ActiveCell in questione.


<cut>
Ho un attimo di tempo e vedo di spiegare meglio:
    Dim objExcel As Object
    Dim objWorkbook As Object
    Dim objWorksheet As Object
    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open("C:\tuoFile.xls")
    Set objWorksheet = objWorkbook.WorkSheets("Foglio1")
    objExcel.Visible = True
    With objWorksheet
        .Cells(2, 2).Select
        Debug.Print objExcel.ActiveCell.Address
        .Cells(10, 10).Select
        Debug.Print objExcel.ActiveCell.Address
    End With
    'resto del codice
Mi andrà a scrivere nella finestra immediata la cella
attiva.
La stessa cosa farà questo:
    Dim objExcel As Object
    Dim objWorkbook As Object
    Dim objWorksheet As Object
    Dim objActiveCell As Object
    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open("C:\tuoFile.xls")
    Set objWorksheet = objWorkbook.WorkSheets("Foglio1")
    objExcel.Visible = True
    With objWorksheet
        .Cells(2, 2).Select
        Set objActiveCell = objExcel.ActiveCell
        Debug.Print objActiveCell.Address
        .Cells(10, 10).Select
        Debug.Print objActiveCell.Address
    End With
    'Resto del codice
Ma i risultati sono ben diversi!!!


         
Debug.Print objActiveCell.
Address


La proprietà è per esempio Address...


         Debug.Print 
objActiveCell.Address
La proprietà è per esempio Address...
Vedo 
che non capisci.
Io non mi sono *dimenticato*,
l'ho fatto 
apposta.
Perchè devo creare un oggetto *inutile*
quando ho una proprietà 
che fa quello che voglio?
Inoltre quell'oggetto deve essere modificato
al 
modificarsi della cella attiva(è questo che volevo
dimostrare).
Tu 
vuoi creare un oggetto Range. Ma perchè?
Se voglio conoscere la cella attiva, 
lo chiedo
alla proprietà ActiveCell che mi mette a disposizione
l'oggetto 
Application. Qui mi sembra debba solo
trovare un riferimento alla cella 
attiva
per impostare una interruzione di pagina.
Inoltre, spero ti sia 
accorto che ActiveCell non
non è oggetto, e neppure una *prorietà* 
del 
foglio come hai provato più
volte di scrivere tu.
E' molto semplice. 
Modulo di codice,
Foglio1.   ActiveCell non 
esiste.
Application.   Ecco ActiveCell
Quindi ActiveCell è 
una proprietà di Application che
restituisce un oggetto Range.
Sul 
fatto della dimenticanza di .Address
hai invece ragione. Distratto dal 
contesto della
discussione. Scusa.


restituisce un oggetto Range.


Su questo punto hai ragione, ci ho ripensato 
dopo.


Ma per la fretta di rispondere...






<cut>


 


Amici. ;-)


Grazie a tutti per le risposte!!
ho risolto con il seguente codice:
                    Dim ActiveCell As Object
                    Set ActiveCell = Excel.ActiveCell
                    Excel.ActiveWindow.SelectedSheets.HPageBreaks.Add 
Before:=ActiveCell
L'errore infatti oltre ad essere in ActiveCell che però un po' ci ero 
arrivato... era anche su ActiveWindows che non è un elemento di Sheet ma di 
Application!
Ancora grazie a tutti.