Sviluppare funzionalita su Microsoft Office con VBA Selezione cella da modificare

Login Registrati
Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)
  • Autore
    Articoli
  • #53738 Score: 0 | Risposta

    Frasubb
    Partecipante
      1 pt

      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.
      #53740 Score: 0 | Risposta

      alexps81
      Moderatore
        58 pts

        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 Sub
        #53788 Score: 0 | Risposta

        Frasubb
        Partecipante
          1 pt

          Grazie 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" ?

          #53792 Score: 0 | Risposta

          alexps81
          Moderatore
            58 pts

            Frasubb ha scritto:

            1) quando seleziono il nominativo in combobox, sarebbe possibile rendere attiva la relativa cella della colonna "F" ?

            Per questo basta aggiungere .Select sotto a .Font.ColorIndex = 3

             

            Frasubb ha scritto:

            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" ?

            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.

            #53796 Score: 0 | Risposta

            LukeReds
            Partecipante
              19 pts

              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 Sub

              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

               

              #53797 Score: 0 | Risposta

              alexps81
              Moderatore
                58 pts

                Personalmente 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.

                #53798 Score: 0 | Risposta

                LukeReds
                Partecipante
                  19 pts

                  la risposta #53796 vale per le condizioni indicate dall'utente

                  #53862 Score: 0 | Risposta

                  Frasubb
                  Partecipante
                    1 pt

                    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

                    #53863 Score: 0 | Risposta

                    LukeReds
                    Partecipante
                      19 pts

                      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.
                      #53872 Score: 0 | Risposta

                      Frasubb
                      Partecipante
                        1 pt

                        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.
                        #53884 Score: 0 | Risposta

                        alexps81
                        Moderatore
                          58 pts

                          Frasubb ha scritto:

                          ActiveCell.Font.ColorIndex = 3 'colora il nuovo testo in ROSSO

                          L'errore che lamenti deriva da questa riga di codice. Con ActiveCell applichi il colore ROSSO alla cella selezionata.

                          Devi utilizzare Cells(riga, "F").Font.ColorIndex = 3

                          #53888 Score: 0 | Risposta

                          LukeReds
                          Partecipante
                            19 pts

                            non avevo guardato il resto del codice, activecell è sempre da evitare 

                          Login Registrati
                          Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)
                          Rispondi a: Selezione cella da modificare
                          Gli allegati sono permessi solo ad utenti REGISTRATI
                          Le tue informazioni: