【问题标题】:Assigning macro to buttons with different single arguments将宏分配给具有不同单个参数的按钮
【发布时间】:2021-02-11 17:34:00
【问题描述】:

我有一个 Sub,它根据存储在这些行上的值在多行中创建多个按钮。我有另一个 Sub 想要分配给每个按钮,但每行都有不同的参数。

第二个 sub 只选择名称作为参数的工作表。

两个子如下:

Sub GenerateButtons()

  Dim btn As Button
  
  Application.ScreenUpdating = False
  
  ActiveSheet.Buttons.Delete
  
  Dim t As Range
  
  For i = 1 To 78 Step 1
    
    Set t = ActiveSheet.Range(Cells(i, 5), Cells(i, 5))
    
    Set btn = ActiveSheet.Buttons.Add(t.Left, t.Top, t.Width, t.Height)
    
    With btn
      .OnAction = "'GoToSheet " & Sheets("SheetCount").Range("A" & i).Value & "'"
      .Caption = Sheets("SheetCount").Range("A" & i).Value
      .Name = Sheets("SheetCount").Range("A" & i).Value
    End With
  
  Next i
  
  Application.ScreenUpdating = True
  
End Sub

Sub GoToSheet(sheet As String)
    
  Sheets(sheet).Select
    
End Sub

当我运行第一个宏时,按钮和宏被分配给这些按钮,但是当我单击其中一个时,Excel 会提示一条错误消息,指出宏“MyWorkbook.xlsm'!'GoToSheet Argument1”不可用。

我已启用所有宏,并且这两个宏存储在标准模块 (Module1) 中。

这段代码有什么问题?如果有另一种方法可以完成此任务(每行的按钮选择一张表),我将不胜感激。

提前致谢。

【问题讨论】:

  • 您作为参数添加到OnAction 的值是数字还是文本?您可能在参数周围缺少引号。
  • Sheets("SheetCount").Range("A" & i).Value 上的值是文本,我需要把它放在引号下吗?

标签: excel vba button


【解决方案1】:

这个:

.OnAction = "'GoToSheet " & Sheets("SheetCount").Range("A" & i).Value & "'"

应该是

.OnAction = "'GoToSheet """ & Sheets("SheetCount").Range("A" & i).Value & """'"

http://dailydoseofexcel.com/archives/2004/06/03/passing-arguments-through-onaction/

测试:

Sub GenerateButtons()

  Dim btn As Button, i As Long, t As Range, ws As Worksheet, v
  
  Set ws = ActiveSheet
  ws.Buttons.Delete
  
  For i = 1 To 4
    
    Set t = ActiveSheet.Cells(i, 5)
    Set btn = ws.Buttons.Add(t.Left, t.Top, t.Width, t.Height)
    
    v = ws.Range("A" & i).Value
    With btn
      .OnAction = "'GotoSheet """ & v & """'"
      .Caption = v
      .Name = v
    End With
  
  Next i
End Sub

Sub GotoSheet(s)
    Debug.Print s
End Sub

【讨论】:

  • 提示编译错误:需要变量或过程,而不是模块。
  • 如果发生这种情况时点击 Debug 会突出显示哪一行?
  • 它显示编译错误并且没有调试按钮:imgur.com/a/xr06Xaw
  • 它选择 .OnAction 行的“Sheets”部分
  • 问题是我有一个名为“Sheets”的模块。现在成功了,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 2013-09-29
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多