创建循环以有条件地创建按钮

时间:2015-05-24 17:33:51

标签: excel vba loops excel-vba button

我正在使用5列可变范围。第一列只包含从1到列表末尾的升序数字。第五栏包含正面或负面的利润。

我正在尝试创建一个循环,该循环将通过“利润”列并确定每个单元格值是否为正数。如果是正数,我希望它创建一个放在“数字”列中相应单元格上的按钮。我希望它能为每一行带来积极的“利润”价值。

单击该按钮时,我希望它创建一个名为“投资(相应数字来自'数字'列)概述”的新工作表[即“投资2概述”]。然后我希望它返回到初始工作表并将值复制到相应的“利润”单元格中并将其粘贴到新工作表的表格中,然后使用该表格创建图表。

我是VBA的新手,但做了非常彻底的研究。我发现了一个论坛帖子,我认为这是关于我想做什么的,但我无法真正理解它。该网站被链接为该帖子的解决方案: http://navpadexcel.blogspot.com/2006/11/httpwwwcpearsoncomexcelvbehtm.html

无论如何,这是我想出的。不起作用,但希望能够了解我正在尝试做什么:

For Each c In ActiveSheet.Range("Profits").Cells
     If c.Value > 0 Then

Dim t As Range
    Application.ScreenUpdating = False
Set t = Range(c).Offset(-4, 0)

With ActiveSheet.Buttons.Add(t.Left, t.Top, t.Width, t.Height).Select
Selection.OnAction
Sheets.Add.Name = "Investment" & c.Offset(-4, 0).Value & "Overview"
Worksheets("Profits").Activate
c.Select
    Selection.Copy
Worksheets("Investment" & c.Offset(-4, 0).Value & "Overview").Activate
Range("N22").Select
     ActiveCell.PasteSpecial
Range("N21").Value = "=N22 - Profits!K20"
Range("N23").Value = "=N22 + Profits!K20"
Range("M20").Value = "x"
Range("N20").Value = "y"
Range("M21").Value = "1"
Range("M22").Value = "1"
Range("M23").Value = "1"

ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xl3DColumnStacked
ActiveChart.SetSourceData Source:=Range("$M$20:$N$23")

2 个答案:

答案 0 :(得分:0)

不是一个完整的答案,但我在编码中看不到任何明显的东西,但上次我尝试使用创建按钮时,我为单击按钮时想要做的事情创建了一个单独的宏,这样:

ActiveSheet.Buttons.Add Range("A2").Left, Range("A2").Top, Range("B2").Width, Range("A3").Height
ActiveSheet.Buttons.Select
ActiveSheet.Buttons.Caption = "Hide Sheet"
Selection.OnAction = "HideMeNow"

然后有一个名为HideMeNow的单独子

运行它时你的代码是做什么的?

-Cr1kk0

答案 1 :(得分:0)

谢谢Cr1kk0的答案!它指出了我正确的方向,我能够弄明白。

这是我用来循环浏览“Potential_Profits”范围的代码,对于每个正值,创建一个自动拟合到左边4列相应单元格的按钮:

For Each c In ActiveSheet.Range("Potential_Profits").Cells
    If c.Value > 0 Then
     Dim t As Range
     Dim btn As Button
     c.Select
     Set t = ActiveCell.Offset(0, -4)
     Set btn = ActiveSheet.Buttons.Add(t.Left, t.Top, t.Width, t.Height)
        With btn
        .OnAction = "buttonMacro"
        .Caption = c.Offset(0, -4).Value
        .Name = "btn" & c.Offset(0, -4).Value
    End With
    End If
Next

然后我制作了一个名为“buttonMacro”的独立宏(真正让我的创作自由)与按钮相关联。宏选择按钮位于顶部的单元格,将变量分配给“Potential_Profits”范围内的原始单元格,并根据按钮所在的行号创建并命名新工作表。

Sub buttonMacro()

Dim b As Object
Dim rowNumber As Range
Dim buttonCell As Range
Set b = ActiveSheet.Buttons(Application.Caller)

With b.TopLeftCell.Select
    Set rowNumber = ActiveCell
    Set buttonCell = ActiveCell.Offset(0, 4)
    Sheets.Add.Name = "Sheet " & rowNumber.Value
End With
End Sub