AgentSmith2000
New Member
- Joined
- Sep 25, 2022
- Messages
- 2
- Office Version
- 2019
- Platform
- Windows
Hello, Ive seen a few questions about adding controls at runtime but Im afraid I must be missing a few concepts. I have tried to adapt some code but the project Im working on is difficult to extrapolate the sample code to. I have the form creation down but cannot figure out adding items to a class module for use after creation. I know how to program these things work in a static userform for the most part but its a bit more difficult to get dynamically. Any help, direction would be great. Thank you.
The project objective:
1) Create multiple objects for viewing/adding PDFs at runtime based on user data on Sheet1.
2) View PDFs on userform with web browser,
3) Drop new pdfs in list view (panel) to update web browser,
4) Drop event also adds file to associated file directory,
5) After object creation during Initialize, loop through new web browsers to load existing URL currently from Sheet2,
6) Individual Command buttons updates bad load on web browsers,
7) double click web browser opens new large userform with WB following URL.
8) I wont get into the tree view requirements here but the tree view needs to print checked selection and go to selected item on double click (if possible); however, it must be able to reference class1 objects, which is why I mention here.
Issues:
1) Cannot get objects to add properly to class module to handle click, double click, and drop events.
2) I cannot loop through web browsers to load existing URL until objects are "available,"
Attempted Solutions:
1) Adding New Class Module from module or userform module at runtime,
2) Insert lines of code to UF module at runtime,
Sheet 1
1 Table of Contents
2 Schedule of Values
3 Unit Price Breakdown
4 General Conditions
5 Subcontractor Spread
6 Other Costs
7 Landscaping Trade Summary Proposal 1 Proposal 2 Proposal 3
8 Building Clean Trade Summary Proposal 1 Proposal 2 Proposal 3
9 Demo Trade Summary Proposal 1 Proposal 2 Proposal 3
Sheet2 - Sheet6 <blank>
UserForm1:
height 660
Width 950
has treeview called TreeView1
has frame called Frame1
has command button called Hide
Code:
Private Sub Initialize_()
Dim myForm As DocuBuilder
Dim myFrame As Control
Dim addLabel As Control
Dim addBTN As Control
Dim addLV As Control
Dim WB As Object
Dim x As String, y As String, z As String
'Create Object Code
Dim i, j, k, colcount, rowcount As Integer
rowcount = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row 'Application.WorksheetFunction.Count(Sheet1.Range("A:A"))
With Frame1
.ScrollHeight = (260 * rowcount)
End With
For i = 1 To rowcount
colcount = Sheet1.Cells(i, Columns.Count).End(xlToLeft).Column
x = Sheet1.Cells(i, 1).Text & " " & Sheet1.Cells(i, 2).Text 'Worksheets("Sheet1").Cells(i, 1).Text & " " & Worksheets("Sheet1").Cells(i, 2).Text
y = "C:\...\Test PDFs\1.pdf"
TreeView1.Nodes.Add Key:=Sheet1.Cells(i, 2).Text, Text:=Sheet1.Cells(i, 2).Text
If colcount < 3 Then
Set addLabel = Me.Frame1.Controls.Add("Forms.Label.1")
With addLabel
.Name = "Label" & 100 + i
.Top = (258 * i) - 228
.Left = 6
.Height = 15
.Width = Len(x) * 8
.Caption = x
.FontSize = 10
.FontBold = True
Sheet3.Cells(i, 1).Value = .Name 'This line and others like it are simply a way of mapping the name of the objects so I can make sure the naming convention works correctly, this can be commented
End With
Set WB = Me.Frame1.Controls.Add("Shell.Explorer.2")
With WB
.Name = "WebBrowser" & 100 + i
.Top = (258 * i) - 210
.Left = 6
.Height = 220
.Width = 170
.RegisterAsBrowser = True
.RegisterAsDropTarget = True
.Navigate "about:blank"
'.Navigate2 y
.Offline = True
Sheet4.Cells(i, 1).Value = .Name
End With
Set addLV = Me.Frame1.Controls.Add("MSComctlLib.ListViewCtrl.2")
With addLV
.Name = "ListView" & 100 + i
.Top = (258 * i) - 210
.Left = 176
.Height = 220
.Width = 10
.Appearance = 0
.BackColor = &H80000004
.BorderStyle = 0
.OLEDragMode = 0
.OLEDropMode = 1
Sheet5.Cells(i, 1).Value = .Name
'.Visible = False
End With
Set addBTN = Me.Frame1.Controls.Add("Forms.CommandButton.1")
With addBTN
.Name = "CommandButton" & 100 + i
.Top = (258 * i) - 228
.Left = 130
.Height = 18
.Width = 45
.Caption = "Update"
.FontSize = 8
.FontBold = False
Sheet6.Cells(i, 1).Value = .Name
End With
Else
Set addLabel = Me.Frame1.Controls.Add("Forms.Label.1")
With addLabel
.Name = "Label" & 500 + i
.Top = (258 * i) - 240
.Left = 6
.Height = 15
.Width = Len(x) * 10
.Caption = x
.FontSize = 10
.FontBold = True
Sheet3.Cells(i, 1).Value = .Name
End With
For j = 3 To colcount
z = Worksheets("Sheet1").Cells(i, j).Text
'CHILD LOOP
TreeView1.Nodes.Add Sheet1.Cells(i, 2).Text, tvwChild, CStr(one), Sheet1.Cells(i, j).Text
Set addLabel = Me.Frame1.Controls.Add("Forms.Label.1")
With addLabel
.Name = "Label" & 100 + i & j
.Top = (258 * i) - 222
.Left = (184 * (j - 2)) - 174 'The j-2 is due to column 3 that these items first appear on
.Height = 10
.Width = 80
.Caption = z
.FontSize = 8
.FontBold = True
Sheet3.Cells(i, j).Value = .Name
End With
Set WB = Me.Frame1.Controls.Add("Shell.Explorer.2")
With WB
.Name = "WebBrowser" & 100 + i & j
.Top = (258 * i) - 210
.Left = (184 * (j - 2)) - 174
.Height = 220
.Width = 170
.RegisterAsBrowser = True
.RegisterAsDropTarget = True
.Navigate "about:blank"
'.Navigate2 y
.Offline = True
Sheet4.Cells(i, j).Value = .Name
End With
Set addLV = Me.Frame1.Controls.Add("MSComctlLib.ListViewCtrl.2")
With addLV
.Name = "ListView" & 100 + i & j
.Top = (258 * i) - 210
.Left = (184 * (j - 2)) - 174 + 170
.Height = 220
.Width = 10
.Appearance = 0
.BackColor = &H80000004
.BorderStyle = 0
.OLEDragMode = 0
.OLEDropMode = 1
'.Visible = False
Sheet5.Cells(i, j).Value = .Name
End With
Set addBTN = Me.Frame1.Controls.Add("Forms.CommandButton.1")
With addBTN
.Name = "CommandButton" & 100 + i & j
.Top = (258 * i) - 230
.Left = (184 * (j - 2)) - 53
.Height = 18
.Width = 50
.Caption = "Update"
.FontSize = 8
.FontBold = False
Sheet6.Cells(i, j).Value = .Name
End With
Next j
End If
Next i
End Sub
UserForm2
Label called FileViewLBL
Web browser called FileViewWB
The project objective:
1) Create multiple objects for viewing/adding PDFs at runtime based on user data on Sheet1.
2) View PDFs on userform with web browser,
3) Drop new pdfs in list view (panel) to update web browser,
4) Drop event also adds file to associated file directory,
5) After object creation during Initialize, loop through new web browsers to load existing URL currently from Sheet2,
6) Individual Command buttons updates bad load on web browsers,
7) double click web browser opens new large userform with WB following URL.
8) I wont get into the tree view requirements here but the tree view needs to print checked selection and go to selected item on double click (if possible); however, it must be able to reference class1 objects, which is why I mention here.
Issues:
1) Cannot get objects to add properly to class module to handle click, double click, and drop events.
2) I cannot loop through web browsers to load existing URL until objects are "available,"
Attempted Solutions:
1) Adding New Class Module from module or userform module at runtime,
2) Insert lines of code to UF module at runtime,
Sheet 1
1 Table of Contents
2 Schedule of Values
3 Unit Price Breakdown
4 General Conditions
5 Subcontractor Spread
6 Other Costs
7 Landscaping Trade Summary Proposal 1 Proposal 2 Proposal 3
8 Building Clean Trade Summary Proposal 1 Proposal 2 Proposal 3
9 Demo Trade Summary Proposal 1 Proposal 2 Proposal 3
Sheet2 - Sheet6 <blank>
UserForm1:
height 660
Width 950
has treeview called TreeView1
has frame called Frame1
has command button called Hide
Code:
Private Sub Initialize_()
Dim myForm As DocuBuilder
Dim myFrame As Control
Dim addLabel As Control
Dim addBTN As Control
Dim addLV As Control
Dim WB As Object
Dim x As String, y As String, z As String
'Create Object Code
Dim i, j, k, colcount, rowcount As Integer
rowcount = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row 'Application.WorksheetFunction.Count(Sheet1.Range("A:A"))
With Frame1
.ScrollHeight = (260 * rowcount)
End With
For i = 1 To rowcount
colcount = Sheet1.Cells(i, Columns.Count).End(xlToLeft).Column
x = Sheet1.Cells(i, 1).Text & " " & Sheet1.Cells(i, 2).Text 'Worksheets("Sheet1").Cells(i, 1).Text & " " & Worksheets("Sheet1").Cells(i, 2).Text
y = "C:\...\Test PDFs\1.pdf"
TreeView1.Nodes.Add Key:=Sheet1.Cells(i, 2).Text, Text:=Sheet1.Cells(i, 2).Text
If colcount < 3 Then
Set addLabel = Me.Frame1.Controls.Add("Forms.Label.1")
With addLabel
.Name = "Label" & 100 + i
.Top = (258 * i) - 228
.Left = 6
.Height = 15
.Width = Len(x) * 8
.Caption = x
.FontSize = 10
.FontBold = True
Sheet3.Cells(i, 1).Value = .Name 'This line and others like it are simply a way of mapping the name of the objects so I can make sure the naming convention works correctly, this can be commented
End With
Set WB = Me.Frame1.Controls.Add("Shell.Explorer.2")
With WB
.Name = "WebBrowser" & 100 + i
.Top = (258 * i) - 210
.Left = 6
.Height = 220
.Width = 170
.RegisterAsBrowser = True
.RegisterAsDropTarget = True
.Navigate "about:blank"
'.Navigate2 y
.Offline = True
Sheet4.Cells(i, 1).Value = .Name
End With
Set addLV = Me.Frame1.Controls.Add("MSComctlLib.ListViewCtrl.2")
With addLV
.Name = "ListView" & 100 + i
.Top = (258 * i) - 210
.Left = 176
.Height = 220
.Width = 10
.Appearance = 0
.BackColor = &H80000004
.BorderStyle = 0
.OLEDragMode = 0
.OLEDropMode = 1
Sheet5.Cells(i, 1).Value = .Name
'.Visible = False
End With
Set addBTN = Me.Frame1.Controls.Add("Forms.CommandButton.1")
With addBTN
.Name = "CommandButton" & 100 + i
.Top = (258 * i) - 228
.Left = 130
.Height = 18
.Width = 45
.Caption = "Update"
.FontSize = 8
.FontBold = False
Sheet6.Cells(i, 1).Value = .Name
End With
Else
Set addLabel = Me.Frame1.Controls.Add("Forms.Label.1")
With addLabel
.Name = "Label" & 500 + i
.Top = (258 * i) - 240
.Left = 6
.Height = 15
.Width = Len(x) * 10
.Caption = x
.FontSize = 10
.FontBold = True
Sheet3.Cells(i, 1).Value = .Name
End With
For j = 3 To colcount
z = Worksheets("Sheet1").Cells(i, j).Text
'CHILD LOOP
TreeView1.Nodes.Add Sheet1.Cells(i, 2).Text, tvwChild, CStr(one), Sheet1.Cells(i, j).Text
Set addLabel = Me.Frame1.Controls.Add("Forms.Label.1")
With addLabel
.Name = "Label" & 100 + i & j
.Top = (258 * i) - 222
.Left = (184 * (j - 2)) - 174 'The j-2 is due to column 3 that these items first appear on
.Height = 10
.Width = 80
.Caption = z
.FontSize = 8
.FontBold = True
Sheet3.Cells(i, j).Value = .Name
End With
Set WB = Me.Frame1.Controls.Add("Shell.Explorer.2")
With WB
.Name = "WebBrowser" & 100 + i & j
.Top = (258 * i) - 210
.Left = (184 * (j - 2)) - 174
.Height = 220
.Width = 170
.RegisterAsBrowser = True
.RegisterAsDropTarget = True
.Navigate "about:blank"
'.Navigate2 y
.Offline = True
Sheet4.Cells(i, j).Value = .Name
End With
Set addLV = Me.Frame1.Controls.Add("MSComctlLib.ListViewCtrl.2")
With addLV
.Name = "ListView" & 100 + i & j
.Top = (258 * i) - 210
.Left = (184 * (j - 2)) - 174 + 170
.Height = 220
.Width = 10
.Appearance = 0
.BackColor = &H80000004
.BorderStyle = 0
.OLEDragMode = 0
.OLEDropMode = 1
'.Visible = False
Sheet5.Cells(i, j).Value = .Name
End With
Set addBTN = Me.Frame1.Controls.Add("Forms.CommandButton.1")
With addBTN
.Name = "CommandButton" & 100 + i & j
.Top = (258 * i) - 230
.Left = (184 * (j - 2)) - 53
.Height = 18
.Width = 50
.Caption = "Update"
.FontSize = 8
.FontBold = False
Sheet6.Cells(i, j).Value = .Name
End With
Next j
End If
Next i
End Sub
UserForm2
Label called FileViewLBL
Web browser called FileViewWB