Hello,
I guess you know how to do this thing, I beleive it is quite simple, but I don't know how to do it.
in fact my problem is how to give a name to a form which is created dynamically when the users update years value.
this form is supposed to ask the users to enter some values: years and Percent. then when finished the user closes the form (the values will be saved to a table, but I haven't done this step yet)
my question is how to save the form wth a dynamic name
formname = "FormMR" & formNumber
knowing that I am using access 97.
I added here my code, which works fine
the only thing that i need to add is how can i give the form a name
thank you in advance
Lina
Private Sub InvestMRNombreAnnee02_AfterUpdate()
On Error GoTo InvestMRNombreAnnee02_Err
Dim frm As Form
Dim formNumber As String
Dim formName As String
Dim initialFormName As String
initialFormName = Me.Name
formNumber = Right(initialFormName, 2)
formName = "FormMR" & formNumber
Dim counterYears As Integer
Dim firstYear As Integer
Dim i As Integer
Dim a As String
counterYears = Me![InvestMRNombreAnnee02]
firstYear = Me![InvestMRpremAnneeInvest01]
'DoCmd.OpenForm formName, acDesign, "", "", , acHidden
Set frm = CreateForm(, "search")
a = frm.Name
Dim ctlTexteYear As Control, ctlTextePercent As Control
Dim ctlEtiquetteYear As Control, ctlEtiquetteTitre As Control
Dim ctlLabelYear As Control, ctlLabelPercent As Control
Dim ctlEtiquettePercent As Control
Dim entDonnéeYearX As Integer, entDonnéeYearY As Integer
Dim entDonnéePercentX As Integer, entDonnéePercentY As Integer
Dim entLabelDecaissementX As Integer, entLabelDecaissmentY As Integer
Dim entLabelTitreX As Integer, entLabelTitreY As Integer
Dim entLabelYearX As Integer, entLabelYearY As Integer
Dim entLabelPercentX As Integer, entLabelPercentY As Integer
Dim entLabelPourcentX As Integer, entLabelPourcentY As Integer
Dim entOkButtonX As Integer, entOkbuttonY As Integer
entLabelTitreX = 100
entLabelTitreY = 50
entLabelYearX = 2800
entLabelYearY = 300
entLabelPercentX = 4800
entLabelPercentY = 300
entOkButtonX = 10000
entOkbuttonY = 1500
Set ctlEtiquetteTitre = CreateControl(frm.Name, acLabel, , , "Répartition décaissements Materiel Roulant", entLabelTitreX, entLabelTitreY, 1, 1)
ctlEtiquetteTitre.Name = "titreMRRepartitionSc" & formNumber
Set ctlLabelYear = CreateControl(frm.Name, acLabel, , , "Année", entLabelYearX, entLabelYearY, 1, 1)
ctlLabelYear.Name = "titreMRAnneeSc" & formNumber
ctlLabelYear.FontWeight = 600
Set ctlLabelPercent = CreateControl(frm.Name, acLabel, , , "Pourcentage", entLabelPercentX, entLabelPercentY, 1, 1)
ctlLabelPercent.Name = "titreMRPercentSc" & formNumber
ctlLabelPercent.FontWeight = 600
For i = 1 To counterYears
' Définit les valeurs de position pour les nouveaux contrôles.
entLabelDecaissementX = 100
entLabelDecaissmentY = 100 + 500 * i
entDonnéeYearX = 2500
entDonnéeYearY = 100 + 500 * i
entDonnéePercentX = 4500
entDonnéePercentY = 100 + 500 * i
entLabelPourcentX = 6500
entLabelPourcentY = 100 + 500 * i
Set ctlTexteYear = CreateControl(frm.Name, acTextBox, , "", "", _
entDonnéeYearX, entDonnéeYearY)
ctlTexteYear.Name = "MRSC" & formNumber & "_Année_" & i
Set ctlEtiquetteYear = CreateControl(frm.Name, acLabel, , ctlTexteYear.Name, "Année " & i & " de décaissement:", _
entLabelDecaissementX, entLabelDecaissmentY, 1, 1)
ctlEtiquetteYear.Name = "LabelMRSC" & formNumber & "_Année_" & i
Set ctlTextePercent = CreateControl(frm.Name, acTextBox, , "", "", _
entDonnéePercentX, entDonnéePercentY)
ctlTextePercent.Name = "MRSC" & formNumber & "_Percent" & i
Set ctlEtiquettePercent = CreateControl(frm.Name, acLabel, , , " %", _
entLabelPourcentX, entLabelPourcentY, 1, 1)
Next i
Dim mdlName As String
Dim mdl As Module
Dim BtnClose As Control
Set BtnClose = CreateControl(frm.Name, acCommandButton, , , "", 8000, 500, 600, 600)
BtnClose.Name = "boutonFermer"
' describe button
With BtnClose
.Caption = "&Close"
.Cancel = True
.TabIndex = 2
End With
BtnClose.OnClick = "[Event Procedure]"
Dim strAddCode As String
Dim frm2 As Form
Set frm2 = Forms(frm.Name)
Set mdl = frm2.Module
' refer to the module
strAddCode = "" ' start to build code
'add code below to close form w/o saving it
strAddCode = "Private Sub " & BtnClose.Name & "_Click()" & vbCrLf
strAddCode = strAddCode & "DoCmd.Close, , acsaveyes"
strAddCode = strAddCode & vbCrLf
strAddCode = strAddCode & "End Sub" & vbCrLf
strAddCode = strAddCode & vbCrLf
With mdl ' add code to module here
.InsertText (strAddCode)
End With
DoCmd.OpenForm frm.Name, acNormal, "", "", , acNormal
InvestMRNombreAnnee02_Exit:
Exit Sub
InvestMRNombreAnnee02_Err:
MsgBox Error$
Resume InvestMRNombreAnnee02_Exit
End Sub
I guess you know how to do this thing, I beleive it is quite simple, but I don't know how to do it.
in fact my problem is how to give a name to a form which is created dynamically when the users update years value.
this form is supposed to ask the users to enter some values: years and Percent. then when finished the user closes the form (the values will be saved to a table, but I haven't done this step yet)
my question is how to save the form wth a dynamic name
formname = "FormMR" & formNumber
knowing that I am using access 97.
I added here my code, which works fine
the only thing that i need to add is how can i give the form a name
thank you in advance
Lina
Private Sub InvestMRNombreAnnee02_AfterUpdate()
On Error GoTo InvestMRNombreAnnee02_Err
Dim frm As Form
Dim formNumber As String
Dim formName As String
Dim initialFormName As String
initialFormName = Me.Name
formNumber = Right(initialFormName, 2)
formName = "FormMR" & formNumber
Dim counterYears As Integer
Dim firstYear As Integer
Dim i As Integer
Dim a As String
counterYears = Me![InvestMRNombreAnnee02]
firstYear = Me![InvestMRpremAnneeInvest01]
'DoCmd.OpenForm formName, acDesign, "", "", , acHidden
Set frm = CreateForm(, "search")
a = frm.Name
Dim ctlTexteYear As Control, ctlTextePercent As Control
Dim ctlEtiquetteYear As Control, ctlEtiquetteTitre As Control
Dim ctlLabelYear As Control, ctlLabelPercent As Control
Dim ctlEtiquettePercent As Control
Dim entDonnéeYearX As Integer, entDonnéeYearY As Integer
Dim entDonnéePercentX As Integer, entDonnéePercentY As Integer
Dim entLabelDecaissementX As Integer, entLabelDecaissmentY As Integer
Dim entLabelTitreX As Integer, entLabelTitreY As Integer
Dim entLabelYearX As Integer, entLabelYearY As Integer
Dim entLabelPercentX As Integer, entLabelPercentY As Integer
Dim entLabelPourcentX As Integer, entLabelPourcentY As Integer
Dim entOkButtonX As Integer, entOkbuttonY As Integer
entLabelTitreX = 100
entLabelTitreY = 50
entLabelYearX = 2800
entLabelYearY = 300
entLabelPercentX = 4800
entLabelPercentY = 300
entOkButtonX = 10000
entOkbuttonY = 1500
Set ctlEtiquetteTitre = CreateControl(frm.Name, acLabel, , , "Répartition décaissements Materiel Roulant", entLabelTitreX, entLabelTitreY, 1, 1)
ctlEtiquetteTitre.Name = "titreMRRepartitionSc" & formNumber
Set ctlLabelYear = CreateControl(frm.Name, acLabel, , , "Année", entLabelYearX, entLabelYearY, 1, 1)
ctlLabelYear.Name = "titreMRAnneeSc" & formNumber
ctlLabelYear.FontWeight = 600
Set ctlLabelPercent = CreateControl(frm.Name, acLabel, , , "Pourcentage", entLabelPercentX, entLabelPercentY, 1, 1)
ctlLabelPercent.Name = "titreMRPercentSc" & formNumber
ctlLabelPercent.FontWeight = 600
For i = 1 To counterYears
' Définit les valeurs de position pour les nouveaux contrôles.
entLabelDecaissementX = 100
entLabelDecaissmentY = 100 + 500 * i
entDonnéeYearX = 2500
entDonnéeYearY = 100 + 500 * i
entDonnéePercentX = 4500
entDonnéePercentY = 100 + 500 * i
entLabelPourcentX = 6500
entLabelPourcentY = 100 + 500 * i
Set ctlTexteYear = CreateControl(frm.Name, acTextBox, , "", "", _
entDonnéeYearX, entDonnéeYearY)
ctlTexteYear.Name = "MRSC" & formNumber & "_Année_" & i
Set ctlEtiquetteYear = CreateControl(frm.Name, acLabel, , ctlTexteYear.Name, "Année " & i & " de décaissement:", _
entLabelDecaissementX, entLabelDecaissmentY, 1, 1)
ctlEtiquetteYear.Name = "LabelMRSC" & formNumber & "_Année_" & i
Set ctlTextePercent = CreateControl(frm.Name, acTextBox, , "", "", _
entDonnéePercentX, entDonnéePercentY)
ctlTextePercent.Name = "MRSC" & formNumber & "_Percent" & i
Set ctlEtiquettePercent = CreateControl(frm.Name, acLabel, , , " %", _
entLabelPourcentX, entLabelPourcentY, 1, 1)
Next i
Dim mdlName As String
Dim mdl As Module
Dim BtnClose As Control
Set BtnClose = CreateControl(frm.Name, acCommandButton, , , "", 8000, 500, 600, 600)
BtnClose.Name = "boutonFermer"
' describe button
With BtnClose
.Caption = "&Close"
.Cancel = True
.TabIndex = 2
End With
BtnClose.OnClick = "[Event Procedure]"
Dim strAddCode As String
Dim frm2 As Form
Set frm2 = Forms(frm.Name)
Set mdl = frm2.Module
' refer to the module
strAddCode = "" ' start to build code
'add code below to close form w/o saving it
strAddCode = "Private Sub " & BtnClose.Name & "_Click()" & vbCrLf
strAddCode = strAddCode & "DoCmd.Close, , acsaveyes"
strAddCode = strAddCode & vbCrLf
strAddCode = strAddCode & "End Sub" & vbCrLf
strAddCode = strAddCode & vbCrLf
With mdl ' add code to module here
.InsertText (strAddCode)
End With
DoCmd.OpenForm frm.Name, acNormal, "", "", , acNormal
InvestMRNombreAnnee02_Exit:
Exit Sub
InvestMRNombreAnnee02_Err:
MsgBox Error$
Resume InvestMRNombreAnnee02_Exit
End Sub