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

Vba 创建循环以有条件地创建按钮,vba,loops,excel,button,Vba,Loops,Excel,Button,我使用的是5列变量范围。第一列只包含从1到列表末尾的升序数字。第五列包含正利润或负利润 我试图创建一个循环,通过“利润”列确定每个单元格的值是否为正。如果是正数,我希望它创建一个按钮,放置在“number”列中相应的单元格上。我希望它对每一行都这样做,并且具有正的“利润”值 单击按钮时,我希望它创建一个名为“投资(编号栏中的相应编号)概述”的新表[即“投资2概述”]。然后我希望它返回到初始工作表,复制相应“利润”单元格中的值,并将其粘贴到新工作表上的表中,然后使用该表创建图表 我是VBA新手,但

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

我试图创建一个循环,通过“利润”列确定每个单元格的值是否为正。如果是正数,我希望它创建一个按钮,放置在“number”列中相应的单元格上。我希望它对每一行都这样做,并且具有正的“利润”值

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

我是VBA新手,但已经做了相当深入的研究。我发现了一个论坛帖子,我认为是关于我想做什么,但我真的不能把我的头围绕它。此网站作为解决方案链接到以下帖子:

不管怎样,这是我想到的。不起作用,但希望能给我一个想法:

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")

这不是一个完整的答案,但我在您的编码中看不到任何明显的东西,但上次我尝试创建按钮时,我创建了一个单独的宏,用于单击按钮后要执行的操作,因此:

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

感谢Cr1kk0的回答!它为我指明了正确的方向,我也能找到答案

下面是我在“潜在利润”范围内循环使用的代码,对于每个正值,创建一个自动安装到左侧对应单元格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”(在那里我真正发挥了我的创造力),它链接到按钮。宏选择按钮所在的单元格,将变量指定给“潜在利润”范围内的原始单元格,并根据按钮所在的行号创建和命名新工作表

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