Excel:动态选择工作表(无工作表名称)

时间:2019-01-08 09:08:07

标签: excel vba

Excel文件中的工作表是动态的。我有一个按钮,可以使用新名称创建工作表。

可以动态选择工作表吗?或者不知道床单的名称。

这是我的vba代码,用于打印特定范围的单元格

Private Sub CommandButton1_Click()
    Sheets("-32628").Select
    range("A1:BZ18").Select
    ActiveSheet.PageSetup.PrintArea = "A1:BZ18"
    ActiveWindow.SelectedSheets.PrintOut from:=1, To:=1, Copies:=1, Collate _
      :=True
End Sub

我要选择的是Sheetname: -32628,而不必输入工作表的实际名称?

2 个答案:

答案 0 :(得分:3)

  

我有一个按钮,可以使用新名称创建工作表。

如果要在按钮中创建工作表,则非常简单。在代码顶部声明一个工作表对象,以便其他过程可以访问它,然后使用它。例如

Dim ws As Worksheet

Private Sub CommandButton1_Click()
    If Not ws Is Nothing Then
        ws.PageSetup.PrintArea = "A1:BZ18"

        ActiveWindow.SelectedSheets.PrintOut _
        from:=1, To:=1, Copies:=1, Collate:=True
    End If
End Sub

Private Sub CommandButton2_Click()
    Set ws = ThisWorkbook.Sheets.Add
    ws.Name = "-32628"
End Sub

答案 1 :(得分:2)

首先Avoid using Select in Excel VBA。这会大大减慢您的代码速度,这是非常糟糕的做法。

而不是直接引用您的工作表,例如,而不是ActiveSheet

Worksheets("-32628").PageSetup.PrintArea = "A1:BZ18"

有3种方式引用工作表:

  1. 通过其可见的标签名称

    Worksheets("YourSheetName")
    
  2. 通过其标签位置

    Worksheets(1) 'first sheet in tab list
    
  3. 使用其VBA名称

    Sheet1 'note that 1 is not the position of the sheet in the tab list. It's just a name.
    

  • 请注意,可以在VBA-Editor的属性窗口中更改工作表的VBA名称。
  • 还要注意,Worksheets("Sheet1")Worksheets(1)Sheet1可以是3个完全不同的工作表。我建议不要使用数字,并给它们起不同的名称,因为数字很容易引起混淆。