【发布时间】:2012-05-22 11:41:17
【问题描述】:
我在互联网上找到了很多资源,它们几乎可以 完成我想做的事情,但不完全是。我有一个命名范围“日程表”。对于 dayList 中的每一天,我想在用户表单上创建一个按钮,该按钮将运行当天的宏。我可以add the buttons dynamically,但不知道如何将 daycell.text 从命名范围传递到按钮、事件处理程序、宏:S 这是我必须创建用户表单的代码:
Sub addLabel()
ReadingsLauncher.Show vbModeless
Dim theLabel As Object
Dim labelCounter As Long
Dim daycell As Range
Dim btn As CommandButton
Dim btnCaption As String
For Each daycell In Range("daylist")
btnCaption = daycell.Text
Set theLabel = ReadingsLauncher.Controls.Add("Forms.Label.1", btnCaption, True)
With theLabel
.Caption = btnCaption
.Left = 10
.Width = 50
.Top = 20 * labelCounter
End With
Set btn = ReadingsLauncher.Controls.Add("Forms.CommandButton.1", "runButton", True)
With btn
.Caption = "Run Macro for " & btnCaption
.Left = 80
.Width = 80
.Top = 20 * labelCounter
' .OnAction = "btnPressed"
End With
labelCounter = labelCounter + 1
Next daycell
End Sub
为了解决上述问题,我目前提示用户输入他们想要运行的日期(例如第 1 天)并将其传递给宏并且它可以工作:
Sub B45runJoinTransactionAndFMMS()
loadDayNumber = InputBox("Please type the day you would like to load:", Title:="Enter Day", Default:="Day1")
Call JoinTransactionAndFMMS(loadDayNumber)
End Sub
Sub JoinTransactionAndFMMS(loadDayNumber As String)
xDayNumber = loadDayNumber
Sheets(xDayNumber).Activate
-Do stuff
End Sub
因此,对于我的每个 runButtons,它都需要显示 daycell.text,并运行一个使用相同文本作为参数的宏来选择要在其上执行操作的工作表。
任何帮助都会很棒。我已经看到动态编写 vba 代码以处理宏的响应,但我相信必须有某种方式可以通过传递参数更优雅地完成,只是不知道如何。非常感谢!
【问题讨论】:
-
this 看起来接近你想要的。 OTOH 为什么不创建一个从
daylist填充的组合框和一个可以读取所选值的命令按钮? -
我想我可能不得不选择那个选项。由于宏用于筛选和上传数据,我希望我能够创建一个小的启动屏幕,该屏幕将填充每个日期的一行并显示记录数、错误数等,并具有每个按钮都会使用户更加友好。但是,除非我能找到更简单的解决方案,否则我认为您的建议将是赢家。
-
另一个想法...也许您可以在一个特殊的工作表中建立一个相关信息(天数、# 记录、# 错误等)的表格,并在那里捕获点击事件。
-
不太清楚如何从工作表中捕获点击事件,但如果可以的话,它可能会简化接口、条件格式等......
-
我添加了这个作为答案,因为评论框不适合发布多行代码。
标签: vba excel excel-2007