OK, I haven't got much information from you to go with, but I can make this work by using the following method. If you want to use it, you will have to modify it to suit your own needs.
To follow this example, you will need to create a new UserForm, preferably in a new workbook, and follow my instructions below.
I have created a UserForm as you state, with a Multipage - currently I have pages 0 and 1 on it. Page 0 I am ignoring for the purposes of this example (you mentioned it was just the General Settings page).
Seperate from the Multipage, I have put the main CommandButton (the one which actually adds the new Page when it's clicked) and have named it AddProgramButton
as you did.
On Page 1, I have a frame as you state. Within this frame, I have put a CommandButton, a TextBox and a ComboBox on mine. I don't know what your controls are, but you will need to follow my example for now.
Now we need to start entering the code. First, if you haven't already got one, insert a Standard Module in your project. At the top of this standard module, enter the following code:
Option Explicit
Public myButtonArr() As New CButton
Public myComboArr() As New CCombo
Public myTextBoxArr() As New CTextBox
Now, in your UserForm module, you should input the following (note that some of this is the information you first provided):
Option Explicit
Private Sub UserForm_Initialize()
Dim ctl As Control
For Each ctl In MultiPage1.Pages(1).Controls
Select Case TypeName(ctl)
Case Is = "CommandButton"
ReDim Preserve myButtonArr(1 To 1)
Set myButtonArr(1).myButton = ctl
Case Is = "ComboBox"
ReDim Preserve myComboArr(1 To 1)
Set myComboArr(1).myCombo = ctl
ctl.AddItem "A"
ctl.AddItem "B"
Case Is = "TextBox"
ReDim Preserve myTextBoxArr(1 To 1)
Set myTextBoxArr(1).myTextBox = ctl
End Select
Next ctl
End Sub
Private Sub AddProgramButton_Click()
Dim l As Double, r As Double
Dim ctl As Control
Dim PAGECOUNT As Long
MultiPage1.Pages.Add
MultiPage1.Pages(1).Controls.Copy
PAGECOUNT = MultiPage1.Pages.Count
MultiPage1.Pages("Page" & PAGECOUNT).Paste
MultiPage1.Pages("Page" & PAGECOUNT).Caption = "#" & PAGECOUNT - 1
For Each ctl In MultiPage1.Pages(1).Controls
If TypeOf ctl Is MSForms.Frame Then
l = ctl.Left
r = ctl.Top
Exit For
End If
Next
For Each ctl In MultiPage1.Pages(PAGECOUNT - 1).Controls
If TypeOf ctl Is MSForms.Frame Then
ctl.Left = l
ctl.Top = r
Exit For
End If
Next
For Each ctl In MultiPage1.Pages(PAGECOUNT - 1).Controls
Select Case TypeName(ctl)
Case Is = "CommandButton"
ReDim Preserve myButtonArr(1 To PAGECOUNT - 1)
Set myButtonArr(PAGECOUNT - 1).myButton = ctl
Case Is = "ComboBox"
ReDim Preserve myComboArr(1 To PAGECOUNT - 1)
Set myComboArr(PAGECOUNT - 1).myCombo = ctl
ctl.AddItem "A"
ctl.AddItem "B"
Case Is = "TextBox"
ReDim Preserve myTextBoxArr(1 To PAGECOUNT - 1)
Set myTextBoxArr(PAGECOUNT - 1).myTextBox = ctl
End Select
Next ctl
End Sub
Now, for each control I have within the frame, we need to create a new Class. Insert three new Class Modules. You must name these as follows:
CButton
CCombo
CTextBox
Now open the CButton class module, and insert the following code:
Option Explicit
Public WithEvents myButton As MSForms.CommandButton
Private Sub myButton_Click()
MsgBox "You clicked the button on one of the pages"
End Sub
Next, open the CCombo class module, and insert the following code:
Option Explicit
Public WithEvents myCombo As MSForms.ComboBox
Private Sub myCombo_Change()
MsgBox "You changed the value of the ComboBox on one of the pages"
End Sub
Finally, open the CTextBox class module, and insert the following code:
Option Explicit
Public WithEvents myTextBox As MSForms.TextBox
Private Sub myTextBox_Change()
MsgBox "You changed some text in the TextBox on one of the pages"
End Sub
Now, if you test your Userform, it should work. You should hopefully be able to modify my example to match your own requirements.
Note: the events in the class module will produce an identical response regardless of which page is selected. You will have to modify the code yourself (or provide more information) to "personalise" the results.
BTW you probably found your original code here: Copy Elements From One Page To Another in Multipage with VBA in Excel.