Ошибка выполнения 238 при восстановлении выборок списка с множественным выбором при открытии рабочей книги - PullRequest
0 голосов
/ 26 октября 2018

Скорее, новичок в VBA и возникли трудности с восстановлением выбранных элементов из списка ActiveX ListBox в методе Workbook_Open ().Я продолжаю получать сообщение об ошибке в строке lb.Selected (i) или lb.ListCount, как если бы эти методы отсутствовали в моем объекте списка (см. Исходный код ниже).

Может кто-нибудь сказать мне, что не так вмой код?Большое спасибо.

JM

Private Sub Workbook_Open()
Dim lb, CurShape As Shape
Dim lbName As Variant
Dim Name As String
Dim Width, height, Left, Top As Long
Dim Wsname, rg As String
Dim mg As Range
Dim i, m As Long
Dim WS As Worksheet
Dim SelectedP As Boolean



Set CurShape = ActiveSheet.Shapes("Rectangle 102")
CurShape.Left = 2
CurShape.Top = 1177
CurShape.Width = 661
CurShape.height = 692

Set CurShape = ActiveSheet.Shapes("Rectangle 154")
CurShape.Left = 2
CurShape.Top = 1871
CurShape.Width = 661
CurShape.height = 228

For Each lbName In Array(Array("Assembly", 132, 53, 58, 1200), Array("Propulsion", 144, 53, 262, 1192), _
    Array("Avionics", 204, 88, 452, 1194), Array("Casting", 120, 28, 54, 1274), Array("Processes", 141, 78, 261, 1267), _
    Array("Testing", 197, 135, 456, 1309), Array("Forging", 120, 28, 55, 1325), Array("MRO", 144, 90, 261, 1377), _
    Array("Cabin", 191, 52, 456, 1459), Array("Insulation", 120, 20, 60, 1393), Array("Tubes", 144, 40, 261, 1496), _
    Array("Consummables", 191, 30, 458, 1528), Array("Material", 120, 41, 56, 1441), Array("Metal", 144, 39, 261, 1551), _
    Array("Composite", 190, 109, 461, 1568), Array("Machining", 132, 85, 63, 1513), Array("Engineering", 147, 66, 261, 1613), _
    Array("Welding", 132, 30, 57, 1619), Array("Tools", 146, 40, 58, 1677), Array("Onboard", 294, 101, 264, 1710), _
    Array("Additive", 148, 101, 59, 1742), Array("Certificates", 194, 195, 96, 1894), Array("Approvals", 205, 195, 450, 1891))
    Name = CStr(lbName(0))
    Width = CInt(lbName(1))
    height = CInt(lbName(2))
    Left = CInt(lbName(3))
    Top = CInt(lbName(4))
    Set CurShape = ActiveSheet.Shapes(Name)
    CurShape.Width = Width
    CurShape.height = height
    CurShape.Left = Left
    CurShape.Top = Top
    Set lb = Me.Worksheets(1).Shapes(Name).OLEFormat.Object
    rg = lb.ListFillRange
    Wsname = Split(rg, "!")(0)
    Set WS = ThisWorkbook.Worksheets(Wsname)
    Set mg = WS.Range(rg).Offset(ColumnOffset:=1)
    m = mg.Rows.Count ' lb.ListCount
    For i = 0 To m - 1
        SelectedP = mg.Cells(i + 1, 1).Value
        lb.Selected(i) = SelectedP
    Next i
Next lbName

End Sub

...