Я пытаюсь позволить полям команд в пользовательской форме заполняться именованными диапазонами, которые вызываются из другой рабочей книги. У меня есть основная подпрограмма, которая вызывает различные подпрограммы и код пользовательской формы. (Код, как показано ниже)
В настоящее время пользовательская форма загружается, но поля со списком пусты. Я думаю, что проблема в том, чтобы вызвать основной Sub и затем инициализировать пользовательский sub .
Load FrmVendor
FrmVendor.Show
Private Sub FrmVendor_Initialize(myNamedRangeDynamicVendorName As Range, myNamedRangeDynamicVendorCode As Range)
'add column of data from spreadsheet to userform ComboBox
cboxVendorName.RowSource = myNamedRangeDynamicVendorName.Address(external:=True)
cboxVendorCode.RowSource= myNamedRangeDynamicVendorCode.Address(external:=True)
cboxVendorCode.ColumnCount = 2
Это части кода, чтобы показать, где Я получаю мои именованные диапазоны, все настройки пользовательской формы, а затем только часть основного макроса, вызывающего пользовательскую форму.
Option Explicit
Private m_Cancelled As Boolean
Sub NamedRanges(wb As Workbook, wSh As Worksheet)
Dim myNamedRangeDynamicVendor As Range
Dim myNamedRangeDynamicVendorCode As Range
'declare variable to hold defined name
Dim myRangeNameVendor As String
Dim myRangeNameVendorCode As String
'specify defined name
myRangeNameVendor = "namedRangeDynamicVendor"
myRangeNameVendorCode = "namedRangeDynamicVendorCode"
'Vendor Name range
With wSh.Cells
'find last row of source data cell range
myLastRow = .Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
'specify cell range
Set myNamedRangeDynamicVendor = .Range(.Cells(myFirstRow, "A:A"), .Cells(myLastRow, "A:A"))
End With
'Vendor Code range
With wSh.Cells
'specify cell range
Set myNamedRangeDynamicVendorCode = .Range(.Cells(myFirstRow, "B:B"), .Cells(myLastRow, "B:B"))
End With
'create named ranges
ThisWorkbook.Names.Add Name:=myRangeNameVendor, RefersTo:=myNamedRangeDynamicVendor
ThisWorkbook.Names.Add Name:=myRangeNameVendorCode, RefersTo:=myNamedRangeDynamicVendorCode
End sub
' Returns the cancelled value to the calling procedure
Public Property Get Cancelled() As Boolean
Cancelled = m_Cancelled
End Property
Private Sub buttonCancel_Click()
' Hide the Userform and set cancelled to true
Hide
m_Cancelled = True
End Sub
' Hide the UserForm when the user click Ok
Private Sub buttonOk_Click()
Hide
End Sub
' Handle user clicking on the X button
Private Sub FrmVendor_QueryClose(Cancel As Integer, CloseMode As Integer)
' Prevent the form being unloaded
If CloseMode = vbFormControlMenu Then Cancel = True
' Hide the Userform and set cancelled to true
Hide
m_Cancelled = True
End Sub
Private Sub FrmVendor_Initialize(myNamedRangeDynamicVendorName As Range, myNamedRangeDynamicVendorCode As Range)
'add column of data from spreadsheet to userform ComboBox
cboxVendorName.RowSource = myNamedRangeDynamicVendorName.Address(external:=True)
cboxVendorCode.RowSource= myNamedRangeDynamicVendorCode.Address(external:=True)
cboxVendorCode.ColumnCount = 2
End Sub
Sub Main Macro
'
'
'
Call NamedRanges(wb, wSh)
' Display the UserForm
Load FrmVendor
FrmVendor.Show
' Clean up
Unload FrmVendor
Set FrmVendor = Nothing
Любая помощь будет оценена спасибо!