› Sviluppare funzionalita su Microsoft Office con VBA › Selezione cella da modificare
-
AutoreArticoli
-
Ciao a tutti,
ho questa situazione: allego il mio file esempio dove premendo il tasto F9, si apre una userform che mi va a far modificare la data nella colonna F. Il problema è che me la modifica solamente se seleziono l'apposita cella, mentre la mia esigenza rimane sempre quella di modificare tale data, ma rendendo attiva automaticamente l'apposita cella, una volta che ho selezionato il nominativo dalla combobox presente.
Come faccio ?
Grazie mille
Allegati:
You must be logged in to view attached files.Ciao, io farei così: quando carichi i dati nella ComboBox, oltre al nominativo e la data, ci metterei anche il numero di riga di riferimento del nominativo. A questo punto quando vado a scegliere il nominativo e indico la nuova data, vado ad estrapolare il numero scritto in seconda colonna della ComboBox, che sta ad indicare a quale riga dovrà essere trascritta la nuova data:
Private Sub cmdConferma_Click() Dim nuovaScadenza As Date Dim riga As Long If Trim(TxtNuovaScad.Value) <> "" And IsDate(TxtNuovaScad.Value) Then nuovaScadenza = CDate(TxtNuovaScad.Value) If CboCercaNom.ListIndex <> -1 Then riga = CboCercaNom.List(CboCercaNom.ListIndex, 1) With Cells(riga, "F") .Value = nuovaScadenza .Font.ColorIndex = 3 'colora il nuovo testo in ROSSO End With Else MsgBox "Seleziona un nominativo dall'elenco.", vbExclamation Exit Sub End If Else MsgBox "Inserisci una data valida.", vbExclamation Exit Sub End If Unload Me End Sub Private Sub UserForm_Initialize() Dim cella As Range With CboCercaNom .Clear For Each cella In ActiveSheet.Range("B2", ActiveSheet.Cells(Rows.Count, "B").End(xlUp)) .AddItem cella.Value & " " & cella.Offset(0, 4).Value .List(.ListCount - 1, 1) = cella.Row Next cella End With End SubGrazie Alex, impeccabile come sempre ! GRAZIE
Solo che volevo chiederti una cosa, visto che per poter visualizzare tutte le colonne nella schermata del pc, ho dovuto fargli spazio NON visualizzando le intestazioni, e quindi non vedendo i numeri di riga di cui tu parli.
1) quando seleziono il nominativo in combobox, sarebbe possibile rendere attiva la relativa cella della colonna "F" ?
2) sarebbe possibile ottenere il risultato (espresso in giorni) riportato in "G", seppur avendo modificato la data con la user, mantenendo la sottrazione "oggi - data pagamento", dove per quest'ultima (data pagamento) rimane presa in considerazione quella originaria e non quella "nuova" ?
1) quando seleziono il nominativo in combobox, sarebbe possibile rendere attiva la relativa cella della colonna "F" ?
Per questo basta aggiungere
.Selectsotto a.Font.ColorIndex = 32) sarebbe possibile ottenere il risultato (espresso in giorni) riportato in "G", seppur avendo modificato la data con la user, mantenendo la sottrazione "oggi - data pagamento", dove per quest'ultima (data pagamento) rimane presa in considerazione quella originaria e non quella "nuova" ?
Qui invece dovresti aprire una nuova richiesta visto che non centra nulla con quella iniziale. Ad ogni modo in "G" hai delle formule, vanno rimosse?
Quindi quando aprirai la nuova richiesta spiega bene ciò che vuoi ottenere e magari allega il file con un esempio pratico del risultato.
Ciao.
ciao
premesso che per un problema del genere non creerei nessuna userform ma farei direttamente le modifiche sul foglio excel.. ad ogni modo, ecco le modifiche al tuo codice (grassetto)
Dim riga
Private Sub CboCercaNom_Change()
riga = CboCercaNom.ListIndex + 2
End SubPrivate Sub cmdConferma_Click()
Cells(riga, "F") = CDate(TxtNuovaScad)
ActiveCell.Font.ColorIndex = 3 'colora il nuovo testo in ROSSO
If UserForms.Count > 0 Then 'serve per chiudere la userform dopo aver
Unload UserForm3 ' inserito la data e cliccato sul pulsante Conferma
Else '(come sopra)
UserForm3.Show vbModeless '(come sopra)
End If
End SubPersonalmente non mi è mai piaciuto questo metodo. Rende la ComboBox poco flessibile. Finché rimane tutto così com'è funziona anche bene...ma se per qualche ragione, in futuro, viene alterata la struttura del foglio oppure viene inserito un Bubble Sort per ordinare l'elenco, poi questo sistema non va più bene. Ecco perché preferisco prelevare la riga ed inserirla nella ComboBox.
Ciao Luke,
innanzitutto grazie come sempre, anche a te, per la preziosa assistenza.
Unica cosa è che non ho capito cosa devo fare, o meglio dove scrivere e/o apportare le modifiche da te suggerite, anche perché il codice che mi suggerisci
Private Sub cmdConferma_Click() Cells(riga, "F") = CDate(TxtNuovaScad) ActiveCell.Font.ColorIndex = 3 'colora il nuovo testo in ROSSO If UserForms.Count > 0 Then 'serve per chiudere la userform dopo aver Unload UserForm3 ' inserito la data e cliccato sul pulsante Conferma Else '(come sopra) UserForm3.Show vbModeless '(come sopra) End If End Subè diverso da quello che ho finora adottato e che gentilmente mi ha suggerito Alex.
Quest'altro, invece, che mi sembra di capire sia un'altra sub,
`Dim riga Private Sub CboCercaNom_Change() riga = CboCercaNom.ListIndex + 2 End Sub`dove la devo scrivere ?
E' possibile che inizi con DIM RIGA ?
Grazie se vorrai continuare ad aiutarmi
ciao,
il codice va inserito così, DIM Riga va in alto, in questo modo il valroe della variabile non viene perso passando da una sub all'altra.
Non ho guardato il resto del tuo codice
Allegati:
You must be logged in to view attached files.Ciao Luke,
grazie mille, tutto funziona !!
Unica cosa però: prima di correggere la data tramite userform, qualunque cella lasci selezionata, una volta spinto il pulsante "CONFERMA", me la va a modificare assieme a quella (giusta) della colonna F.
Come si fa, quindi, a prescindere da quale cella sia attiva al momento della modifica tramite user, a modificare SOLO quella della colonna F del nominativo selezionato ?
Allego uno screenshot dove evidenzio l'errore cerchiandolo in rosso.
Grazie mille ancora e scusami
Allegati:
You must be logged in to view attached files.ActiveCell.Font.ColorIndex = 3 'colora il nuovo testo in ROSSO
L'errore che lamenti deriva da questa riga di codice. Con
ActiveCellapplichi il colore ROSSO alla cella selezionata.Devi utilizzare
Cells(riga, "F").Font.ColorIndex = 3 -
AutoreArticoli
