2017-07-19 83 views
0

这感觉就像一个愚蠢的问题,但我不能弄清楚,所以这里去...VBA - 命令按钮点击子 - 当工作表中创建新的每次

我有,基于一个工作簿什么是输入到用户窗体,每次点击用户窗体上的命令按钮时创建一个新的工作表,并删除旧窗体。

这意味着,尽管新的工作表总是被赋予相同的名称(“结果”),但工作表编号每次都会增加;它目前正在调用自己的Sheet48,下一次运行它将会是Sheet49。

我想要做的是将一个命令按钮添加到该“结果”表,用户可以单击它们以将它们带到不同的工作表。我已经添加了一些代码到用户窗体中,它在“结果”工作表上创建命令按钮本身。我还没有写出能告诉它将用户带到另一张工作表的子文件,但我相信我可以毫无困难地做到这一点。

我的问题是我如何将sub分配给按钮,考虑到它所在的工作表不是永久的?我认为子应该进入一个标准模块,但是我所看到的所有例子都是以“CommandButton1_Click”或“CommandButton2_Click”开头的,并存储在表单对象本身中。看起来像这些数字1和2是指给定工作表上的命令按钮的顺序,但是大概是标准模块上的一个子将不知道要查看哪个工作表。

我希望这是有道理的 - 任何有用的解释将不胜感激!谢谢。

编辑: 这是我使用创建命令按钮并(试图)子分配给它的代码:

'Add a command button, which will allow users to jump to the full report 

ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _ 
     , DisplayAsIcon:=False, Left:=1025, Top:=130.5, Width:=160, Height:= _ 
     400).Select 

ActiveSheet.CommandButton1.Caption = "Click here to see the original report" 
ActiveSheet.CommandButton1.WordWrap = True 
ActiveSheet.CommandButton1.OnAction = "Module1.ButtonForOriginal" 'the sub works in isolation, but this line isn't assigning it. 

任何人都可以看到任何问题吗? ButtonForOriginal子过程独立工作,所以它看起来像我只是不正确地调用它?

编辑2 - 我现在已经用不同的方法取得了正确的效果 - 如果您有兴趣,请参阅下面的答案。感谢那些帮助并让我走上正确道路的人!

回答

0

好吧,我有点想通了。我出于某种原因决定使用ActiveX命令按钮,而不是普通的旧窗体。这似乎使事情变得更加困难。我不明白的细节,但我已经达到了我所做的后来的效果,而不是:

ActiveSheet.Buttons.Add(1025, 130.5, 160, 400).Select 
     Selection.Characters.Text = "Click here to see the original report" 
    With Selection.Characters(Start:=1, Length:=200).Font 
     .Name = "Verdana" 
     .FontStyle = "Regular" 
     .Size = 10 
     .Strikethrough = False 
     .Superscript = False 
     .Subscript = False 
     .OutlineFont = False 
     .Shadow = False 
     .Underline = xlUnderlineStyleNone 
     .ColorIndex = 1 
    End With 
    Selection.OnAction = "ButtonForOriginal" 
0

据我所知,你试图添加新的按钮,我会建议使用非依赖按钮超链接来运行你的模块。

单击插入形状 - 矩形左右 - 和使用Selection.OnAction = “!YourWorkBook”YOURSUB“

+0

使用新按钮,我实际上并没有添加新的工作表;我只想取消隐藏现有的一个。 –

+0

对不起,按下发送太快... –

+0

事件序列是 - Userform创建新工作表,其中还包含一个新按钮 - 单击新按钮将取消隐藏现有工作表。感谢您的建议 - 我会尝试,或者在我创建新按钮的用户表单代码中进行尝试,希望我理解正确! –

0

”CommandButton1_Click“ 应该是一个事件过程。他们进入与对象所在表单相连的模块页面。所以,当你点击它时,它知道要运行哪个程序,它是连接到按钮所在表单的程序。

+0

对不起,我还是有点困惑......按钮所在的表格只是临时存在,所以我不认为我可以在模块页面添加任何东西? (我假设工作表的模块页面将在项目中的Microsoft Excel对象下列出 - 是吗?) –

+0

是的。所以当你创建按钮时,你正在做类似 .OnAction =“Fred” –

+0

是的,我有ActiveSheet.CommandButton1.OnAction =“ButtonForOriginal”(“ButtonForOriginal”是我的子名称)。子实际上是独立工作的,所以我现在觉得我只是在这个OnAction部分没有正确调用它....嗯。 –