Results 1 to 7 of 7

Thread: VBA USERFORM NOT LOADING dISPLAYING ERROR MESSAGE

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Junior Member
    Join Date
    Nov 2023
    Posts
    4
    Rep Power
    0

    Post VBA USERFORM NOT LOADING dISPLAYING ERROR MESSAGE

    I am new in learning Userform VBA code, I designed the Userform with ClsTabMenu,Module1 and Usefrom Code but on clicking to load is diplaying

    Run-time error "91"
    Object Variable or With block variable not set

    find attached excel and codes below

    ClsTamenu coding
    Code:
    Private Declare PtrSafe Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Any) As Long
    Private Declare PtrSafe Function SetCursor Lib "user32" (ByVal hCursor As Long) As Long
    
    'ColorDestaq
    
    Const ColorDestaq = 16730978
    
    Public WithEvents mForm             As MSForms.UserForm
    Public WithEvents mPage             As MSForms.MultiPage
    
    Public WithEvents TabLabel          As MSForms.Label
    Public WithEvents TabIcon           As MSForms.Label
    Public WithEvents ActiveTab         As MSForms.Label
    Public WithEvents TabLine           As MSForms.Label
    
    Public LabelTop                    As Integer
    Public LabelLeft                   As Long
    Public LineLeft                     As Integer
    
    Const IDC_HAND As Long = 32649
    
    Sub MouseMoveIcon()
        Dim hCursor As Long
        hCursor = LoadCursor(0, ByVal IDC_HAND)
        SetCursor hCursor
    End Sub
    Sub CreateTabMenu(form As MSForms.UserForm, muPage As MSForms.MultiPage)
        Dim Ctrl                As Control
        Dim mPageName           As String
        Dim tempCol             As New Collection
        Dim IconCode            As String
        
        Set mForm = form
        Set mPage = muPage
        
        i = 1
        '//Önce labellar kontrol edilir ve sýrasýna gore collactiona eklenir
        '//First, the labels are checked and added to the collection in order.
        
    head:
        For Each Ctrl In mForm.Controls
            TagValue = GetValue(Ctrl, 0)
            mPageName = GetValue(Ctrl, 1)
            If TagValue = "TabMenu" And mPageName = mPage.Name Then
                
                If CInt(GetValue(Ctrl, 2)) = i Then
                    tempCol.Add Ctrl
                    i = i + 1
                    
                    GoTo head:
                End If
            End If
        Next
        
        '//Form yüksekliðinden tabmenu eleman sayýsý ve aralarýndaki
        '//boþluk kadar çýkarýp ikiye bölerek yukarýdan ve aþaðýdan eþit boþluk býrakýyoruz
        
        '//Number of tabmenu elements from form height and between them
        '//We remove as much as the space and divide it into two, leaving equal space from above and below.
        LabelTop = (mForm.InsideHeight - ((tempCol.Count + tempCol.Count) * 20)) / 2
        
        Index = 1
        
        '//Yukarýda tempcol isimli Koleksiyona eklemiþ olduðumuz elemanlarýn dizaynýný yapýyoruz
        '//We are designing the elements we have added to the Collection named tempcol above.
        For i = 1 To tempCol.Count
            
            Set Ctrl = tempCol(i)
            LabelDesign Ctrl
            LineLeft = Ctrl.Left + Ctrl.Width + 15
            
            If GetValue(Ctrl, 2) = 1 Then
                '//Eðer ctrl ilk Tablabel ise activeTab oluþturulur
                '//If ctrl is the first Tablabel, activeTab is created
                
                Set ActiveTab = mForm.Controls.Add("Forms.Label.1", "ActiveTab")
                With ActiveTab
                    .Height = 40
                    .Width = 4
                    .BackColor = ColorDestaq
                    .BackStyle = fmBackStyleOpaque
                    .Top = LabelTop - 10
                    .Left = LineLeft - 1
                End With
                
                '//Ayný þekilde birinci elemana göre yan taraftaki çizgi ayarlanýr
                '//In the same way, the line on the side is adjusted according to the first element.
                Set TabLine = mForm.Controls.Add("Forms.Label.1", "TabLine")
                With TabLine
                    .BackColor = RGB(212, 212, 212)
                    .Width = 1.4
                    .Left = LineLeft
                    .BackStyle = fmBackStyleOpaque
                    .ZOrder 1
                End With
                Ctrl.ForeColor = ColorDestaq
                Ctrl.Font.Name = "Poppins"
                Ctrl.Font.Bold = True
                
                LabelLeft = Ctrl.Left
            Else
                
            End If
            Ctrl.Left = LabelLeft
            
            IconCode = tempCol(i).ControlTipText
            '//Kontrolün ControlTiptex'i dolu ise icon oluþturulur
            '//if the ControlTiptex of the control is full, the icon is created
            If IconCode <> "" Then
                Set TabIcon = mForm.Controls.Add("Forms.Label.1", "TabIcon" & tempCol(i))
                With TabIcon
                    .Font.Name = "Segoe MDL2 Assets"
                    .Font.Size = 14
                    .ForeColor = RGB(51, 51, 51)
                    .BackStyle = fmBackStyleTransparent
                    .Caption = ChrW("&H" & tempCol(i).ControlTipText)
                    .Left = Ctrl.Left - 35
                    .Top = LabelTop
                    .ZOrder 1
                End With
            End If
            
            LabelTop = LabelTop + Ctrl.Height + 20
            
            Set tb = New ClsTabMenu
            Set tb.TabLabel = Ctrl
            Set tb.ActiveTab = ActiveTab
            Set tb.mForm = mForm
            Set tb.mPage = mPage
            tbCol.Add tb
            
            '                    Set TabLabel = Nothing
        Next
        
        With TabLine
            .Height = LabelTop + 20
            .Top = (mForm.InsideHeight - .Height) / 2
        End With
        
        '//Multipage stil ayarlarý yaparak her sayfaya transition effect ayarlýyoruz
        '//We set the transition effect on each page by making multipage style settings
        With mPage
            .Style = fmTabStyleNone
            .Top = 0
            .Value = 0
            .Left = TabLine.Left + 8
            
            For i = 0 To .Pages.Count - 1
                With .Pages(i)
                    .TransitionEffect = 7        '2 '3
                    .TransitionPeriod = 300
                End With
            Next i
            
        End With
        
    End Sub
    Sub LabelDesign(Ctrl As MSForms.Label)
        With Ctrl
            .Font.Name = "Poppins"
            .Font.Bold = True
            .Font.Size = 11
            .ForeColor = vbGrayText
            .Top = LabelTop
            .Width = 110
            .Height = 20
            .Left = .Left + 25
            .Caption = WorksheetFunction.Proper(.Caption)
            .BackStyle = fmBackStyleTransparent
            '        .BorderStyle = fmBorderStyleSingle
            .TextAlign = fmTextAlignLeft
            
        End With
    End Sub
    Function GetValue(Ctrl As Control, cIndex As Integer)
        On Error Resume Next
        GetValue = Split(Ctrl.Tag, "-")(cIndex)
    End Function
    
    Private Sub TabLabel_Click()
        Dim mPageName As String
        Dim iTag As Integer
        Dim speed As Integer
        
        On Error GoTo err:
        
        '//Label'ýn sýrasý alýnýr
        '//Label's order is taken
        iTag = GetValue(TabLabel, 2) - 1
        
        '//Hangi multipage için çalýþacaðý alýnýr
        mPageName = GetValue(TabLabel, 1)
        
        '//Once tum TabLabellar standart hale getirilir
        '//For which multipage it will work
        TabLabelOut TabLabel
        
        '//aktif olan label iþaretlenir
        '//the active label is marked
        With TabLabel
            .ForeColor = ColorDestaq
            .Font.Name = "Poppins"
            .Font.Bold = True
        End With
        
        If TabLabel = "Logout" Then Unload mForm
        
        '//Multipage'in þu anki deðeri ile atanacak deðeri arasýndaki fark alýnýr ve hýz ayarlanýr
        '//The difference between the current value of Multipage and the value to be assigned is taken and the speed is adjusted
        speed = Abs(iTag - mForm.Controls(mPageName).Value)
        
        With ActiveTab
            Do While .Top < TabLabel.Top - 10
                DoEvents
                .Top = .Top + (0.05 * speed)
            Loop
            
            Do While .Top > TabLabel.Top - 10
                DoEvents
                .Top = .Top - (0.05 * speed)
            Loop
        End With
        '//Multipage value atanýr
        '//Multipage value is assigned
        mForm.Controls(mPageName).Value = iTag
        
    err:
        If err.Number = 380 Then
            MsgBox "You need To add a New page"
        End If
    End Sub
    Sub TabLabelOut(Ctrl As MSForms.Label)
        Dim mPageName As String
        
        '//Formdaki diðer labellarý etkilememesi için sadece MultiPage ismi alýnýr
        '//Only MultiPage name is taken so that it does not affect other labels in the form.
        mPageName = GetValue(Ctrl, 1)
        
        Dim ctr As Control
        For Each ctr In mForm.Controls
            
            If TypeName(Ctrl) = "Label" Then
                '//eðer tag'i Multipage name içerirse, standart hale getirilir
                '//if tag contains Multipage name, it is standardized
                If InStr(1, ctr.Tag, mPageName) <> 0 Then
                    ctr.ForeColor = vbGrayText
                    ctr.Font.Name = "Poppins"
                    ctr.Font.Bold = True
                End If
            End If
        Next
        
    End Sub
    
    Private Sub TabLabel_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        MouseMoveIcon
    End Sub

    Userform1 Coding
    Code:
    Private Sub UserForm_Initialize()
        ' Ensure the class instance tb is initialized
        Set tb = New ClsTabMenu
        
        ' Ensure MultiPage1 exists before calling CreateTabMenu
        If Not MultiPage1 Is Nothing Then
            tb.CreateTabMenu Me, MultiPage1
        Else
            MsgBox "MultiPage1 could not be found."
        End If
    End Sub


    Module1 coding
    Code:
    Public tb As New ClsTabMenu
    Public tbCol As New Collection
    Attached Files Attached Files
    Last edited by DocAElstein; 10-20-2024 at 09:03 PM.

Similar Threads

  1. Replies: 51
    Last Post: 10-22-2022, 01:47 PM
  2. Displaying dates in reports as MM/DD
    By papabill in forum Access Help
    Replies: 1
    Last Post: 02-26-2015, 06:16 AM
  3. UserForm ComboBox error
    By Jabba89 in forum Excel Help
    Replies: 4
    Last Post: 12-20-2014, 03:54 AM
  4. How To Bypass A Webquery Error Message
    By mrprofit in forum Excel Help
    Replies: 4
    Last Post: 04-17-2014, 06:39 PM
  5. Replies: 8
    Last Post: 05-21-2013, 06:34 AM

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •