After much research and trial and error, I was able to solve my issue.
I set the ControlSource of the subform container to nothing, edited the subform, then reset the ControlSource.
Code:
Private Sub Form_Current()
Me.sfm_ClinEff.SourceObject = ""
Call CreateClinicalEfforts(Me.CID)
Call ChangeClinEffortForm(Me.CID)
Me.sfm_ClinEff.SourceObject = "frm_Clinical_Efforts_by_Year"
Me.Refresh
End Sub
Sub ChangeClinEffortForm(lngCID As Long)
DoCmd.SetWarnings False
Dim dbCurr As DAO.Database
Dim rsCurr As DAO.Recordset
Dim frm As Form
Dim NewLabel As Control
Dim NewTextBox As Control
Dim X As Integer
Set dbCurr = CurrentDb()
'This is to stop screen flashing while creating form
Application.VBE.MainWindow.Visible = False
'Open form in design mode and delete all controls
DoCmd.OpenForm "frm_Clinical_Efforts_by_Year", acDesign
Set frm = Forms("frm_Clinical_Efforts_by_Year")
Do Until frm.Controls.Count = 0
DeleteControl frm.Name, frm.Controls(0).Name
Loop
'Create form controls
Set rsCurr = dbCurr.OpenRecordset("SELECT DISTINCT qry_Clinical_Effort_by_Year.Fiscal_Year " & _
"FROM qry_Clinical_Effort_by_Year " & _
"WHERE qry_Clinical_Effort_by_Year.CID=" & lngCID)
Set NewTextBox = CreateControl(frm.Name, acTextBox, acDetail)
With NewTextBox
.Name = "txt_ClinEffort"
.ControlSource = "Clinical_Effort"
.Top = 180
.Left = 1620
.Width = 4320
.Height = 360
.ColumnWidth = 4320
End With
Set NewLabel = CreateControl(frm.Name, acLabel, , NewTextBox.Name)
With NewLabel
.Name = "lbl_ClinEffort" & strHeadings
.Caption = "Clinical Effort"
.Top = 180 + (450 * X)
.Left = 180
.Width = 1880
.Height = 360
End With
'Creates label and text box for each year
X = 1
Do While rsCurr.EOF = False
strHeadings = rsCurr.Fields(0).Value
Set NewTextBox = CreateControl(frm.Name, acTextBox, acDetail)
With NewTextBox
.Name = "txt_" & strHeadings
.ControlSource = strHeadings
.Top = 180 + (450 * X)
.Left = 1620
.Width = 1440
.Height = 360
.ColumnWidth = 1080
End With
Set NewLabel = CreateControl(frm.Name, acLabel, , NewTextBox.Name)
With NewLabel
.Name = "lbl_" & strHeadings
.Caption = "FY " & strHeadings
.Top = 180 + (450 * X)
.Left = 180
.Width = 1440
.Height = 360
End With
rsCurr.MoveNext
X = X + 1
Loop
'Destroy instances
rsCurr.Close
Set rsCurr = Nothing
dbCurr.Close
Set dbCurr = Nothing
'save and close form
DoCmd.Save acForm, frm.Name
DoCmd.Close acForm, frm.Name
DoCmd.SetWarnings True
End Sub