Sviluppare funzionalita su Microsoft Office con VBA Inserire informazioni in userform per creare una riga con le info sul foglio

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

    FROST220684
    Partecipante

      Ciao a tutti,

      In questo file ho un userform "Inserisci Nota Transfer" che mi permette di inserire dati e di trasportarli sul foglio tramite una nuova riga inserendo le informazioni in varie colonne. Questo userform tratta informazioni riguardanti trasporti, che sono sia andata che ritorno, perciò è stato creato in modo che nell'inserimento dei dati crea 2 righe (1 per l'andata ed 1 per il ritorno invertendo i dati di partenza), l'unica cosa che non avevo valutato e l'ultimo campo (campo note) che chiaramente inserisce in questo momento le informazioni in modo identico su tutte e 2 le righe. Io vorrei invece creare 2 campi note separati per andata e per ritorno che mi inserisca le note separatamente quindi campo note andata (mi inserisce le informazioni nella riga di andata nella colonna note), mentre un campo note ritorno (mi inserisce le informazioni nella riga di ritorno nella colonna note). Ho fatto la modifica grafica necessaria nell'userform ed ho separato le textbox note che sono textbox10 e textbox11 ma non riesco ad adattare il codice per dividere questa operazione perchè inserendo la nuova textbox11 sfasa tutta la formattazione e non inserisce le informazioni note ritorno.

      Allego file per eventuali prove ed un video di 1 minuto per farvi vedere la situazione

      Grazie mille a chiunque voglia dare un aiuto

      Allegati:
      You must be logged in to view attached files.
      #44634 Score: 0 | Risposta

      FROST220684
      Partecipante

        Sono riuscito a risolvere, avevo sbagliato ad inserire un numero cella.

        Grazie a tutti 

        posto codice corretto

        Private Sub btnInsert_Click()
        'inserisce i dati delle textbox nel foglio corrispondente al form
        Dim i As Long
        Dim f As Range
        Dim r As Range
        
            If TextBoxA = "" And TextBoxB = "" Then
                set_info Me, "Dati incompleti. Inserire almeno una data."
                TextBoxA.Tag = 0
                Exit Sub
            End If
            
            If IsDate(TextBoxA) And IsDate(TextBoxB) Then
                If CDate(TextBoxB) < CDate(TextBoxA) Then
                    set_info Me, "Non posso inserire i dati. La prima data non può essere superiore alla seconda."
                    TextBoxA.Tag = 0
                    Exit Sub
                End If
            End If
            
            set_info Me, ""
            
            Set f = active_table(Me)
            i = f.Rows.Count + 3    'prima riga libera in cui inserire i dati nuovi e ID di questo inserimento
            Set f = Rows(i).Resize(, f.Columns.Count)
            
            With f
            .Select
                .Interior.Color = xlNone
                .Font.Size = 12
                .Font.Bold = False
        
                .Font.Name = "Calibri"
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .Borders.LineStyle = xlContinuous
                .WrapText = True
                
                'compilare l'andata?
                If TextBoxA <> "" Then
                    .Cells(1) = i                   'N
                    .Cells(2) = CDate(TextBoxA)     'data
                    .Cells(3) = TextBox3            'ospite
                    .Cells(4) = Val(TextBox4)       'n° passeggeri
                    .Cells(5) = TextBox5            'destinazione da
                    .Cells(6) = TextBox6            'destinazione per
                    .Cells(7) = TextBox7            'ora arrivo
                    
                    'in funzione di checkbox1 salvo ora partenza e transfer se compilati
                    .Cells(8) = IIf(CheckBox1, TextBox8, "")        'ora partenza
                    .Cells(9) = IIf(CheckBox1, TextBox9, "")        'ora transfer
                    
                    .Cells(10) = TextBox10    'note
                    
                    'formattazione colonna 1
                    .Cells(1).Interior.Color = 15853019
                    .Cells(1).Font.Bold = True
                    
                    .EntireRow.AutoFit
                End If
            End With
                
            'compilare il ritorno?
            If TextBoxB <> "" Then
                If TextBoxA = "" Then
                    MsgBox "Non puoi compilare un RITORNO senza la corrispondente ANDATA." & vbNewLine & _
                    "Cerca prima le informazioni di andata, recuperandole dall'elenco sottostante, dopodiché " & _
                    "potrai compilare il ritorno.", vbInformation, "Attenzione"
                    Exit Sub
                End If
        
                Set f = f.Offset(1)     'avanza di una riga per inserire eventualmente le info di ritorno
                With f
                    .Interior.Color = xlNone
                    .Font.Size = 12
                    .Font.Bold = False
        
                    .Font.Name = "Calibri"
                    .HorizontalAlignment = xlCenter
                    .VerticalAlignment = xlCenter
                    .Borders.LineStyle = xlContinuous
                    .WrapText = True
                    
                    i = i + 1
                    .Cells(1) = i             'N
                    .Cells(2) = CDate(TextBoxB)      'data
                    .Cells(3) = TextBox3        'ospite
                    .Cells(4) = Val(TextBox4)   'n° passeggeri
                    .Cells(5) = TextBox6        'destinazione per
                    .Cells(6) = TextBox5        'destinazione da
                    .Cells(7) = ""              'ora arrivo
                    .Cells(8) = TextBox8        'ora partenza
                    .Cells(9) = TextBox9        'ora transfer
                    .Cells(10) = TextBox11      'E' BASTATO INSERIRE QUI IL NUMERO DELLA TEXTBOX CORRETTA
                    
                    'formattazione colonna 1
                    .Cells(1).Interior.Color = 15853019
                    .Cells(1).Font.Bold = True
                    
                    .EntireRow.AutoFit
                End With
            End If
            
            '-----------------------------------------------
            'un trucco per il riordinamento...
            'memorizza le date come valori in ultima colonna
            'riordina sulla base di questa e poi la cancella
            Set f = active_table(Me)
            f.Offset(, 10).Cells(1) = "#"
            Set f = f.Offset(1, 1).Resize(f.Rows.Count - 1, 1)
            For Each r In f
                r.Offset(, 9) = CLng(CDate(r))
            Next
            
            With active_table(Me)
                .Sort key1:=.Columns(11), Order1:=xlAscending, Header:=xlYes
                .Columns(11).Delete
            End With
        
            'aggiusta la colonna numerica N
            Set f = f.Offset(, -1)
            f(1) = 1
            f(1).AutoFill f, xlFillSeries
            '-----------------------------------------------
            
            If CheckBox1 Then CheckBox1 = False
            
            Call btnClear_Click
                
            TextBoxA.Tag = 1
            set_info Me, "Inserimento eseguito correttamente."
        End Sub
      Login Registrati
      Stai vedendo 2 articoli - dal 1 a 2 (di 2 totali)
      Rispondi a: Inserire informazioni in userform per creare una riga con le info sul foglio
      Gli allegati sono permessi solo ad utenti REGISTRATI
      Le tue informazioni: