2017-09-15 14 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

コードの最初の行に 'STOP'を置き、エラーが発生するまで' F8'を実行します。それはそれを絞り込むべきです。 – 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

予約語を使用し始めると、その効果を伝えることが不可能になります。しばしば、それは何もありません。ただし、VBAは、同じコンピュータ上の同じブックで、同じバージョンのMS Officeと同じバージョンのWindowsを実行しても、常に同じ方法で動作しません。はい、それはあなたが行った変更かもしれませんが、私の(野生の)推測では、新しいものとコピーしたものの両方のブックが同時に開くことがあります。一つを閉じても助けにならない。いったんVBAが障害の場所を知ると、それは見つかったものを指し続けます。 – Variatus

関連する問題