VBA代码创建导致隐藏工作表的按钮

时间:2018-09-05 09:44:57

标签: excel vba excel-vba

我创建了一个模块,只需单击一个按钮,即可创建一个具有特定名称的新隐藏工作表。该特定名称也会添加到初始工作表的列表中。我希望模块在初始工作表中自动创建一个新按钮,单击该按钮将打开最初创建的隐藏工作表。我是该领域的新手,因此,如果这个问题不符合Stack Overflow的标准,我深表歉意。 我当前拥有的代码是:

Set ws = Sheets("INPUT")

financing = ws.Range("E2").Value
compName = ws.Range("E3").Value

lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(lastRow, 1) = financing
ws.Cells(lastRow, 2) = compName

ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveWorkbook.Sheets(Worksheets.Count).Name = compName & "-" & financing
ActiveWorkbook.Sheets(compName & "-" & financing).Visible = xlSheetHidden

2 个答案:

答案 0 :(得分:0)

1创建一个按钮

您可以使用excel中的development-tab创建一个按钮。有一个名为“插入”的按钮,然后插入“ Active-X按钮”,请注意也有命令按钮,但它们是为了与旧版本兼容。不要使用它们。通过在Excel的“开发”选项卡中单击“设计模式”按钮,您可以进入设计模式。

2在CommandButton_Click()模块中输入代码

在设计模式下,双击按钮,它将显示以下内容:

Private Sub BUTTONNAME_click()
' Enter Code here OR even better call code from module
Sub End

然后您可以继续进行操作并输入代码,或者甚至更好地从模块调用代码。按钮代码将如下所示:

Private Sub BUTTONNAME_click()
call modulename.subname()
Sub End

模块代码如下:

Sub Subname() 
Set ws = Sheets("INPUT")

financing = ws.Range("E2").Value
compName = ws.Range("E3").Value

lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(lastRow, 1) = financing
ws.Cells(lastRow, 2) = compName

ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveWorkbook.Sheets(Worksheets.Count).Name = compName & "-" & financing
ActiveWorkbook.Sheets(compName & "-" & financing).Visible = xlSheetHidden
End Sub

请注意此处:据我所知,您不知道如何使用按钮运行代码。我认为您的代码有效。

答案 1 :(得分:0)

通常最好将对新工作表的引用存储在变量中。然后,您无需依赖工作表的位置或名称-两者都可以由用户更改。

此代码为按钮赋予与要指向的工作表相同的名称(我希望这不会对命名约定造成任何问题)
按下按钮时运行的代码将查看按钮名称并激活该工作表。

Sub AddButton()

    Dim btn As Button
    Dim wrkSht As Worksheet

    Set wrkSht = ThisWorkbook.Worksheets.Add
    With wrkSht
        .Name = "compNameValue - FinancingValue"
        .Move After:=Sheets(ThisWorkbook.Worksheets.Count)
        .Visible = xlSheetVeryHidden
    End With

    Set btn = ThisWorkbook.Worksheets("Sheet1").Buttons.Add(20, 20, 20, 20)
    With btn
        .ShapeRange.IncrementTop 100
        .ShapeRange.IncrementLeft 100
        .OnAction = "MacroTest"
        .Name = wrkSht.Name
    End With

End Sub

Sub MacroTest()

    With ThisWorkbook.Worksheets(Application.Caller)
        .Visible = xlSheetVisible
        .Activate
    End With

End Sub

您可能需要根据需要将ThisWorkbook更新为ActiveWorkbook
ThisWorkbook始终是包含正在运行的代码的书。
就像上面所说的,ActiveWorkbook是当前处于活动状态的工作簿。