Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 2013 VBA为新工作簿创建按钮_Vba_Excel - Fatal编程技术网

Excel 2013 VBA为新工作簿创建按钮

Excel 2013 VBA为新工作簿创建按钮,vba,excel,Vba,Excel,长期用户,第一次海报 我在一家校园食品货架工作,最近我非常参与简化他们的报告和数据输入。我目前正在执行的任务是制作一个程序,该程序将创建一个统一的表格1,以便我迄今为止构建的报告程序可以在我毕业后很长时间内轻松导出到新的工作簿中。我对C/C++、Python以及最近的VBA很熟悉(但绝不是专家) 为工作表1创建按钮时遇到错误。错误是:“无法识别光标下的标识符”。我用这段代码寻找的结果是创建5个单独的按钮,链接到已经定义的5个单独的子程序。我想把它们放在特定的地方,有特定的尺寸。有关守则是: Su

长期用户,第一次海报

我在一家校园食品货架工作,最近我非常参与简化他们的报告和数据输入。我目前正在执行的任务是制作一个程序,该程序将创建一个统一的表格1,以便我迄今为止构建的报告程序可以在我毕业后很长时间内轻松导出到新的工作簿中。我对C/C++、Python以及最近的VBA很熟悉(但绝不是专家)

为工作表1创建按钮时遇到错误。错误是:“无法识别光标下的标识符”。我用这段代码寻找的结果是创建5个单独的按钮,链接到已经定义的5个单独的子程序。我想把它们放在特定的地方,有特定的尺寸。有关守则是:

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中抛出错误。。。任何帮助都将不胜感激

在从案例1复制和粘贴后,您似乎忘记了将“Report1”更改为Report2、Report3等。(:

感谢您提供的所有精彩反馈!它现在可以工作了,下面是代码:

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

如果您有任何关于清理的建议,我将不胜感激!我对面向对象编程非常陌生,希望获得一些关于更好编程实践的反馈!再次感谢!

如果您跳过案例2,继续执行,直到案例3完成,是否也会出错?目前您似乎没有创建案例2中的Report2按钮,而不是Report1。当您调用.OnAction时,它指向一个尚未设置的Report2。这同样适用于其他案例查看您的代码时,您的按钮看起来也会非常小,尽管我猜这是您稍后可以根除的。我还对您如何声明t表示异议目标范围。不妨将其设置为
工作表(1)。单元格(3,7)
。您的答案由下面的@tom给出。另一件我不明白的事情是,为什么您使用循环和案例选择。在当前的结构中,它们完全没有用???