2015-03-05 6 views
1

Долгосрочный пользователь, первый раз постер!Excel 2013 VBA Создание кнопок для новой рабочей книги

Я работаю на продовольственном шельфе Campus, и я недавно очень активно участвовал в упорядочении их отчетности и ввода данных. Задача, которую я сейчас выполняю, заключается в создании программы, которая создала единый лист 1, так что программы отчетности, которые я создал до сих пор, могут быть легко экспортированы в новые книги, вскоре после окончания учебы. Я знаком (но далеко не экспертом) с C/C++, Python и совсем недавно VBA.

У меня возникла ошибка при создании кнопок для листа 1. Ошибка: «Идентификатор под курсором не распознается». Результат, который я ищу с помощью этого кода, состоит в том, чтобы создать 5 отдельных кнопок, связанных с 5 отдельными Sub-программами, которые уже определены. Я хотел бы разместить их в определенных местах с определенными размерами. Код, указанный в тексте:

Sub DONOTUSEbuttonMaker() 
Dim Report1, Report2, Report3, Unique, NewWork As Object 

Dim Targeter As Range 
Dim i As Integer 

For i = 1 To 5 
    Select Case i: 
    Case 1: 
     Set Targeter = Worksheets(1).Range(Cells(3, 7), Cells(3, 7)) 
     Set Report1 = Worksheets(1).Buttons.Add(Targeter.Left, Targeter.Top, Width:=2, Height:=0.33) 
     With Report1 
      .OnAction = "WeeklyReportsP1" 
      .Caption = "Weekly Reports P1" 
      .Name = "Weekly Reports P1" 
     End With 
    Case 2: 
     Set Targeter = Worksheets(1).Range(Cells(5, 7), Cells(5, 7)) 
     Set Report1 = Worksheets(1).Buttons.Add(Targeter.Left, Targeter.Top, Width:=2, Height:=0.33) 
     With Report2 
      .OnAction = "WeeklyReportsP2" 
      .Caption = "Weekly Reports P2" 
      .Name = "Weekly Reports P2" 
     End With 
    Case 3: 
     Set Targeter = Worksheets(1).Range(Cells(7, 7), Cells(7, 7)) 
     Set Report1 = Worksheets(1).Buttons.Add(Targeter.Left, Targeter.Top, Width:=2, Height:=0.33) 
     With Report3 
      .OnAction = "WeeklyReportsP3" 
      .Caption = "Weekly Reports P3" 
      .Name = "Weekly Reports P3" 
     End With 
    Case 4: 
     Set Targeter = Worksheets(1).Range(Cells(9, 7), Cells(9, 7)) 
     Set Report1 = Worksheets(1).Buttons.Add(Targeter.Left, Targeter.Top, Width:=2, Height:=0.33) 
     With Unique 
      .OnAction = "CalculateUnique" 
      .Caption = "Calculate Unique" 
      .Name = "Calculate Unique" 
     End With 
    Case 5: 
     Set Targeter = Worksheets(1).Range(Cells(11, 7), Cells(11, 7)) 
     Set Report1 = Worksheets(1).Buttons.Add(Targeter.Left, Targeter.Top, Width:=2, Height:=0.33) 
     With NewWork 
      .OnAction = "NewWeekWorkSheet" 
      .Caption = "Create New Worksheet" 
      .Name = "Create New Worksheet" 
     End With 
End Select 
Next i 


End Sub 

Ошибка возникает в случае 2 на линии с .OnAction. Который также кажется странным для меня, потому что он не бросает ошибку в случае 1 ... Любая помощь будет принята с благодарностью!

+0

Если вы пройдете через nd skip Case 2 и продолжить, пока он не пройдет через Case 3, там тоже ошибка? – mrbungle

+0

В настоящее время кажется, что вы не создаете кнопку Report2 в случае 2, а скорее Report1. Когда вы затем вызываете .OnAction, он указывает на Report2, который еще не установлен. То же самое относится к другим случаям. –

+0

Имея взгляд на ваш код, похоже, что ваши кнопки будут _really_ слишком малы, хотя я думаю, что это то, что вы можете исправить позже. Я также принимаю решение о том, как вы объявляете свой диапазон таргетинга. Возможно, просто установите его в 'Worksheets (1) .Cells (3,7)'. – eirikdaude

ответ

0

Кажется, что вы забыли изменить «Report1» в Report2, доклада3 и т.д. в каждом случае после копирования & вставки из дела 1. (:!

0

Спасибо за все фантастические отзывы Работает Теперь и вот код:!

Sub DONOTUSEbuttonMaker() 
Dim Report1, Report2, Report3, Unique, NewWork As Button 
Dim Targeter As Range 

Set Targeter = Worksheets(1).Cells(3, 7) 
Set Report1 = Worksheets(1).Buttons.Add(Targeter.Left, Targeter.Top, Width:=144, Height:=24) 
With Report1 
    .OnAction = "WeeklyReportsP1" 
    .Caption = "Weekly Reports P1" 
    .Name = "Weekly Reports P1" 
End With 

Set Targeter = Worksheets(1).Cells(5, 7) 
Set Report2 = Worksheets(1).Buttons.Add(Targeter.Left, Targeter.Top, Width:=144, Height:=24) 
With Report2 
    .OnAction = "WeeklyReportsP2" 
    .Caption = "Weekly Reports P2" 
    .Name = "Weekly Reports P2" 
End With 

Set Targeter = Worksheets(1).Cells(7, 7) 
Set Report3 = Worksheets(1).Buttons.Add(Targeter.Left, Targeter.Top, Width:=144, Height:=24) 
With Report3 
    .OnAction = "WeeklyReportsP3" 
    .Caption = "Weekly Reports P3" 
    .Name = "Weekly Reports P3" 
End With 

Set Targeter = Worksheets(1).Cells(9, 7) 
Set Unique = Worksheets(1).Buttons.Add(Targeter.Left, Targeter.Top, Width:=144, Height:=24) 
With Unique 
    .OnAction = "CalculateUnique" 
    .Caption = "Calculate Unique" 
    .Name = "Calculate Unique" 
End With 

Set Targeter = Worksheets(1).Cells(11, 7) 
Set NewWork = Worksheets(1).Buttons.Add(Targeter.Left, Targeter.Top, Width:=144, Height:=24) 
With NewWork 
    .OnAction = "NewWeekWorkSheet" 
    .Caption = "Create New Worksheet" 
    .Name = "Create New Worksheet" 
End With 

End Sub 

Любые рекомендации по очистке его, была бы оценена Я очень новой для объектно-ориентированного программирования и хотел бы получить обратную связь о лучших практик программирования Еще раз спасибо

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