VBA save multiple records code, 2 for loops or change to 1 for loop with if statement inside
On Error GoTo 0 is used in conjunction with On Error Resume Next to reset any errors that may occur between the two statements.

For this reason,  On Error GoTo 0 in the ↓ line below ↓ should be changed to On Error Resume Next.

If Not BasicInclude.DebugMode Then On Error GoTo Error_Handler Else On Error GoTo 0


I would rewrite the Validation statement removing the else clause.  This will make the code easier to read.

If out &lt;&gt; "" Then
    MsgBox "Please fill out the following fields: " &amp; vbCrLf &amp; out, vbCritical, "Error"
    SaveSerials = 1
    Goto Error_Exit:
End If


Setting objects to nothing is rarely necessary with today's garbage collectors.

set rs = Nothing
set rs2 = Nothing
set rs3 = Nothing


Recordset should be closed.

rs.Close
rs2.Close
rs3.Close


Grouping your recordset field will improve the readability of the code, make it easier to spot missing fields, and just makes sense.

For i = 1 To Me.lstData.ListCount - 1
    'Add record to dbo_Part_Serial_Number
    rs.AddNew
    rs.Fields("Part_No").Value = Me.txtPart_No.Value
    rs.Fields("Label_Date").Value = Me.txtDate_Created.Value
    rs.Fields("Serial_No").Value = Me.lstData.Column(i)
    rs.Fields("Operator").Value = Me.txtOperator.Value
    rs.Fields("Work_Order").Value = Me.cboWork_Order.Value
    rs.Fields("Date_Code").Value = Me.txtDate_Code.Value
    rs.Fields("Notes").Value = Me.txtNotes.Value
    rs.Fields("Flex_Circuit_Date_Code").Value = Me.txtFC_Date_Code.Value
    rs.Fields("Flex_Circuit_Int_Date_Code").Value = Me.txtFCI_Date_Code.Value
    rs.Fields("Substrate_Date_Code").Value = Me.txtSubstrate_Date_Code.Value
    rs.Fields("SMF_Date_Code").Value = Me.txtSMF_Date_Code.Value
    rs.Fields("r").Value Me.chkR.Value
    rs.Update

    'Add record to dbo_Label_Trace_Temp
    rs2.AddNew
    rs2.Fields("PartNumber").Value = Me.txtPart_No.Value
    rs2.Fields("PartSerialNumber").Value = Me.lstData.Column(i)
    rs2.Fields("Operator").Value = "%1" &amp; Me.txtOperator.Value &amp; "%"
    rs2.Fields("WorkOrder").Value = Me.cboWork_Order.Value
    rs2.Fields("Date_Code").Value = Me.txtDate_Code.Value
    rs2.Update
Next


You may consider extracting code  related to the three recordset into their own subroutines but it is not necessary.

It is hard to discern the meaning of the return value of SaveSerials (e.g. -1, 0, 1) without studying the code. Consider using an Enum.