› Sviluppare funzionalita su Microsoft Office con VBA › Inserire informazioni in userform per creare una riga con le info sul foglio
-
AutoreArticoli
-
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.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 -
AutoreArticoli
