宏按钮切换到上一张纸

时间:2014-09-05 12:46:07

标签: excel vba excel-vba

所以我一直在玩宏和按钮,我正在尝试制作一个按钮,在点击它时,它会转到上一张(它们是名称第1,2,3等等)。 ..)所以我认为这不应该太难!

这是我到目前为止的代码:

Sub Previous_Day()

    Worksheets("Day " & (sheetNum - 1)).Visible = xlSheetVisible
    Worksheets("Day " & (sheetNum - 1)).Activate
    Worksheets("Day " & sheetNum).Visible = xlSheetHidden

    sheetNum = sheetNum - 1

End Sub

当我点击按钮时出现错误,其中显示"下标超出范围",我不完全确定为什么会发生这种情况,我全局定义sheetNum in这本工作手册'模块,我将在下面显示以下代码:

Public sheetNum As Integer

Private Sub Workbook_Open()

Dim thisSheet As Worksheet
Dim sh As Worksheet
Dim start As Worksheet
Dim shName As String
Dim lastSheet As String



'name of the sheet template
shName = "Food Diary Template.xltm"
lastSheet = "Food Diary Last Entry.xltm"

Set start = Worksheets(1)
With start
    If .Range("A1") = "" Then
    .Range("A1") = Date
    ActiveSheet.Shapes("Button 5").Select
    Selection.Delete
    .Range("B4").Select
    End If
End With

Worksheets(Sheets.Count).Activate
'#### I like to use variables for worksheets:
Set thisSheet = ThisWorkbook.ActiveSheet

'Insert sheet template
With thisSheet
    If .Range("A1") < Date Then

        ActiveSheet.Buttons.Add(436.5, 104.25, 58.5, 18.75).Select
        Selection.OnAction = "nextDay_Click"
        ActiveSheet.Shapes("Button 1").Select
        Selection.Characters.Text = "Button 1"
        With Selection.Characters(start:=1, Length:=8).Font
            .Name = "Calibri"
            .FontStyle = "Regular"
            .Size = 11
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
        End With
        ActiveSheet.Shapes("Button 1").Select
        Selection.Characters.Text = "Next Day"
        With Selection.Characters(start:=1, Length:=8).Font
            .Name = "Calibri"
            .FontStyle = "Regular"
            .Size = 11
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
        End With
        .Range("B4").Select

        Set sh = Sheets.Add(Type:="C:\Users\edawes\AppData\Roaming\Microsoft\Templates\" & lastSheet, _
                            after:=Sheets(Sheets.Count))
        '#### Put today's date in the new sheet:
        sh.Range("A1") = Date
        sh.Name = "Day " & Worksheets.Count
        'Worksheets(sh).Active
        sh.Range("B4").Select

       '#### Hide the old sheet
       .Visible = xlSheetHidden

    End If
End With

sheetNum = Sheets.Count

End Sub

我想要的这个位工作得很好,但它是我不确定的sheetNum,我做得对吗?我希望它是打开文件时的总页数,然后按下按钮时(也有第二天按钮,但是当我使这个按钮工作时会非常简单),它会更新sheetNum变量,以便它可以跟踪并且前一个按钮可以继续按下...

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您只需解析活动工作表的名称,从日期编号中减去一个并激活上一个工作表。

Sub ButtonCode()
    dy = CLng(Split(ActiveSheet.Name, " ")(1))
    dy = dy - 1
    If dy = 0 Then Exit Sub
    Sheets("Day " & dy).Activate
End Sub

因此,如果活动工作表的名称为第4天,则会激活工作表第3天