Newsgroup: it.comp.lang.visual-basic
Titolo: Flex grid text box

Buongiorno a tutti
Avrei bisogno d'aiuto poichè non riesco ad accontentare il mio datore
non sono proprio un granchè comunque un pò me la cavo ma con le flex
grid (orgomento a me sconosciuto nn so proprio come venirne a capo)
Comunque il problema è:
Ho una flex grid di 9 colonne e n righe volevo all'evento doppio click
il contenuto delle nove celle fosse copia all'interno di 9 textbox come
posso fare aiutatemi per favore
VB6.0


Qualcosa del genere:
 For i = 0 To 8
  Text1(i).Text = grd1.TextMatrix(grd1.Row, i)
 Next
Text1 è un'array di controlli textbox e grd1 è il controllo flexgrid.
William. 

 il contenuto delle nove celle fosse copia all'interno di 9 textbox
Cioč dato che non riesci a fare l'assegnazione direttamente alle celle del 
foglio excel prima assegni alle textbox e poi assegni le textbox a excel?
Un po' contorto, non ti pare?
P.S.: si continua sul thread iniziato: aprirne un'altro facendo morphing non 
č un bel biglietto da visita.
Ciao

1) Complimenti fabio sei bravo pensi di sapere tt?
2) su excel già l'ho portato
3) come ho già detto devo accontentare il mio datore che ne pensa una
ogni tre sec
4) mi pare che aprire una nuova discussione sia più che giusto visto
che trattano di cose diverse
e cmq grazie del consiglio

 posso fare aiutatemi per favore
Private Sub Grid1_DblClick()
    With Grid1
	for i=0 to 8
	  txt(i).text=.TextMatrix(.RowSel, i)
	next i
    End With
End Sub
-- 
DBMS Firebird
VB6 + Ado

William ha scritto:

Grazie William per la risposta ora proverò

Andrea ha scritto:

Grazie molte andrea


William ,scusa , avrei una cosa da chiederti io utilizzo il progrmma
che sto sviluppando per rasferire dei dati dalla flex grid a excel ma
mi da un errore quando vado a cliccare e quindi ad inserire sul foglio
excel un nuovo campo:
Error run time 91
codice:
With xlObject.ActiveWorkbook.ActiveSheet
        <B>Do While ActiveCell.Value <> ""<\b>
                 ActiveCell.Offset(1, 0).Select
                 rig = rig + 1
        Loop
    ActiveCell.Offset(1, 0).Select
   .Range("A2").Select 'Selezioni la cella a2 dove incollare
    .Paste             'incolli la clip
    End With


Guardando qualche thread più indietro c'era esattamente la spiegazione di 
come scrivere nelle celle di un file excel (da cui ho tratto spunto), 
comunque se non ho capito male vuoi fare qualcosa del genere:
Dim xl0 As New Excel.Application
Dim rig As Integer
Dim i As Integer
xl0.Workbooks.Open "c:\nomefile.xls"
With xl0.ActiveSheet
 rig = 1
 Do While .Cells(rig, 1) <> ""
  rig = rig + 1
 Loop
 For i = 0 To 8
  .Cells(rig + i, 1) = grd1.TextMatrix(grd1.Row, i)
 Next
End With
xl0.ActiveWorkbook.Save
xl0.Quit
Set xl0 = Nothing 

 come scrivere nelle celle di un file excel
Certo, l'aveva chiesto lui! ;)
E poi dicono che sono cattivo... :)
Ciao 

E allora fabio nn sai leggere
in questo ho chiesto come si faceva nella text box
poi ho provato il tt
e ha generato un errore lo hai capito questo ??????
Allora ho chiesto spiegazioni sull'errore no sul codice ma sull'errore
se dopo la gente mi risponde con del codice nn te la prendere

 ha scritto nel messaggio

Te l'ho detto prima: stesso argomento stesso thread.
E poi forse non l'hai fatto apposta, ma ripostando lo stesso problema con un 
nome diverso si da l'impressione di fregarsene delle risposte dell'altro 
thread per riprovare a gettare l'amo.
Mica me la prendo con Wiliam, che appunto, ingenuamente ha creduto che foste 
due persone diverse e ti ha fatto notare che il problema era giŕ stato posto 
poco prima.
Comunque l'errore 91 significa che non hai istanziato la variabile, cioč non 
hai fatto la New.
Ciao 


Ho risposto con del codice perché nel codice che hai postato tu sicuramente 
mancava qualcosa e quindi non si capiva bene nè cosa ci fosse prima e nè 
cosa ci fosse dopo di quella roba che hai scritto, e poi l'utilizzo del 
paste per scrivere un valore in una cella di excel mi lasciava molto 
perplesso visto che dovevi prendere i valori da una flexgrid.
Comunque la prossima volta che posti del codice almeno le dichiarazioni 
degli oggetti/variabili mettile.
William. 

 Ciao
Codice:
Private Sub MSFlexGrid1_DblClick()
  Dim xlObject    As Excel.Application
   Dim xlWB        As Excel.Workbook
    Set xlObject = New Excel.Application
    xlObject.Workbooks.Open "d:\db\Cartel1.xls"
    Clipboard.Clear 'Clear the Clipboard
    With MSFlexGrid1
       .Col = ColSel            'Prima colonna
       .Row = .RowSel           'Riga selezionata
        .ColSel = .Cols - 1     'tutte le colonne della riga
selezionata
       Clipboard.SetText .Clip  'salvi sulla clip
    End With
    With xlObject.ActiveWorkbook.ActiveSheet
L'errore viene generato qui quando clicco una seconda volta che devo
fare?????
Do While ActiveCell.Value <> ""
                ActiveCell.Offset(1, 0).Select
                rig = rig + 1
        Loop
   ActiveCell.Offset(1, 0).Select
   .Range("A2").Select 'Selezioni la cella a2 dove incollare
   .Paste              'incolli la clip
    End With
                       'xlObject.Visible = True
        xlObject.Application.Quit
    Set xlObject = Nothing
End Sub

 End Sub
Il fatto però di usare la clipboard per copiare dei valori a cui potresti 
accedere direttamente mi lascia perplesso. La clipboard è un'area di memoria 
condivisa messa a disposizione dal sistema operativo ed è utilizzabile da 
chiunque, non mi sembra un metodo molto sicuro per scambiare dati 
specialmente quando si può farlo senza bisogno di questo appoggio. Se quel 
file XLS diventasse molto grande e ci volessero alcuni secondi al ciclo per 
raggiungere le celle vuote daresti la possibilità all'utente e ad altri 
programmi di modificarti la clipboard prima che tu abbia fatto il paste e 
rischieresti di fare il paste di qualcosa che non c'entra nulla.
William. 

 William.
William Grazie per l'aiuto quindi cosa mi consigli?_? io non ho + idea
spomato dal caldo e dall'afa che nell'ufficio aleggiano senza
climatizzatore ^^suda anke il cervello^^

 climatizzatore ^^suda anke il cervello^^
Bè il codice che ti avevo scritto ieri in risposta al tuo messaggio 
riguardante l'errore 91 fa esattamente quello che vuoi tu... Devi solo 
modificarlo per fare in modo che ti metta i valori in riga anziché in 
colonna, da quanto ho capito li vuoi in formato tabellare esattamente come 
sono nel flexgrid.
William. 

 William.
Il problema sta tt li utlizzo la clipboard proprio perkè nn riesco a
mettere in riga quei cavolo di campi nn è che potresti darmi un dritta
tu?Se si grazie se nn puoi per mancanza di tempo grazie lo stesso di tt
i consigli che mihai dato^^

 come sono nel flexgrid.
Praticamente diventa cosě:
Dim xl0 As New Excel.Application
Dim rig As Integer
Dim i As Integer
xl0.Workbooks.Open "c:\nomefile.xls"
With xl0.ActiveSheet
 rig = 1
 Do While .Cells(rig, 1) <> ""
  rig = rig + 1
 Loop
 For i = 0 To 8
  .Cells(rig, i + 1) = grd1.TextMatrix(grd1.Row, i)
 Next
End With
xl0.ActiveWorkbook.Save
xl0.Quit
Set xl0 = Nothing
Appunto:
io il controllo per cercare la riga vuota l'ho fatto controllando il valore 
della cella nella colonna 1, se per caso quella cella potesse contenere 
valori vuoti questo provocherebbe la sovrascrittura dell'intera riga quindi 
se una o piů celle potessero contenere valori vuoti potrebbe essere 
conveniente estendere il controllo per individuare la riga vuota a piů celle 
o a tutte (vedi tu).
William. 

 William.
Grazie di tt però quando copia in excel lo copia una colonna + a
destra:
codice descrizione .....
          m.....           Pezzo
dove M.....è il codice e pezzo è la descrizione come faccio a
risolvere questo bug?
e come faccio per accodare i nuovi dati?

Potrei usare questa macro per cercare la rigapulita
Do While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
rig = rig + 1
Loop
ma è quello che mi dava errore se ci metto i punti come mi avevi
consigliato mi da errore come posso fare??? se no ogni volta che
inserisco una riga nuova si sovrappone a quella prima e ho sempre una
riga spostata + a destra 
grazie 
Roberto=restart

Risolto tt tranne l'accodamento :( illuminami
Sir William il grande^^
 Mi si sovrascrivono:(

 e come faccio per accodare i nuovi dati?
I dati vengono già accodati, ogni volta che esegui la funzione viene cercata 
la riga vuota successiva.
William. 


Se usi activecell viene comunque fatto sempre su una sola cella.
William. 


Postami il codice che utilizzi adesso cosě vediamo se puň esserci qualche 
svista.
Ti risponderň poi piů tardi, ora vado a mangiare.
William. 

William ha scritto:

l'ho provato
ora la colonna che prima saltava nn la salta + ma idati nn vengono
accodati vengono sovrascritti nn so perkè credo che sia un bug del
programma ma nn trovo falle^^

William ti ringrazio
di tt ora però siccome il datore c'ha le solite ideacce come faccio a
fare l'inserimento da flexgrid a textbox
tu avevi detto con l'array di text box ma nn so cosa sia
anche perkè la mia preparazione è molto scolastica poichè la mia
preparazione si è sbilanciata un pò troppo sulla sistemistica ma ora
sto cercando di riapparare la situazione
grazie per l'aiuto che mi hai dato e che mi potrai dare....

 tu avevi detto con l'array di text box ma nn so cosa sia
Per spiegarti in pratica e in modo rapido come fare un array di textbox:
1) crea una textbox
2) selezioni la textbox e fai ctrl-c (copia)
3) fai ctrl-v (incolla)
4) quando ti chiede se vuoi creare un array di controlli digli di sì
5) fatto ciò noterai che i controlli hanno lo stesso nome e fra parentesi 
hanno un numero (indice), tale indice non è altro che la proprietà index 
dell'oggetto.
Dopodiché con un ciclo tipo questo vai a riempire tutte le textbox con i 
valori presenti nella riga del flexgrid:
 For i = 0 To 8
  Text1(i).Text = grd1.TextMatrix(grd1.Row, i)
 Next
William. 

 programma ma nn trovo falle^^
Scrivimi il codice che utilizzi adesso.
William. 

William ha scritto:

Torno ora dalla pausa pranzo ora prova l'array e ti faccio sapere cmq
l'errore del codice l'ho trovato^^ ora accoda perfettamente^

 l'errore del codice l'ho trovato^^ ora accoda perfettamente^
Sì, però non puoi usare ActiveCell per cercare le celle vuote perché quella 
è la cella selezionata nel momento in cui apri il foglio di excel, per farti 
un esempio: Apri il foglio usando excel e clicca ad esempio sulla cella Q234 
poi salva il file. In teoria adesso quando apri il file da VB la ActiveCell 
selezionata sarà la Q234 e secondo me ti va ad inserire i dati in quella 
posizione.
William. 

William ha scritto:

William ti ringrazio molto senza il tuo aiuto starei qui ancora a
brancolare nel buio ora vado a fare il distrattore di virus^^ ti
ringrazio ancora ciao e alla prox^^

Ciao William scusa se ti disturbo ancora c'è un modo per generalizzare
'apertura dei file cioè:
Io per aprire un file di testo faccio open percorso\nomefile
come posso fare per utilizzare una path generica

Restart ha scritto:

Non so se ho capito bene ma se usi una variabile di tipo stringa per 
fare l'Open hai la possibilità di assegnare a quella variabile il valore 
che ti pare.
William.