Here's the way I usually do it,
Module1 Code
Option Explicit
Public Enum Sheet1Columns
EventCol = 1
DateCol
TimeCol
FirmAttendenceCol
CounterPartyAttendenceCol
MeetingOverviewCol
End Enum
UserForm Code
Option Explicit
Private Sub cmdAdd_Click()
'See Module 1
Dim NextRow As Long
NextRow = InsertRow(cboSupplier)
With Sheets("Sheet1").Rows(NextRow)
.Cells(EventCol) = txtEvent
.Cells(DateCol) = txtDate
.Cells(TimeCol) = cboTime
.Cells(FirmAttendenceCol) = txtFirmAttendence 'verify
.Cells(CounterPartyAttendenceCol) = txtCPAttendence
.Cells(MeetingOverviewCol) = TextBox1
End With
End Sub
Private Function InsertRow(SupplierName As String) As Long
'Inserts a new row at the bottom of a supplier block and returns that row number
Dim StartCel As Range
Dim NewRow As Long
Dim NamesCol As Range: Set NamesCol = Sheets("Sheet1").Range("A:A")
'Skip the top Total meetings listing
Set StartCel = NamesCol.Find("Event")
'Find the first empty row under the correct Supplier. Insert new row there
NewRow = NamesCol.Find(What:=SupplierName, After:=StartCel).End(xlDown).Row + 1
Sheets("Sheet1").Rows(NewRow).Insert
InsertRow = NewRow 'Return row number to calling sub
End Function
What is neat about this method is the Public Enum. Copy all the Headers on a sheet, then pasteSpecial(Values). Copy that and PasteSpecial Transpose. Copy that and Paste them into the Enum... End Enum and edit to make the header names valid Variable names. I can enter a couple of dozen Column number variables this way in just a minute. And Gee, I don't have to look to see if the control value is assigned to the right Column Number
Generic Enum variables start with the first variable = 0 unless otherwise noted, subsequent enum variables increment value by 1, unless otherwise noted.
If you have empty columns in your sheet, be sure to add an enum variable "EmptyCol1, 2, 3..." as a placeholder(s)