|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 994
|
Excel e VBA
Hoi bisogno di aiuto con excele vba:sono alle primissime armi.
Per ora sono riuscito a creare una userfom con alcuni comandi all'interno. 1 Una textbox dove voglio inserire la data e fare in modo che mi si inserisca nella prima cella vuota della colonna A 2 Una casella combinata che prende l'elenco in determinate celle (e sono riuscito) e me lo deve inserire a fianco della data immessa prima 3 Una textbox dove inserire l'importo in euro che mi si inserisca nella cella a fianco della precedente In pratica un elenco DATA - CATEGORIA - SPESA Il tutto che si inserisca con un pulsante di conferma nella stessa userform. Chi mi da una mano? P.S: Se mi indicate qualche sito che spieghi ai niubbi come me come imparare da zero è ben accetto:ne ho trovati alcuni ma necessita avere una base già acquisita
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Un esempio di form per l'inserimento dati in excel lo puoi scaricare a questo indirizzo
http://www.exceltip.com/st/Create_Us...Excel/629.html |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
allora... se ho capito bene dovrebbe essere una cosa di questo tipo:
innanzi tutto trovi la prima riga vuota nel foglio: Codice:
Public r As Integer 'dichiaro una variabile pubblica perchè può servire a molte sub
Private Sub UserForm_Initialize()
trova_riga_vuota '<-- richiama la sub per cercare la prima riga vuota
End Sub
Sub trova_riga_vuota()
r = 0
Do
r = r + 1
Loop Until Foglio1.Cells(r, 1) = "" And _
Foglio1.Cells(r, 2) = "" And _
Foglio1.Cells(r, 3) = "" Or r = 5000
'esegue il DO fino a che non trova le prime 3 celle vuote oppure quando r = 5000 (per evitare che vada in overflow)
End Sub
poi passi a inserire semplicemente i dati a quella riga che hai trovato essere vuota: Codice:
Private Sub cmdInserisci_Click() foglio1.cells(r, 1) = txtData.text foglio1.cells(r, 2) = cmbCategoria.value 'suppongo sia una combobox foglio1.cells(r, 3) = txtSpesa.text trova_riga_vuota 'ricontrolla tutte le righe ad ogni inserimento (l'ho aggiunto ora) End Sub
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb Ultima modifica di bio n3t : 05-08-2009 alle 15:31. Motivo: aggiunto trova_riga_vuota |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 994
|
Non sono col mio pc fino a domani comunque intanto ti ringrazio
Una domanda:ho capito come funziona il codice che hai scritto ma mi chiedevo come fare per indicare una determinata colonna:nel senso se io voglio inserire il tutto nella colonna H? |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
ah pensavo sapessi come funziona il foglio di excel.. bhe cmq è molto semplice:
la prima cella in alto a sinistra (A1) ha coordinate 1,1 (il primo indice rappresenta le righe, il secondo invece le colonne). ti faccio altri esempi: cella H4 = 4, 8 cella D9 = 9, 4 e così via... penso sia chiaro no? basta che conti le colonne... se hai altri dubbi chiedi pure
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 994
|
Sono riuscito a provare ma quando mi esce la finestra (che richiamo con una macro e un pulsante dal foglio,giusto?) anche se inserisco dei dati non mi si inseriscono nel foglio...
Io ho copiato il codice che hai messo tu ma probabilmente ho tralasciato qualcosa... I vari textbox eccetera devono avere qualche configurazione oppure vanno lasciati di default? Perdonami ma sono proprio alle primissime armi,credo che questo sistema sia quello che cerco ma purtroppo devo imparare da zero
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
Quote:
cmq posta tutto il codice magari... cosi capiamo meglio EDIT: sarà che magari i nomi dei pulsanti e delle textbox sono diversi
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb Ultima modifica di bio n3t : 05-08-2009 alle 01:22. |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Due accorgimenti : 1. Quando hai dati in forma tabellare, puoi verificare che un "record" sia vuoto o meno semplicemente controllando il .Value o .Text di tutto il Range che rappresenta il record, nel tuo caso un Range("Ax:Cx"). 2. Inutile ricalcolare la posizione della nuova riga in cui scrivere ad ogni inserimento. Con molte righe in elenco diventerà inutilmente lento. Basta farlo una volta sola sull'Initialize della Form, e ad ogni inserimento andato a buon fine, incrementare di 1. In soldoni il codice completo della UserForm sarà qualcosa del genere : Codice:
Private indiceNuovaRiga As Long
Private Sub UserForm_Initialize()
indiceNuovaRiga = 2
Do
If Sheets("Foglio1").Range("A" & indiceNuovaRiga & ":C" & indiceNuovaRiga).Text = "" Then
Exit Do
Else
indiceNuovaRiga = indiceNuovaRiga + 1
End If
Loop
End Sub
Private Sub cmd_inserisci_Click()
Sheets("Foglio1").Range("A" & indiceNuovaRiga).FormulaR1C1 = txt_data.Text
Sheets("Foglio1").Range("B" & indiceNuovaRiga).FormulaR1C1 = cmb_categoria.Text
Sheets("Foglio1").Range("C" & indiceNuovaRiga).FormulaR1C1 = txt_spesa.Text
If indiceNuovaRiga = 65536 Then
MsgBox "Impossibile inserire. Limite max. raggiunto"
cmd_inserisci.Enabled = False
Else
indiceNuovaRiga = indiceNuovaRiga + 1
End If
End Sub
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
si in effetti hai ragione che è più veloce come dici tu... però io ho riscontrato problemi quando andavo a eliminare delle celle o delle righe... a volte venivano sovrascritte intere righe oppure ne venivano lasciate vuote alcune...
quindi el tazar fai attenzione! dipende da quanti dati devi gestire... se si tratta di poche centinaia di righe allora il tempo di controllare una riga vuota è pochissimo... il discorso è forse diverso se gestisci decine di migliaia di dati (ma non lo so con certezza). comunque sia valuta bene e scegli te il più adatto!
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 994
|
Ho semplicemente copiato il codice che mia hai messo tu bio n3t
Codice:
Public r As Integer 'dichiaro una variabile pubblica perchè può servire a molte sub
Private Sub UserForm_Initialize()
trova_riga_vuota '<-- richiama la sub per cercare la prima riga vuota
End Sub
Sub trova_riga_vuota()
r = 0
Do
r = r + 1
Loop Until Foglio1.Cells(r, 1) = "" And _
Foglio1.Cells(r, 2) = "" And _
Foglio1.Cells(r, 3) = "" Or r = 5000
'esegue il DO fino a che non trova le prime 3 celle vuote oppure quando r = 5000 (per evitare che vada in overflow)
End Sub
Private Sub cmdInserisci_Click()
Foglio1.Cells(r, 1) = txtData
Foglio1.Cells(r, 2) = cmbCategoria 'suppongo sia una combobox
Foglio1.Cells(r, 3) = txtSpesa
End Sub
Codice:
Sub inserisci() UserForm1.Show End Sub |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
Quote:
l'ho appena modificato il codice perchè mancava una cosa... ricontrolla ora ti elenco tutti i controlli con i relativi nomi: 1 pulsante chiamato "cmdInserisci" 1 textbox chiamata "txtData" 1 combobox chiamata "cmbCategoria" 1 textbox chiamata "txtSpesa"
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
In ogni caso quel 65536 è un controllo che ho messo puramente a scopo d'esempio. Personalmente non gestirei mai 60'000 voci in una tabella Excel. A quel punto meglio appoggiarsi su una tabella Access... |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 994
|
Funziona
PErò...c'è un però. Quando clicco sull'ok i dati vengono inseriti,ma la finestra non va via,come faccio a farla andare via? |
|
|
|
|
|
#14 | ||
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
Quote:
Quote:
se invece vuoi proprio chiudere lo userform devi scrivere sempre nello stesso punto di prima: unload me alla fine dovresti avere una cosa del genere: Codice:
Private Sub cmdInserisci_Click() foglio1.cells(r, 1) = txtData.text foglio1.cells(r, 2) = cmbCategoria.value 'suppongo sia una combobox foglio1.cells(r, 3) = txtSpesa.text trova_riga_vuota 'ricontrolla tutte le righe ad ogni inserimento (l'ho aggiunto ora) me.hide 'se vuoi semplicemente nasconderlo unload me 'se vuoi proprio chiuderlo End Sub
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb Ultima modifica di bio n3t : 05-08-2009 alle 15:50. |
||
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 994
|
Perfetto,non so come ringraziarti
Se nella caella di spesa inserisco il valore in euro,dove cambio il formato? Se lo cambio solo nella cella di excel mi esce il punto esclamativo quindi penso che debba essere configurato il formato nella textbox giusto? |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
Quote:
Foglio1.Cells(r, 3) = Format(txtSpesa.text, "$ #,##0.00") gli indici del foglio dovrebbero essere giusti ma controlla in ogni caso EDIT: avevo sbagliato a scrivere la textbox
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb Ultima modifica di bio n3t : 05-08-2009 alle 16:05. |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Dec 2006
Messaggi: 994
|
Funziona Grazie
P.S: Avevo corretto da solo txtSpesa |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
ah ok
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:54.




















