Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - vb6 - esecuzione loop con tasto command
Forum - Visual Basic 6 - vb6 - esecuzione loop con tasto command

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
eurostar_italia (Normal User)
Rookie


Messaggi: 33
Iscritto: 01/08/2011

Segnala al moderatore
Postato alle 1:04
Lunedì, 01/08/2011

vb6 - esecuzione loop con tasto command
Salve a tutti,
nuovo quesito in arrivo.
sto creando un piccolo programmino in vb,che importa i dati da un foglio excel,legge le relative righe (finchè sono piene,con un ciclo do loop) e inserisce i valori in delle variabili.tutto questo sul form 1 a questo punto passa i valori a delle txtbox sul form2.
l'obiettivo finale è stampare queste txt box.
ora vorrei iniziare il ciclo di lettura righe e di passaggio dati al form2 ma prima di continuare con la lettura delle altre righe,vorrei che l'utente prema un tasto command della form2.
secondo voi è possibile ?
aggiungo il codice che ho scritto
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Command1_Click()
  2. Set statoexcel = New Excel.Application
  3. statoexcel.Visible = False
  4. nomefile = statoexcel.GetOpenFilename
  5. End Sub
  6.  
  7. Private Sub Command2_Click()
  8.  
  9. Set statoworkbook = statoexcel.Workbooks.Open(nomefile)
  10. Set statosheet = statoworkbook.Worksheets(1)
  11. If IsNumeric(statosheet.Cells(4, 1)) = True Then
  12. treno = statosheet.Cells(4, 1)
  13. MsgBox ("Caricato treno : " & treno)
  14.  
  15. i = 4
  16. Do While statosheet.Cells(i, 1) <> ""
  17. nominativo = statosheet.Cells(i, 4)
  18. destinazione = statosheet.Cells(i, 2)
  19. pnr = statosheet.Cells(i, 3)
  20. marca = statosheet.Cells(i, 5)
  21. targa = statosheet.Cells(i, 7)
  22. treno = statosheet.Cells(i, 1)
  23. tipo = statosheet.Cells(i, 6)
  24. data = statosheet.Cells(2, 3)
  25.  
  26. If tipo = 0 Then
  27. Form2.txt_veicolo = "auto"
  28. Else: Form2.txt_veicolo = "moto"
  29. End If
  30.  
  31.  
  32. Form2.txt_nominativo = nominativo
  33. Form2.txt_destinazione = destinazione
  34. Form2.txt_marca = marca
  35. Form2.txt_pnr = pnr
  36. Form2.txt_targa = targa
  37. Form2.txt_treno = treno
  38. Form2.txt_data = data
  39.  
  40. Form2.Show
  41.  
  42. i = i + 1
  43.  
  44. Loop
  45.  
  46.  
  47.  
  48. Else
  49.  
  50.  
  51.  
  52. MsgBox "errore,non è un numero valido"
  53. End If
  54.  
  55. End Sub


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 8:21
Lunedì, 01/08/2011
E' meglio usare un controllo ListView e riempirlo con tutte le righe di dati.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Milmor94 (Normal User)
Rookie


Messaggi: 43
Iscritto: 10/07/2011

Segnala al moderatore
Postato alle 12:29
Lunedì, 01/08/2011
Il codice sembra buono ma ho notato piccoli errori:
1) Dove hai dichiarato le variabili che utilizzi (es. treno, marca, pnr...)??
Se te ne sei dimenticato devi inserire all'inizio:
Codice sorgente - presumibilmente VB.NET

  1. Dim treno as string, dim marca as string, dim pnr as string


dichiarando OGNI singola variabile

2) Tieni presente che nel codice che hai scritto la Form2 è sempre la stessa e i dati vengono caricati sempre su essa. Nel ciclo che hai inserito DoLoop i dati relativi alle 4 righe di excel vengono continuamente rinnovati... Non è che ti ritrovi nella Form 2 solamente i dati della quarta righa di excel???
Credo che questo sia il tuo problema... Allora hai diverse soluzioni:
- elimini il ciclo e metti semplicemente 4 button;
- inizializzi una nuova Form2 all'interno del ciclo, dopo DO (es. Dim FormOutput as new Form2) e anzichè usare "Form2.txt_...." utilizzi "FormOutput.txt_..."

Ultima modifica effettuata da Milmor94 il 01/08/2011 alle 14:05
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:00
Lunedì, 01/08/2011
In questo modo

Testo quotato

Postato originariamente da Milmor94:
Codice sorgente - presumibilmente Visual Basic 6

  1. Dim treno, marca, pnr as string





le prime due variabili sono Variant e la terza è String.

Per dichiararle tutte di tipo String devi scrivere

Codice sorgente - presumibilmente VB.NET

  1. Dim treno As String, marca As String, pnr As String



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Milmor94 (Normal User)
Rookie


Messaggi: 43
Iscritto: 10/07/2011

Segnala al moderatore
Postato alle 14:02
Lunedì, 01/08/2011
Anche Variant allora funziona però... Io in VB.NET uso sempre questo metodo... Magari VB è leggermente diverso... E in questo linguaggio non programmo da molto... Scusate  :(

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:14
Lunedì, 01/08/2011
Testo quotato

Postato originariamente da Milmor94:

Anche Variant allora funziona però...



Sicuramente, perché la variabile diventa di tipo Variant sottotipo String.

Testo quotato

Io in VB.NET uso sempre questo metodo... Magari VB è leggermente diverso... E in questo linguaggio non programmo da molto... Scusate  :(



In VB6 non è come in VB.NET, appunto per questo c'è una sezione apposita.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
eurostar_italia (Normal User)
Rookie


Messaggi: 33
Iscritto: 01/08/2011

Segnala al moderatore
Postato alle 18:24
Lunedì, 01/08/2011
la dichiarazione delle variabili l'ho fatta nella parte generale (magari il termine non è appropriato) e non l'ho copiata xche non volevo incasinare tutto.
come avrete capito non sono espertissimo,però ho pensato di fargli leggere le righe del foglio excel con un ciclo in modo da potergli dire di farlo "finchè sono piene" .
ovviamente passandole alla form2,se tra un loop e l'altro non inserisco un command che mi permette di dare la conferma alla prosecuzione del ciclo,rimarrò solo con l'ultima riga del foglio excel visualizzata.
inizializzare una nuova form,mi crea il problema che se l'utente (dei miei colleghi un pò duri) vedono sparire ogni volta la form impazziscono.
la prima soluzione la preferivo...anche perchè questi dati vanno stampati e questo pulsante mi permetteva di dare il via alla stampa.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:45
Lunedì, 01/08/2011
Testo quotato

Postato originariamente da eurostar_italia:
rimarrò solo con l'ultima riga del foglio excel visualizzata.



Appunto per questo devi usare un controllo che ti permette di visualizzarle tutte, così come se fossero in Excel.

Un controllo ListView sarebbe sufficiente.

http://msdn.microsoft.com/en-us/library/aa443482(v=VS.60). ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Milmor94 (Normal User)
Rookie


Messaggi: 43
Iscritto: 10/07/2011

Segnala al moderatore
Postato alle 20:01
Lunedì, 01/08/2011
Usa il metodo più semplice: nella Form2 crei 4 Controlli Frame e all'interno di ognuno tutte le textbox (o le listbox come suggerisce nessuno). Elimini il ciclo e associ ogni textbox a excel;
in poche parole ripeti 4 volte lo stesso codice:

Form2.txt_Nominativo1 = statosheet.Cells(1, 4)
Form2.txt_Nominativo2 = statosheet.Cells(2, 4)
Form2.txt_Nominativo3 = statosheet.Cells(3, 4)
Form2.txt_Nominativo4 = statosheet.Cells(4, 4)
Form2.txt_Destinazione1 = statosheet.Cells(1, 2)
Form2.txt_Destinazione2 = statosheet.Cells(2, 2)
Form2.txt_Destinazione3 = statosheet.Cells(3, 2)
Form2.txt_Destinazione4 = statosheet.Cells(4, 2)
...E così via...

Credo che sia il metodo migliore: risparmi tempo e non ti complichi troppo il lavoro :k:

Ultima modifica effettuata da Milmor94 il 01/08/2011 alle 20:02
PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo