2015-02-12 2 views
0

В настоящее время я пытаюсь создать кнопку команды при создании нового листа. Однако я столкнулся с ошибкой. Ошибка 438, объект не поддерживает это свойство или метод. Нужна помощь здесь. Приветствия.vba Создание командной кнопки при создании нового листа

Sub wdlsinflow() 

    Dim r As Range, LstRw As Long, LstCo As Long 
    Dim Obj As Object 
    Dim Code As String 

    LstRw = Sheets("sheet2").Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row 
    LstCo = Sheets("sheet2").Cells.Find(What:="*", SearchOrder:=xlColumns, SearchDirection:=xlPrevious, LookIn:=xlValues).Column 

    Const myCompany As String = "RECEIVABLES - INFLOWS" 
    Set r = Sheets("sheet2").Columns(1).Find(myCompany, , , 1) 

    If Not r Is Nothing Then 
     If Not IsSheetExists(myCompany) Then 
      Sheets.Add(After:=Sheets(Sheets.Count)).Name = myCompany 
     End If 

     With Sheets(myCompany) 
      .Cells.Clear 
      Range(r, Sheets("sheet2").Cells(LstRw, LstCo)).Copy .Cells(1) 

     Set Obj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _ 
      Link:=False, DisplayAsIcon:=False, Left:=200, Top:=100, Width:=100, Height:=35) 
      Obj.Name = "TestButton" 
      'buttonn text 
      ActiveSheet.OLEObjects(1).Object.Caption = "Test Button" 



      Code = "Sub ButtonTest_Click()" & vbCrLf 
      Code = Code & "Call Tester" & vbCrLf 
      Code = Code & "End Sub" 
     End With 
    End If 

    With Sheets(myCompany).VBProject.VBComponents(Sheets(myCompany).Name).CodeModule 
     .insertlines .CountOfLines + 1, Code 
    End With 

End Sub 
+0

И на какой линии происходит эта ошибка? –

+0

На этой строке 'code' Set Obj = ActiveSheet.OLEObjects.Add (ClassType: = "Forms.CommandButton.1", _ Ссылка: = False, DisplayAsIcon: = False, Left: = 200, Top: = 100, Ширина: = 100, Высота: = 35) –

ответ

0

Это работает для меня:

Sub wdlsinflow() 

    Dim sht As Worksheet 
    Dim Obj As Object 
    Dim Code As String 
    Dim cmod 

    Set sht = Sheets.Add(After:=Sheets(Sheets.Count)) 

    With sht 
     .Name = "blah" 
     .Cells.Clear 


     Set Obj = .OLEObjects.Add(ClassType:="Forms.CommandButton.1", _ 
           Link:=False, DisplayAsIcon:=False, Left:=200, _ 
           Top:=100, Width:=100, Height:=35) 

     Obj.Name = "ButtonTest" '<< name must match code below... 
     Obj.Object.Caption = "Test Button" 

     Code = "Sub ButtonTest_Click()" & vbCrLf & _ 
       " Call Tester" & vbCrLf & _ 
       "End Sub" 

     With .Parent.VBProject.VBComponents(.CodeName).CodeModule 
      .insertlines .CountOfLines + 1, Code 
     End With 
    End With 

End Sub 
+0

Hi1 Спасибо за ответ. Я все еще получаю сообщение об ошибке. Появляется поп, указывающий «Невозможно войти в режим прерывания в это время» до появления той же самой ошибки –

+0

Не могу сказать, в чем проблема: моя версия упрощена по сравнению с вашей, но отлично работает для меня. –

+0

Hafiz, вы используете F8 (stepping) или F5 (run)? Я получаю ту же ошибку, когда использую F8. –

Смежные вопросы