Newsgroup: it.comp.lang.visual-basic
Titolo: Sheet1: Visualizzare un particolare range di celle

Buongiorno.
In VB6 ho un controllo sheet1 in cui, all'avvio del programma, vengono
inserite informazioni presenti in un foglio excel già esistente. La
dimensione di sheet1 permette di visualizzare solo 15 righe alla
volta. Se faccio doppio click sullo sheet posso scorrere il foglio in
giù, ma se volessi fare questa specie di scrolling con l'uso di un
pulsante, quale istruzione mi dà questa possibilità ? Pensavo che
potesse farlo la select (impostando la selezione sulla zona non
esposta dello sheet1) ma mi pare che questa funzioni solo se applicata
ad un foglio excel vero e proprio, se la applico al controllo sheet mi
dà errore.
Potete darmi una mano ?
Grazie
Antonio

 Potete darmi una mano ?
Per queste cose di norma si usa il registratore di Macro da excel, si vede
che codice costruisce e lo si applica a vb6.
Es in VBA genera:
ActiveWindow.SmallScroll Down:=12
Ovviamente devi assegnare gli oggetti, sarŕ tipo:
Set xlApp = CreateObject("Excel.Application")
xlApp.ActiveWindow.SmallScroll Down:=12

 xlApp.ActiveWindow.SmallScroll Down:=12
Proverò, ma a naso mi sembra che non funzioni. Penso questo perchè
anche la select, di cui parlavo prima, se ho un foglio Excel attivo
funziona tranquillamente sul foglio stesso, ovvero nella finestra in
cui lavora Excel, ma nel mio caso ho Excel aperto, ma il foglio di
lavoro non è su Excel ma sulla mia maschera. Anche andare in edit
sullo sheet1 non mi riesce farlo col pulsante. Se faccio doppio click
su di esso vado in edit, scorro in giu il foglio e quando passo il
focus su un altro controllo, su sheet1 mi rimangono visualizzate le
celle sulle quali mi ero posizionato. Ma tutto questo riseco a farlo
solo in modo interattivo. Come fare per andare in edit sul foglio
sheet1 ?
Grazie comunque. Se hai altri suggerimenti...
Antonio

 sheet1 ?
Ma che vuol dire andare in edit?
Non ho capito quello che vuoi fare.
Il trucco da provare è avviare il registrare di macro.
Fai la procedura a mano, stoppi e guardi il codice che ti viene fuori.
Di norma c'ho sempre fatto tutto:
Windows(1).LargeScroll down:=100
Windows("File.xls").LargeScroll down:=100

On 5 Ott, 16:47, "Andrea [Work]" <andrea.isworkDELET...@gmail.invalid>
wrote:

Sì, anch'io faccio sempre così... e quando ho scelto di utilizzare il
controllo sheet pensavo che non avrei avuto questi inconvenienti di
cui parlo. Quello che dici tu va benissimo se la mia applicazione si
collega ad un foglio excel che puoi vedere aperto nella finestra di
excel. La mia difficoltà si verifica quando il foglio excel è
inglobato nella maschera, sotto forma di controllo sheet. Mettendo
questo controllo nel mio form, mi si presenta una specie di piccolo
excel nella mia finestra, nel quale se voglio scrivere qualcosa nella
cella A1 utilizzo lo stesso meccanismo di come se volessi scrivere nel
foglio esterno al mio programma, ma purtroppo se voglio far scorrere
il foglio non posso fare altro che fare doppio click sul controllo, a
questo punto il controllo stesso cambia leggermente forma ed
assomiglia di più ad excel e poi posso fare click sui pulsanti di
scrolling. Il problema è che il programma, girando, mi va a scrivere
qualcosa anche in celle non presenti sullo schermo, diciamo dalla riga
16 alla 30. In questo caso il programma funziona, ma io non vedo i
valori che il programma sta inserendo nelle celle che rimangono fuori
dalla zona visibile. Sarebbe bello se, non appena inizio a scrivere
nelle righe dalla 16 alla 30, il programma potesse fare lo scrolling
senza l'intervento manuale dell'operatore.
Se hai due minuti, per favore prova ad utilizzare il controllo sheet e
vedrai questo inconveniente.
In questo momento sono su un computer sul quale non ho
quell'applicazione che sto realizzando, appena possibile proverò il
tuo metodo e ti farò sapere. Se intanto ti viene qualche altra idea,
ti prego di farmela sapere.
Grazie e ciao
Antonio

 inglobato nella maschera, sotto forma di controllo sheet.
<cut>
Se(se) ti riferisci al controllo: Spreadsheet
Il controllo in questione è un controllo Office WEB Component che nulla ha a 
che fare con i fogli di Excel.
E' un oggetto diverso dal foglio di Excel, con metodi, proprietà, eventi 
propri.
Se(se) il controllo è quello di cui ho scritto, aggiungi un pulsante
alla UserForm e questo è il suo codice:
Private Sub CommandButton1_Click()
    Me.Spreadsheet1.ActiveWindow.SmallScroll Down:=15
End Sub
Modifica il nome del controllo se diverso.
-- 
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
 

"Mauro Gamberini" <maurogsc...@RIMUOVEREaliceposta.it> ha scritto nel 
messaggio news:i8i4mc$mu4$1...@news.eternal-september.org...

Grazie Mauro, ma non è il controllo di cui parli tu. In questo momento sono 
su un pc diverso da quello della prova, quindi vado un po' a memoria di 
quello che ho fatto.
Ho aggiunto il componente 'Foglio di lavoro excel' (il cui nome file ricordo 
bene è 'office12\excel.exe') e così, fra gli strumenti disponibili, si è 
generata un'icona con la X verde di excel. Penso proprio che la Microsoft 
intenda far utilizzare questo controllo per poter inglobare in un form un 
foglio excel.
Inserendo questo controllo sulla mia maschera, gli ho lasciato il nome 
sheet1 ed ho visto che ha pochissime proprietà da poter modificare.
Se potete provare ad utilizzarlo, non è necessario aggiungere nessun codice. 
Il foglio si presenta tutto grigio e, per poter modificare una qualsiasi 
cella, bisogna fare doppio click su di esso. Così facendo il foglio diventa 
più simile ad un foglio excel e sono disponibili anche i pulsanti di 
scrolling. Se per esempio lo fai scorrere molto in giù, come per vedere le 
righe dalla 20 alla 30, appena passi il focus su un altro controllo il 
foglio ritorna ad essere grigio ma ora visualizza le righe dalla 20 alla 30.
Allora, tanto per inventare un'alternativa alla mia domanda, quali 
istruzioni dovrei inserire in un pulsante perchè quel foglio mi vada a 
visualizzare le righe da 40 a 50, senza che io debba fare doppio click su di 
esso e scegliere manualmente le righe da visualizzare ?
Grazie a tutti per i consigli che potrete suggerirmi
Antonio


<cut>
Io non ho capito se siamo nel vb(a) di Excel o in VB, scusa.
E prova, per favore, di essere più preciso sul nome
del controllo che hai inserito. Grazie.


"Mauro Gamberini" <maurogsc...@RIMUOVEREaliceposta.it> ha scritto nel 
messaggio news:i8ifnv$3a4$1...@news.eternal-september.org...

Scusami Mauro: ho risposto già 2 volte da un altro pc, google mi dice che la 
risposta è stata inviata con successo, ma continuo a non vederla. Provo a 
riscriverla dal pc di casa.
Non mi trovo nel VBA di Excel, bensì in VB6 vero e proprio. Nella schermata 
iniziale del VB6 sono andato sul menu Progetto - Componenti... e qui nella 
scheda Oggetti inseribili. Ho selezionato 'Foglio di lavoro di Mricosoft 
Office Excel' e nella parte bassa della finestra è comparso il nome del file 
'C:\PROGR....\Office 12\EXCEL.EXE': questo mi ha convinto che è sicuramente 
lo strumento consigliato da Microsoft per poter inglobare in una maschera un 
foglio excel.
Inserendo nella maschera questo controllo è come avere un picco excel, ma 
non esterno alla form, bensì parte integrante. Questa peculiarità mi 
garantisce di poter trattare il foglio con maggior rigore, in quanto non lo 
gestisci con Excel vero e proprio e quindi non hai a disposizione tutte le 
funzionalità che ti dà Excel. Purtroppo però non riesco ad usarlo come 
vorrei io, cioè tutto da programma e con pulsanti. Per esempio... in questo 
foglio il programma mette un contrassegno in colonna 1 sulle righe 
elaborate. Mentre il programma gira, vedo le righe dalla 1 alla 15 (quelle 
visibili sullo schermo) che si etichettano col contrassegno, ma poi il 
programma continua fino alla riga 1000 ma non vedo il contrassegno perchè 
non riesco a fare scendere la zona da visualizzare. Il programma funziona, 
ma non riesco a seguire a quale punto si trova...
Se hai 2 minuti da dedicarmi, puoi provare anche tu ad utilizzare questo 
controllo ? Se poi hai qualche altra idea in merito, gradisco suggerimenti.
Grazie e ciao
Antonio


Non ho mai utilizzato quella procedura. Se mi serve un file/foglio
di Excel, lo apro e utilizzo da codice. Mi dispiace ma non
ho una risposta.
-- 
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/threads
 

antoanto ha usato la sua tastiera per scrivere :

Mi sembra tutto molto surreale.
Ma hai provato a invocare il
ActiveWindow.SmallScroll Down:=39
ovviamente adeguando l'object model al tuo codice?
Perchè ti è stato suggerito 3 giorni fa, e non ho ancora visto un tuo 
"non funziona".
Se "non funziona", ti prego di postare il codice esatto che non 
funzionerebbe e l'errore che ti viene eventualmente sollevato.
Alberto

 ha scritto nel messaggio 
news:i8mrnr$qec$1...@tdi.cu.mi.it...

Ho scoperto di non saper usare Google per rispondere al gruppo. Riscrivo la 
risposta sul pc di casa, col vecchio Outlook Express...
Scusami, è vero, non ho scritto che non funziona, ma purtroppo... non 
funziona. Provo a sintetizzare quanto ho scritto nel programma per la 
gestione del foglio excel inglobato.
Come ho detto in un precedente thread, bisogna inserire fra i componenti il 
"Foglio di lavoro di Microsoft Office Excel". Così fra gli strumenti 
utilizzabili si abilita anche il foglio Sheet che, inserendone uno sulla 
maschera, lo chiama Sheet1. Ho lasciato questo nome.
Le istruzioni sono le seguenti.
nel modulo delle dichiarative:
    Global OggettoExcel As Excel.Workbook
    Global CartellaExcel As Excel.Workbook
    Global FoglioExcel As Excel.Worksheet
nel Form_Load:
    Set CartellaExcel = Me.Sheet1.object
    Set FoglioExcel = CartellaExcel.Worksheets(1)
nel pulsante Carica:
    Set OggettoExcel = Application.Workbooks.Open(App.Path & "\" & "il 
foglio excel che voglio caricare.xls")
    OggettoExcel.Application.DisplayAlerts = False
    OggettoExcel.Worksheets(1).Cells.Copy
    FoglioExcel.PasteSpecial xlPasteValues
    OggettoExcel.Close
    Set OggettoExcel = Nothing
' con queste prime 6 istruzioni viene letto il foglio e copiato sul 
controllo sheet1 presente sulla maschera
nel pulsante Elabora:
    Dim RigoExcel As Integer
    RigoExcel = 1
riprova:
    If LCase$(FoglioExcel.Cells(RigoExcel, 8)) = "x" Then
        RigoExcel = RigoExcel + 1
        If RigoExcel <= 1000 Then GoTo riprova
        GoTo esci
    End If
...
' qui elabora il rigo in esame del foglio excel e poi lo contrassegna come 
"elaborato"
' se abilito la seguente istruzione ho l'errore "Metodo 'Cells' dell'oggetto 
'_Global' non riuscito"
' FoglioExcel.Range(Cells(rigoexcel + 1, 8), Cells(rigoexcel + 1, 8)).Select
' se abilito la seguente istruzione ho l'errore "Errore nel metodo activate 
per la classe Range"
' FoglioExcel.Range("E8:E8").Activate
' se abilito le seguenti istruzioni, sulla seconda ho l'errore "Variabile 
oggetto o variabile del blocco With non impostata"
' FoglioExcel.Activate
' ActiveWindow.SmallScroll 10
...
' qui imposta il contrassegno di riga elaborata
' (se voglio che un rigo non sia elaborato è sufficiente fare doppio click 
sullo sheet1 e mettere il contrassegno 'x' sulla riga da scartare)
    FoglioExcel.Cells(RigoExcel, 8) = "x"
    RigoExcel = RigoExcel + 1
    If RigoExcel <= 1000 Then GoTo riprova
Senza abilitare quelle particolari istruzioni il programma non va in errore, 
ma vedo che viene messo il contrassegno 'x' solo sulle prime righe, sulle 
altre viene messo ugualmente, ma io non lo posso vedere fino alla fine del 
programma e poi, facendo doppio click sullo sheet1, posso spostarmi in giù e 
vedere le altre righe.
Scusate la prolissità del messaggio, ho cercato di depurarlo di quanto non 
pertinente in questo momento, ma meno di questo non sono riuscito a fare.
Saluti
Antonio

 - Mostra testo citato -
Scusami, è vero, non ho scritto che non funziona, ma purtroppo... non
funziona. Provo a sintetizzare quanto ho scritto nel programma per la
gestione del foglio excel inglobato.
Come ho detto in un precedente thread, bisogna inserire fra i
componenti il "Foglio di lavoro di Microsoft Office Excel". Così fra
gli strumenti utilizzabili si abilita anche il floglio Sheet che,











 > messaggionews:i8ifnv$3a4$1...@news.eternal-september.org...



 ' ActiveWindow.SmallScroll 10
E' evidente che hai l'errore di oggetto non esistente...
Ho scritto che devi adeguare l'object model, stai usando un oggetto 
"foglioexcel" da VB6, non stai eseguendo in vba, quindi l'istruzione 
ricavata dal registratore di macro va applicata all'oggetto giusto.
Infatti avevo scritto: "ovviamente adeguando l'object model al tuo 
codice". Tu hai fatto un copiaincolla.
Adesso, con calma, ti metti lì e provi ad usare riferimenti del tuo 
oggetto, navigando nell'object model fino ad arrivare a qualcosa che 
sia dello stesso tipo di activewindow di vba.
Che potrebbe anche essere
FoglioExcel.Smallscroll 10
ma anche
FoglioExcel.CurrentWindow.Smalscroll 10
o cose del genere...
Su, forza...
Alberto


Ciao Alberto, proprio non ci riesco in questa avventura :-((((
Ho invalidato le 3 dichiarative global ed inserito le seguenti 3 nel
codice della maschera:
Dim CartellaExcel As Excel.Workbook
Dim FoglioExcel As Excel.Worksheet
Dim OggettoExcel As Excel.Workbook
così da poter vedere questi oggetti nel visualizzatore oggetti. Ho
inserito uno stop dopo il caricamento del foglio excel e così posso
visualizzare gli oggetti ed immettere istruzioni immediate.
Smallscroll lo trovo qui:
FoglioExcel.Application.ActiveWindow.SmallScroll 10... provato ad
eseguire, mi dà il solito errore "variabile oggetto non impostato".
Non capisco perchè non sia impostato, visto che all'inizio ci sono le
2 istruzioni:
    Set CartellaExcel = Me.Sheet1.object
    Set FoglioExcel = CartellaExcel.Worksheets(1)
controllo le variabili locali e, sotto foglioexcel.application trovo
tutte le 'activecell', 'activedialog', 'activesheet', 'activewindow',
etc. impostate a nothing: come mai ? :-(((
Allora lancio un "Foglioexcel.activate"... e dopo ancora tutto
nothing. Ma come diavolo si farà a referenziare foglioexcel sullo
sheet1 della maschera ?
Ciao e grazie
Antonio (scoraggiato, molto scoraggiato)

 sheet1 della maschera ?
Non ho tempo di rilleggermi tutto, io però lo uso in questo modo:
Dim exclApp as Excel.Application
    With exclApp
        With .ActiveWorkbook
            Set FoglioExcel = .Worksheets.Add
	End With
    End With
E poi da exclApp ho le varie proprietà settate.

On 11 Ott, 12:05, "Andrea [Work]"

Scusate il ritardo con cui rispondo. Faccio il punto della situazione.
Ho un controllo Sheet che dovrebbe essere il tipo di controllo da
utilizzare per poter inglobare in una maschera un foglio excel. Poi ho
tutta una serie di istruzioni per poter manipolare quel foglio, ma
manca l'istruzione basilare, cioè quella che crea l'oggetto excel. Il
motivo per cui non utilizzo un createobject sta nel fatto che lo sheet
dovrebbe già di per sè essere un oggetto excel e lanciare il
createobject mi genererebbe un duplicato di excel, mentre io avrei
bisogno di un solo excel, ma incardinato sul controllo sheet. Anche
l'ultimo consiglio ricevuto da Andrea non ha sortito l'esito sperato.
Quasi tutti gli oggetti derivati da sheet sono nothing, riesco solo a
mettere qualcosa nelle celle, ma non posso utilizzare comandi di
livello superiore. E' come se il controllo sheet fosse un sottoinsieme
di excel e permette di fare solo alcune poche cose.
Non sapendo come fare a creare un nuovo oggetto excel incardinato sul
controllo sheet, cambio sistema e provo ad utilizzare un controllo OLE
(al posto dello sheet), che suppongo non mi darà i problemi che mi sta
dando sheet.
Grazie per i consigli che mi avete dato
Antonio