2017-09-15 650 views
0

我有一个用户窗体并点击它应该访问或打开一个用户窗体的按钮。但每次代码获取该部分,用户窗体运行时错误'424':需要的对象Excel VBA

运行时错误 '424': 所需的对象

弹出。这里是我的代码:

If CheckSheet(TextBoxValue) = True Then 
     Sheets(TextBoxValue).Select 
     UserForm.Show 
    Else 
     Set Worksheet = ThisWorkbook.Sheets.Add(After:=Sheets(Sheets.Count)) 
     Worksheet.Name = TextBoxValue 

     Dim label As Control 
     For Each label In UserForm.Controls 
      If TypeName(label) = "Label" Then 
       With ActiveSheet 
        i = i + 1 

        lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 
        .Cells(lastRow, i).Value = label.Caption 
       End With 
      End If 
     Next 

     UserForm.Show 
    End If 

每次它获取到部分与UserForm.ShowFor Each label In UserForm.Controls

我检查形式的拼写已经多次,这是大同小异。

+1

你有“选项显式”设置吗? – FunThomas

+0

它确实拼写为'UserForm'?创建的第一个表单通常称为“UserForm1”。编辑:忘记那个...只是读你的文章的最后一行。 :) –

+0

在代码的第一行和'F8'中放入一个“STOP”,直到发生错误。这应该缩小它的范围。 – CLR

回答

0

你可能有这样的事情在脑海: -

Sub TestCode() 

    Dim Ws As Worksheet     ' "Worksheet" is a reserved word 
    Dim MyForm As UserForm1    ' "UserForm" is a reserved word 
    Dim MyLabel As Control    ' "Label" is a reserved word 
    Dim C As Long      ' better name for a column than "i" 

    Set MyForm = New UserForm1 
    If GetSheet(Ws) Then 
     For Each MyLabel In MyForm.Controls 
      If TypeName(MyLabel) = "Label" Then 
       With Ws     ' true, Ws is the ActiveSheet but 
             ' always use the same name for the same sheet 
        C = C + 1 

        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 
        .Cells(LastRow, C).Value = MyLabel.Caption 
       End With 
      End If 
     Next 
    End If 
    MyForm.Show 
End Sub 

Private Function GetSheet(Ws As Worksheet) As Boolean 
    ' return True if Ws didn't exist 

    Dim Ws As Worksheet 

    On Error Resume Next 
    Set Ws = Worksheets(TextBoxValue) 
    If Err Then      ' Err = doesn't exist 
     Set Ws = ThisWorkbook.Sheets.Add(After:=Sheets(Sheets.Count)) 
     Ws.Name = TextBoxValue 
     GetSheet = True 
    End If 
End Function 

Private Function TextBoxValue() As String 
    TextBoxValue = "MySheetName" 
End Function 

为了测试一个词是“保留”的话,在你的VB编辑器,然后按F1选择它。如果MS Office使用它,不要争论。

+0

嗨,我有不同的工作簿中的不同用户窗体中的代码,它正在工作。我只是复制那些不同工作簿中的代码。唯一的区别是我修改了我目前正在处理的用户窗体上的控件。我的问题可能与我的用户表单上的修改有关吗?谢谢。 –

+0

一旦你开始使用保留字它不可能说出效果,而且通常不会。但是,即使在同一台计算机上的同一工作簿上运行相同版本的MS Office和相同版本的Windows,VBA也不会每次都以完全相同的方式工作。是的,这可能是您所做的修改,但我的(疯狂)猜测是您可能同时打开了两个工作簿,即新建工作簿和您从中复制的工作簿。关闭一个将无济于事。一旦VBA知道错误发生在哪里,它会一直指向它发现的内容。 – Variatus

相关问题