View Full Version : [VBA][EXCEL] codice variabile per scrivere celle e formati particolari
radeon_snorky
31-07-2009, 10:19
spero che la sezione sia quella giusta!
ho realizzato uno scadenziario per gestire le pratiche d'ufficio, ora inserisco il numero della pratica a mano ma vorrei che fosse automatico.
09
num data oggetto rif data fine ecc
001/09 29/07/09 pippo pluto 30/07/09 ecc
mi spiego, vorrei poter associare un codice ad una particolare cella.. ma che cambia a seconda del fatto che se ne sia scritta una precedente (che è quella con l'ultimo numero di pratica inserita) per evitare lungaggini programmatorie o casini vari, potrei già inserire una prima riga già tutta compilata...
al click sulla cella vuota (sotto quella già scritta) il codice legge la cella immediatamente sopra e scrive il testo aumentato di 1 (formato XXX/AA, X=cifre A=anno)
la prima cella in alto è =OGGI() con formato AA, se servisse...
posso creare del codice anche per vincolare la colonna "rif" ad una lista di nomi (anche scritti nel codice stesso, tanto sono pochi) e avere una listbox?
grazie dell'aiuto che vorrete darmi!
edit:
intanto mi sto informando...
[B1] = [B1] + 1
[E1] = Format([B1], "000") & "/" & Mid(Year(Now()), 3, 2)
in E1 scrive proprio quello di cui ho bisogno... prendendolo da B1 aumentato di 1... ma nell'esempio trovato il codice è associato all'apertura del file... a me serve di continuo ma solo sulla colonna "num"... e che abbia i riferimenti alle celle che via via si adattano al contenuto!
Io vedrei bene un sistema di inserimento tramite UserForm, magari con foglio protetto.
In questo modo potresti intercettare ogni errore di battitura e inoltre non avresti più il problema di dover inserire la prima riga a mano... ;)
radeon_snorky
31-07-2009, 17:21
Io vedrei bene un sistema di inserimento tramite UserForm, magari con foglio protetto.
In questo modo potresti intercettare ogni errore di battitura e inoltre non avresti più il problema di dover inserire la prima riga a mano... ;)ma così ricado nella rete del nel vb... net! :D ricordi? http://www.hwupgrade.it/forum/showthread.php?t=1907442
potrei però riciclare un poco di quel progetto e riadattarlo ad un foglio excel, così sarebbe più digeribile...
spero che la sezione sia quella giusta!
ho realizzato uno scadenziario per gestire le pratiche d'ufficio, ora inserisco il numero della pratica a mano ma vorrei che fosse automatico.
09
num data oggetto rif data fine ecc
001/09 29/07/09 pippo pluto 30/07/09 ecc
mi spiego, vorrei poter associare un codice ad una particolare cella.. ma che cambia a seconda del fatto che se ne sia scritta una precedente (che è quella con l'ultimo numero di pratica inserita) per evitare lungaggini programmatorie o casini vari, potrei già inserire una prima riga già tutta compilata...
al click sulla cella vuota (sotto quella già scritta) il codice legge la cella immediatamente sopra e scrive il testo aumentato di 1 (formato XXX/AA, X=cifre A=anno)
la prima cella in alto è =OGGI() con formato AA, se servisse...
posso creare del codice anche per vincolare la colonna "rif" ad una lista di nomi (anche scritti nel codice stesso, tanto sono pochi) e avere una listbox?
grazie dell'aiuto che vorrete darmi!
edit:
intanto mi sto informando...
[B1] = [B1] + 1
[E1] = Format([B1], "000") & "/" & Mid(Year(Now()), 3, 2)
in E1 scrive proprio quello di cui ho bisogno... prendendolo da B1 aumentato di 1... ma nell'esempio trovato il codice è associato all'apertura del file... a me serve di continuo ma solo sulla colonna "num"... e che abbia i riferimenti alle celle che via via si adattano al contenuto!
Clicca con il tasto destro del mouse sul foglio di lavoro contenente lo scadenzario, seleziona "Visualizza codice" e ricopiaci questo:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim myCel As Range
Dim Prec
Set myCel = Range("A1").End(xlDown).Offset(1)
If Not Intersect(Target, myCel) Is Nothing Then
Prec = Range("A1").End(xlDown).Value
myCel.Value = Format(CLng(Left(Prec, 3)) + 1, "000") & Right(Prec, 3)
End If
End Sub
fa ciò che chiedi, ma con un doppio click anzichè uno e non devi lasciare celle vuote.
In alternativa, molto meglio secondo me, scrivi il primo numero di registro in A3 (secondo il tuo esempio) e in A4 scrivi:
=SE(O(A3="";B4="");"";TESTO(SINISTRA(A3;3)+1;"000")&"/"&TESTO(OGGI();"aa"))
e trascina in basso, quando in colonna B della riga successiva all'ultima scrittura inserirai la data nella corrispondente cella di colonna A ti comparirà il numero di pratica aumentato di 1.
In questo caso calcola direttamente l'anno, ma si può fare come nel codice riportato sopra.
Per quanto riguarda il secondo quesito puoi usare la "Convalida dei dati".
dalla barra dei menù seleziona: Dati>Convalida>Consenti:Elenco
nel campo Origine scrivi direttamente le voci separate da ";" se sono poche oppure il riferimento all'intervallo di celle contenenti l'elenco (nel caso si trovi su un altro foglio di lavoro dai un nome all'intervallo e usa il nome).
Ciao
ma così ricado nella rete del nel vb... net! :D ricordi? http://www.hwupgrade.it/forum/showthread.php?t=1907442
potrei però riciclare un poco di quel progetto e riadattarlo ad un foglio excel, così sarebbe più digeribile...
Ma quello era VB.NET. Se il tuo scadenzario è un semplice Foglio con una tabella, Excel va benone. Basterebbe un CommandButton "Inserisci nuova pratica", che apre una semplice UserForm in cui puoi mettere tutte le ListBox o ComboBox che vuoi e inoltre ridurre a zero gli errori dell'utente dovuti a modifica diretta delle celle... A te la scelta...
radeon_snorky
05-08-2009, 17:01
Ma quello era VB.NET. Se il tuo scadenzario è un semplice Foglio con una tabella, Excel va benone. Basterebbe un CommandButton "Inserisci nuova pratica", che apre una semplice UserForm in cui puoi mettere tutte le ListBox o ComboBox che vuoi e inoltre ridurre a zero gli errori dell'utente dovuti a modifica diretta delle celle... A te la scelta...avresti dei link dove potermi informare per scrivere il codice vba per collegare i dati della form alle celle?
=SE(O(A3="";B4="");"";TESTO(SINISTRA(A3;3)+1;"000")&"/"&TESTO(OGGI();"aa"))
Ciaomi piace!
avresti dei link dove potermi informare per scrivere il codice vba per collegare i dati della form alle celle?
C'è un thread fresco fresco in cui ho appena postato un esempio :
http://www.hwupgrade.it/forum/showthread.php?t=2026676
[ vedi mio post #8 ]
;)
radeon_snorky
06-08-2009, 14:57
C'è un thread fresco fresco in cui ho appena postato un esempio :
http://www.hwupgrade.it/forum/showthread.php?t=2026676
[ vedi mio post #8 ]
;)
lo leggo! non avresti delle risorse online? sai è frustrante far il copia incolla di codice senza capirne il funzionamento!
lo leggo! non avresti delle risorse online? sai è frustrante far il copia incolla di codice senza capirne il funzionamento!
Risorse online specifiche su UserForm VBA non ne ho da segnalare. Cmq, al post che ti ho linkato mi pare di aver spiegato tutto abbastanza chiaramente... ;)
radeon_snorky
07-08-2009, 22:55
ho bisogno di info su questi codici:
Private Sub SaveBtn_Click()
ActiveWorkbook.Sheets("scadenze").Activate
Range("B1").Select
Do
If IsEmpty(ActiveCell) = False Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True
ActiveCell.Value = Format(data1.Value, "gg/mm/aaaa")
ActiveCell.Offset(0, 1) = data2.Value
ActiveCell.Offset(0, 2) = data3.Value
ActiveCell.Offset(0, 3) = data4.Value
ActiveCell.Offset(0, 4) = data5.Value
Range("B1").Select
End Sub
Public r As Integer
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 scadenze.Cells(r, 2) = "" And _
scadenze.Cells(r, 3) = "" And _
scadenze.Cells(r, 4) = "" And _
scadenze.Cells(r, 5) = "" And _
scadenze.Cells(r, 6) = "" Or r = 5000
End Sub
Private Sub SaveBtn_Click()
scadenze.Cells(r, 2) = data1
scadenze.Cells(r, 3) = data2
scadenze.Cells(r, 4) = data3
scadenze.Cells(r, 5) = data4
scadenze.Cells(r, 6) = data5
End Sub
ora, a parte le differenze e i SICURI errori (ho adattato il codice dell'altra discussione) volevo sapere quale codice è meglio e perché...
ho preferito non andare a scrivere sulla colonna A visto che il codice di ses4 mi sembrava molto valido!
sulla form vorrei poter visualizzare il numero della pratica con una label che, alla pressione di SaveBtn, vada a leggere proprio il dato generato dalla formula... ho semplicemente aggiunto alla fine della sub SaveBtn_Click() il comando PratLabel.Caption = ActiveCell.Offset(0, -1).Text
però non so come dare il riferimento all'ultima riga...
e poi, ActiveCell.Value = Format(data1.Value, "gg/mm/aaaa") non fa quello che dovrebbe!!! mi scrive "gg/mese in cifre/aaaa" G e A non li converte in cifre! come mai!?!?!?!
EDIT:
mi sono accorto che accetta dd/mm/yyyy eppure il mio excel è italiano... (e win7 è settato su italiano)
comunque mi serve sapere come "obbligare" l'inserimento e la visualizzazione di giorno/mese/anno in quest'ordine, visto che al salvataggio lo inverte all'americana...
EDIT2:
avevo scordato di togliere la formattazione su "data" di quella colonna e andava in tilt.. ora fa come mi aspettavo (anche se fubziona solo con dd/mm/yyyy e non con gg/mm/aaaa... poco male!)
ho bisogno di info su questi codici:
Private Sub SaveBtn_Click()
ActiveWorkbook.Sheets("scadenze").Activate
Range("B1").Select
Do
If IsEmpty(ActiveCell) = False Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True
ActiveCell.Value = Format(data1.Value, "gg/mm/aaaa")
ActiveCell.Offset(0, 1) = data2.Value
ActiveCell.Offset(0, 2) = data3.Value
ActiveCell.Offset(0, 3) = data4.Value
ActiveCell.Offset(0, 4) = data5.Value
Range("B1").Select
End Sub
Public r As Integer
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 scadenze.Cells(r, 2) = "" And _
scadenze.Cells(r, 3) = "" And _
scadenze.Cells(r, 4) = "" And _
scadenze.Cells(r, 5) = "" And _
scadenze.Cells(r, 6) = "" Or r = 5000
End Sub
Private Sub SaveBtn_Click()
scadenze.Cells(r, 2) = data1
scadenze.Cells(r, 3) = data2
scadenze.Cells(r, 4) = data3
scadenze.Cells(r, 5) = data4
scadenze.Cells(r, 6) = data5
End Sub
ora, a parte le differenze e i SICURI errori (ho adattato il codice dell'altra discussione) volevo sapere quale codice è meglio e perché...
ho preferito non andare a scrivere sulla colonna A visto che il codice di ses4 mi sembrava molto valido!
Non so, personalmente non userei nè il primo nè il secondo.
Che senso hanno tutti quegli Offset e tutti quegli And + Select su ogni singola cella, quando, come già detto, si può testare il record vuoto semplicemente dalla .Text del Range che lo rappresenta ?
Mettiamo che il Foglio con la tabella sia così strutturato :
[A1] : 09
[A2:E2] : num, data, oggetto, rif, data fine
Il Range-Record è un [Ax:Ex], a partire dall'indice 3 in poi :
indiceNuovaRiga = 3
Do
If Range("A" & indiceNuovaRiga & ":E" & indiceNuovaRiga).Text = "" Then
Exit Do
Else
indiceNuovaRiga = indiceNuovaRiga + 1
End If
Loop
MsgBox indiceNuovaRiga
Per quanto riguarda la Fx in A sul calcolo del codicePratica, è questione di gusto e stile personale. Io non la userei mai.
Una volta che indiceNuovaRiga è calcolato e noto :
'codice nuova pratica
Dim anno As String
anno = Range("A1").Text
Dim numPratica As String
numPratica = Format(indiceNuovaRiga - 2, "000")
Dim codiceNuovaPratica As String
codiceNuovaPratica = numPratica & "/" & anno
E non ho bisogno di avere altro. Semplice / leggibile / modificabile, e funziona sempre, anche a tabella vuota.
radeon_snorky
13-08-2009, 08:44
in effetti è più comodo... solo che avendomi linkato l'altra discussione pensavo che quel codice facesse al caso mio...
ho acquistato un libro "pocket" che parla di vba per excel... ma è spiegato male! o sarò io di coccio?!!?!?
comunque grazie!
tra poco si parte per le ferie, metto il "progetto" in stallo!
ciao!!!
in effetti è più comodo... solo che avendomi linkato l'altra discussione pensavo che quel codice facesse al caso mio...
Beh, io ti avevo linkato quel thread specificando chiaramente un "vedi mio post #8". Quelle parti di codice con gli Offset e gli And "a cascata", che hai citato qui, non le hai prese da me. ;)
ho acquistato un libro "pocket" che parla di vba per excel... ma è spiegato male! o sarò io di coccio?!!?!?
Sì, della serie "for dummies", "tutto in 5 minuti", "mentre stai sul cesso" :D ecc ...
Non sei tu di coccio, sono quei manuali lì che vanno evitati. ;)
radeon_snorky
26-08-2009, 00:10
Beh, io ti avevo linkato quel thread specificando chiaramente un "vedi mio post #8". Quelle parti di codice con gli Offset e gli And "a cascata", che hai citato qui, non le hai prese da me. ;)
Sì, della serie "for dummies", "tutto in 5 minuti", "mentre stai sul cesso" :D ecc ...
Non sei tu di coccio, sono quei manuali lì che vanno evitati. ;)se ce ne fosse uno della serie "mentre dormi" sarebbe mio!!!
ho ripreso la gestazione, fila che è un piacere... saranno state le ferie!??!?!
EDIT:
ho modificato "MsgBox indiceNuovaRiga" per adattarlo meglio al contesto, altrimenti era un messaggio con poco senso pratico
curiosità: come posso evitare l'avviso di protezione all'avvio del file? naturalmente senza compromettere la sicurezza, considerando che in ufficio girano file provenienti da ogni dove non vorrei disattivare completamente il controllo...
ora non mi resta che vedere cosa ne pensano in ufficio e pensare alle ultime 2 "cosucce"... avvisi scadenze e stampa... quindi sono ancora lontano dalla conclusione, eh?
curiosità: come posso evitare l'avviso di protezione all'avvio del file? naturalmente senza compromettere la sicurezza, considerando che in ufficio girano file provenienti da ogni dove non vorrei disattivare completamente il controllo...
Ha poco senso. Quella è un'impostazione di Excel, non della tua applicazione. Prendi il file, spostalo su un altro Pc che ha altre impostazioni sulla protezione macro e deciderà lui se ammetterle o bloccarle... In ogni caso io imposto sempre su "Medio", ossia lascio che l'utente decida di bloccare o meno il codice VBA. Ovviamente quando distribuisco ad altri utenti faccio un minimo di documentazione in cui spiego che se vogliono usare il mio programma devono consentire l'esecuzione... ;)
radeon_snorky
27-08-2009, 10:52
Ha poco senso. Quella è un'impostazione di Excel, non della tua applicazione. Prendi il file, spostalo su un altro Pc che ha altre impostazioni sulla protezione macro e deciderà lui se ammetterle o bloccarle... In ogni caso io imposto sempre su "Medio", ossia lascio che l'utente decida di bloccare o meno il codice VBA. Ovviamente quando distribuisco ad altri utenti faccio un minimo di documentazione in cui spiego che se vogliono usare il mio programma devono consentire l'esecuzione... ;)giustamente... era solo per chiedere...
ieri sera ho fatto vedere il "programma" in ufficio, mi hanno chiesto delle modifiche e delle "semplificazioni" appena ho un secondo ti posto il codice e un paio di screen, così, SE TI SCONFINFERA L'IDEA di aiutarmi (più di quanto tu non stia già facendo....) diciamo per consigliarmi su come procedere all'ottimizzazione del tutto
grazie!
radeon_snorky
31-08-2009, 08:26
lo screen:
http://www.hwupgrade.it/forum/attachment.php?attachmentid=72053&stc=1&d=1251703051
dovrei ottimizzare tutto questo e procedere con ricerca e stampa...
codice inserimento pratica:
Private indiceNuovaRiga As Long
Private Sub UserForm_Initialize()
Dim sh As Worksheet
Dim lng1 As Long
Dim lUltRiga1 As Long
Set sh = Worksheets("tecnico")
With sh
lUltRiga1 = .Range("A" & _
Rows.Count).End(xlUp).Row
For lng1 = 2 To lUltRiga1
Me.ComboBox3.AddItem (.Cells(lng1, 1).Value)
Next
End With
Set sh = Nothing
Dim lng2 As Long
Dim lUltRiga2 As Long
Set sh = Worksheets("committente")
With sh
lUltRiga2 = .Range("A" & _
Rows.Count).End(xlUp).Row
For lng2 = 2 To lUltRiga2
Me.ComboBox1.AddItem (.Cells(lng2, 1).Value)
Next
End With
Set sh = Nothing
Dim lng3 As Long
Dim lUltRiga3 As Long
Set sh = Worksheets("proprietà")
With sh
lUltRiga3 = .Range("A" & _
Rows.Count).End(xlUp).Row
For lng3 = 2 To lUltRiga3
Me.ComboBox4.AddItem (.Cells(lng3, 1).Value)
Next
End With
Set sh = Nothing
Dim anno As String
anno = Range("A1").Text
indiceNuovaRiga = 3
Do
If Range("A" & indiceNuovaRiga & ":E" & indiceNuovaRiga).Text = "" Then
Exit Do
Else
indiceNuovaRiga = indiceNuovaRiga + 1
End If
Loop
MsgBox "la pratica che stai per inserire è la n° " & indiceNuovaRiga - 3 & " del 20" & anno
Dim numPratica As String
numPratica = Format(indiceNuovaRiga - 3, "000")
Dim codiceNuovaPratica As String
codiceNuovaPratica = numPratica & "/" & anno
numero.Caption = codiceNuovaPratica
cmd_inserisci.Enabled = True
End Sub
Private Sub cmd_inserisci_Click()
Dim anno As String
anno = Range("A1").Text
Dim numPratica As String
numPratica = Format(indiceNuovaRiga - 3, "000")
Dim codiceNuovaPratica As String
codiceNuovaPratica = numPratica & "/" & anno
If TextBox1.Value = "" Or ComboBox2.Text = "" Then
MsgBox "devi compilare correttamente la pratica!"
Exit Sub
End If
Sheets("pratiche").Range("A" & indiceNuovaRiga).FormulaR1C1 = codiceNuovaPratica
Sheets("pratiche").Range("B" & indiceNuovaRiga).FormulaR1C1 = TextBox1.Text
Sheets("pratiche").Range("C" & indiceNuovaRiga).FormulaR1C1 = ComboBox1.Text
Sheets("pratiche").Range("D" & indiceNuovaRiga).FormulaR1C1 = ComboBox4.Text
Sheets("pratiche").Range("E" & indiceNuovaRiga).FormulaR1C1 = TextBox3.Text
Sheets("pratiche").Range("F" & indiceNuovaRiga).FormulaR1C1 = TextBox4.Text
Sheets("pratiche").Range("G" & indiceNuovaRiga).FormulaR1C1 = TextBox5.Text
Sheets("pratiche").Range("H" & indiceNuovaRiga).FormulaR1C1 = ComboBox2.Text
Sheets("pratiche").Range("I" & indiceNuovaRiga).FormulaR1C1 = ComboBox3.Text
Sheets("pratiche").Range("J" & indiceNuovaRiga).FormulaR1C1 = TextBox6.Text
Sheets("pratiche").Range("K" & indiceNuovaRiga).FormulaR1C1 = TextBox7.Text
Sheets("pratiche").Range("L" & indiceNuovaRiga).FormulaR1C1 = TextBox8.Text
Sheets("pratiche").Range("M" & indiceNuovaRiga).FormulaR1C1 = TextBox9.Text
Sheets("pratiche").Range("N" & indiceNuovaRiga).FormulaR1C1 = TextBox10.Text
Sheets("pratiche").Range("O" & indiceNuovaRiga).FormulaR1C1 = TextBox11.Text
Sheets("pratiche").Range("P" & indiceNuovaRiga).FormulaR1C1 = TextBox12.Text
Sheets("pratiche").Range("Q" & indiceNuovaRiga).FormulaR1C1 = TextBox13.Text
Sheets("pratiche").Range("R" & indiceNuovaRiga).FormulaR1C1 = TextBox14.Text
If indiceNuovaRiga = 65536 Then
MsgBox "Impossibile inserire. Limite max. raggiunto"
cmd_inserisci.Enabled = False
Else
indiceNuovaRiga = indiceNuovaRiga + 1
End If
numero.Caption = "---/--"
cmd_inserisci.Enabled = False
End Sub
Private Sub dataoggi_Click()
TextBox1.Value = Format(Now(), "dd mm yyyy")
End Sub
Private Sub ClearBtn_Click()
Unload Me
Load moduloprat
moduloprat.Show
End Sub
Private Sub ExitBtn_Click()
Unload Me
End Sub
codice editor pratica:
Private indiceRiga As Long
Dim codprat As String
Private Sub UserForm_Initialize()
codprat = InputBox("Numero pratica da modificare:")
If codprat <> "" Then
MsgBox "selezionata pratica " & codprat
Else
MsgBox "errore, inserisci numero pratica correttamente"
Unload editform
Exit Sub
End If
indiceRiga = codprat + 3
codprat = Format(codprat, "000")
numero.Caption = codprat & "/" & Range("A1").Text
TextBox1.Text = Sheets("pratiche").Range("B" & indiceRiga).FormulaR1C1
ComboBox1.Text = Sheets("pratiche").Range("C" & indiceRiga).FormulaR1C1
ComboBox4.Text = Sheets("pratiche").Range("D" & indiceRiga).FormulaR1C1
TextBox3.Text = Sheets("pratiche").Range("E" & indiceRiga).FormulaR1C1
TextBox4.Text = Sheets("pratiche").Range("F" & indiceRiga).FormulaR1C1
TextBox5.Text = Sheets("pratiche").Range("G" & indiceRiga).FormulaR1C1
ComboBox2.Text = Sheets("pratiche").Range("H" & indiceRiga).FormulaR1C1
ComboBox3.Text = Sheets("pratiche").Range("I" & indiceRiga).FormulaR1C1
TextBox6.Text = Sheets("pratiche").Range("J" & indiceRiga).FormulaR1C1
TextBox7.Text = Sheets("pratiche").Range("K" & indiceRiga).FormulaR1C1
TextBox8.Text = Sheets("pratiche").Range("L" & indiceRiga).FormulaR1C1
TextBox9.Text = Sheets("pratiche").Range("M" & indiceRiga).FormulaR1C1
TextBox10.Text = Sheets("pratiche").Range("N" & indiceRiga).FormulaR1C1
TextBox11.Text = Sheets("pratiche").Range("O" & indiceRiga).FormulaR1C1
TextBox12.Text = Sheets("pratiche").Range("P" & indiceRiga).FormulaR1C1
TextBox13.Text = Sheets("pratiche").Range("Q" & indiceRiga).FormulaR1C1
TextBox14.Text = Sheets("pratiche").Range("R" & indiceRiga).FormulaR1C1
MsgBox "pratica importata correttamente"
End Sub
Private Sub cmd_inserisci_Click()
Sheets("pratiche").Range("A" & indiceRiga).FormulaR1C1 = numero.Caption
Sheets("pratiche").Range("B" & indiceRiga).FormulaR1C1 = TextBox1.Text
Sheets("pratiche").Range("C" & indiceRiga).FormulaR1C1 = ComboBox1.Text
Sheets("pratiche").Range("D" & indiceRiga).FormulaR1C1 = ComboBox4.Text
Sheets("pratiche").Range("E" & indiceRiga).FormulaR1C1 = TextBox3.Text
Sheets("pratiche").Range("F" & indiceRiga).FormulaR1C1 = TextBox4.Text
Sheets("pratiche").Range("G" & indiceRiga).FormulaR1C1 = TextBox5.Text
Sheets("pratiche").Range("H" & indiceRiga).FormulaR1C1 = ComboBox2.Text
Sheets("pratiche").Range("I" & indiceRiga).FormulaR1C1 = ComboBox3.Text
Sheets("pratiche").Range("J" & indiceRiga).FormulaR1C1 = TextBox6.Text
Sheets("pratiche").Range("K" & indiceRiga).FormulaR1C1 = TextBox7.Text
Sheets("pratiche").Range("L" & indiceRiga).FormulaR1C1 = TextBox8.Text
Sheets("pratiche").Range("M" & indiceRiga).FormulaR1C1 = TextBox9.Text
Sheets("pratiche").Range("N" & indiceRiga).FormulaR1C1 = TextBox10.Text
Sheets("pratiche").Range("O" & indiceRiga).FormulaR1C1 = TextBox11.Text
Sheets("pratiche").Range("P" & indiceRiga).FormulaR1C1 = TextBox12.Text
Sheets("pratiche").Range("Q" & indiceRiga).FormulaR1C1 = TextBox13.Text
Sheets("pratiche").Range("R" & indiceRiga).FormulaR1C1 = TextBox14.Text
MsgBox "aggiornamento pratica completato"
Unload Me
End Sub
Private Sub ExitBtn_Click()
Unload Me
End Sub
codice ricerca pratiche: (c'è solo il riempimento delle combobox.. devo ancora pensare a cosa metterci)
Private Sub UserForm_Initialize()
Dim sh As Worksheet
Dim lng1 As Long
Dim lUltRiga1 As Long
Set sh = Worksheets("tecnico")
With sh
lUltRiga1 = .Range("A" & _
Rows.Count).End(xlUp).Row
For lng1 = 2 To lUltRiga1
Me.ComboBox3.AddItem (.Cells(lng1, 1).Value)
Next
End With
Set sh = Nothing
Dim lng2 As Long
Dim lUltRiga2 As Long
Set sh = Worksheets("committente")
With sh
lUltRiga2 = .Range("A" & _
Rows.Count).End(xlUp).Row
For lng2 = 2 To lUltRiga2
Me.ComboBox1.AddItem (.Cells(lng2, 1).Value)
Next
End With
Set sh = Nothing
Dim lng3 As Long
Dim lUltRiga3 As Long
Set sh = Worksheets("proprietà")
With sh
lUltRiga3 = .Range("A" & _
Rows.Count).End(xlUp).Row
For lng3 = 2 To lUltRiga3
Me.ComboBox4.AddItem (.Cells(lng3, 1).Value)
Next
End With
Set sh = Nothing
End Sub
Private Sub dataoggi_Click()
TextBox1.Value = Format(Now(), "dd mm yyyy")
End Sub
Private Sub ClearBtn_Click()
Unload Me
Load searchform
searchform.Show
End Sub
Private Sub ExitBtn_Click()
Unload Me
End Sub
ci sono un paio di errori sulla gestione degli errori (ehehhe) visto che se cerco un numero pratica non numerico mi da un errore... e se cerco un valore più alto di quelli presenti me lo inserisce sulla form ma, naturalmente, trova tutti i campi vuoti, così ho aggiunto un if... sulle celle importanti che, se vuote, mi esce dalla sub... corretto o c'è di meglio per il controllo? tipo verificare da subito se il risultato della inputbox è minore di "indicenuovariga-n" o non numerico???
consigli?
EDIT
scrivo qui per non dimenticarlo... mi hanno fatto notare che la numerazione della pratica così com'è... aumenta di numero continuamente senza azzerarsi al cambio anno! urge soluzione! mumble mumble!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.