Nuovo CommandButton su UserForm

Anonimo
2023-11-19T12:50:10+00:00

Buongiorno e buona domenica alla Community

Microsoft® Excel® per Microsoft 365 MSO (Versione 2310 Build 16.0.16924.20054) a 64 bit

Questo è il codice VBA Excel che uso per la UserForm nell'immagine, vorrei aggiungere un CommandButton

che invece che inserire i dati nelle righe predisposte come fa il commandButton1 del mio codice

che poi chiude la UsrForm, vorrei inserire un nuovo CommandButton che dopo aver inserito i dati

scendesse di una riga e mi permettesse di continuare nell'inserimento di nuovi dati nelle

righe sottostanti

che codice devo scrivere sul nuovo commandButton?

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

End Sub

Private Sub UserForm_Initialize()

Dim SH As Worksheet 

Dim sNominativo As String 

     Me.ComboBox1.SetFocus  

Set SH = ActiveSheet 

sNominativo = Intersect(ActiveCell.EntireRow, SH.Columns("C")).Value 

Me.ComboBox1.Value = sNominativo 

sNominativo = Intersect(ActiveCell.EntireRow, SH.Columns("G")).Value

Me.TextBox23.Value = sNominativo 

sNominativo = Intersect(ActiveCell.EntireRow, SH.Columns("I")).Value

Me.TextBox31.Value = sNominativo 

sNominativo = Intersect(ActiveCell.EntireRow, SH.Columns("H")).Value

Me.TextBox16.Value = sNominativo 

sNominativo = Intersect(ActiveCell.EntireRow, SH.Columns("F")).Value

Me.TextBox24.Value = sNominativo 

sNominativo = Intersect(ActiveCell.EntireRow, SH.Columns("E")).Value

Me.ComboBox2.Value = sNominativo 

End Sub

Private Sub CommandButton2_Click()

Range("D9").Select

Unload Me

End Sub

          Private Sub CommandButton1\_Click() 

        On Error GoTo XIT 

        ActiveSheet.Unprotect 

        With ActiveCell.EntireRow.Cells(3) 

    .Offset(0, 0).Value = Me.ComboBox1.Value 

    .Offset(0, 2).Value = Me.ComboBox2.Value 

    .Offset(0, 3).Value = Me.TextBox24.Value 

    .Offset(0, 4).Value = Me.TextBox23.Value 

    .Offset(0, 5).Value = Me.TextBox16.Value 

    .Offset(0, 6).Value = Me.TextBox31.Value        

    ActiveSheet.Protect 

     End With 

  Range("D9").Select 

XIT:

Unload Me 

End Sub

Grazie e saluti

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Eleuterio Tedeschi 18,590 Punti di reputazione Moderatore volontario
2023-11-21T18:03:58+00:00

Ciao buongiorno

Come vedi dalle mie domande capisco poco di VBA puoi spiegarmi togliere gli inutili select. Senza farti perdere troppo tempo? Un saluto

Sinceramente pensavo avessi scritto tu il codice:

Range("D9").Select

secondo te a cosa serve ripetutamente?

Non è necessario modificare la cella attiva e poi usare Offset (dove puoi risparmiarti il primo parametro, la riga, visto che non la usi), basta:

Cells(emptyRow, numerodicolonna).Value = controllochecontieneilvalore

Se non ti è chiaro posso riscriverti le sub, ma se hai risolto meglio così, per cui contrassegna la risposta (non l'hai fatto, deve diventare verde) per chiudere la discussione.

Ciao e grazie dei riscontri.

La risposta è stata utile?

2 persone hanno trovato utile questa risposta.
0 commenti Nessun commento

6 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2023-11-19T15:39:25+00:00

    Grazie ShollyBee,

    mi sono espresso male con la domanda, chiedo scusa, non ho bisogno che mi aggiunga una riga ma una volta che i dati

    sono inseriti scenda di una riga per continuare con nuovi inserimenti sempre che sia possibile.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Eleuterio Tedeschi 18,590 Punti di reputazione Moderatore volontario
    2023-11-21T06:56:54+00:00

    Usa il tuo codice, ma per trovare l'ultima riga vuota, ammesso che in colonna 5 o qualsiasi altra tu abbia piena di dati, prova così:

    emptyRow = Cells(Rows.Count, 5).End(xlUp).Row
    

    ed adatta il resto delle istruzioni.

    Ovviamente puoi risparmiarti quegli inutili Select che ti costringono all'antiestetico spostamento del controllo sulle celle.

    Ciao.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2023-11-20T21:10:52+00:00

    Ciao di nuovo,

    Non c'è problema! Se si desidera che i nuovi dati vengano inseriti nella riga successiva senza aggiungere ogni volta una nuova riga, è possibile modificare il codice di conseguenza. Ecco il codice aggiornato:

    '''vba Sub privato ComboBox1_KeyDown(ByVal KeyCode come MSForms.ReturnInteger, ByVal Shift come Integer) ' Aggiungi qualsiasi comportamento specifico per il tasto ComboBox1 verso il basso, se necessario Fine sottomarino

    Sub privato UserForm_Initialize() ' Il codice esistente per l'inizializzazione di UserForm Fine sottomarino

    Sub privato CommandButton2_Click() Intervallo("D9"). Selezionare Scaricami Fine sottomarino

    Sub privato CommandButton1_Click() In caso di errore GoTo XIT ActiveSheet.Unprotect

    ' Trova la prima riga vuota nella colonna D Dim emptyRow As Long emptyRow = Celle(Righe.Conteggio, 4). Fine(xlUp). Ferro + 1

    ' Compilare i dati nella nuova riga Con celle(emptyRow, 3) . Valore = Me.ComboBox1.Value . Scostamento(0, 2). Valore = Me.ComboBox2.Value . Scostamento(0, 3). Valore = Me.TextBox24.Value . Scostamento(0, 4). Valore = Me.TextBox23.Value . Scostamento(0, 5). Valore = Me.TextBox16.Value . Scostamento(0, 6). Valore = Me.TextBox31.Value Termina con

    ActiveSheet.Protect

    ' Selezionare la cella nella riga successiva per l'ulteriore immissione dei dati Celle(emptyRow + 1, 4). Selezionare

    XIT: Scaricami Fine sottomarino '''

    Questo codice modificato trova l'ultima riga utilizzata nella colonna D e aggiunge i nuovi dati nella riga sottostante. In questo modo, è possibile continuare a immettere nuovi dati senza aggiungere ogni volta nuove righe.

    Questa risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o espressioni strane.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2023-11-19T15:20:13+00:00

    Ciao SergioVilla,

    Grazie per averci contattato,

    Per ottenere la funzionalità descritta, in cui un nuovo oggetto CommandButton aggiunge una nuova riga e consente di immettere dati nelle righe seguenti, è possibile modificare il codice esistente. Suppongo che tu voglia che la nuova riga venga aggiunta proprio sotto la cella attiva corrente. Di seguito è riportata una versione aggiornata del codice:

    '''vba Sub privato ComboBox1_KeyDown(ByVal KeyCode come MSForms.ReturnInteger, ByVal Shift come Integer) ' Aggiungi qualsiasi comportamento specifico per il tasto ComboBox1 verso il basso, se necessario Fine sottomarino

    Sub privato UserForm_Initialize() ' Il codice esistente per l'inizializzazione di UserForm Fine sottomarino

    Sub privato CommandButton2_Click() Intervallo("D9"). Selezionare Scaricami Fine sottomarino

    Sub privato CommandButton1_Click() In caso di errore GoTo XIT ActiveSheet.Unprotect

    ' Trova la prima riga vuota sotto la cella attiva Dim emptyRow As Long emptyRow = ActiveCell.EntireRow.Row + 1

    ' Compilare i dati nella nuova riga Con celle(emptyRow, 3) . Valore = Me.ComboBox1.Value . Scostamento(0, 2). Valore = Me.ComboBox2.Value . Scostamento(0, 3). Valore = Me.TextBox24.Value . Scostamento(0, 4). Valore = Me.TextBox23.Value . Scostamento(0, 5). Valore = Me.TextBox16.Value . Scostamento(0, 6). Valore = Me.TextBox31.Value Termina con

    ActiveSheet.Protect

    ' Selezionare la nuova cella attiva nella riga successiva Celle(emptyRow + 1, 4). Selezionare

    XIT: Scaricami Fine sottomarino '''

    In questo codice modificato, quando si fa clic sul nuovo oggetto CommandButton (CommandButton1), viene trovata la prima riga vuota sotto la cella attiva e vengono popolati i dati in tale riga. Dopo aver aggiunto i dati, seleziona la cella nella riga successiva per un'ulteriore immissione dei dati.

    Assicurati di testarlo in un ambiente sicuro o su un backup per assicurarti che soddisfi i tuoi requisiti senza conseguenze indesiderate.

    Spero che questo aiuti!

    Saluti Sola

    Questa risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o espressioni strane.

    La risposta è stata utile?

    0 commenti Nessun commento