我目前正在处理一个工作簿,其中所有工作表信息都存储在工作表中("概述"(。在"A:A"列中,我有每个工作表的名称。我想做的是一个宏,它运行在"A:A"列中列出的每个单元格中,并打印出该工作表。打印代码不是问题。问题是我不知道把单元格称为工作表。我想出了这个解决方案,但我不起作用。
Worksheets(Range("A1")).Activate
是否有可能引用单元格中的激活工作表?
尝试
Worksheets(Range("A1").Value).Activate
如注释中所述,您的代码将受益于在此处限定对象(Range("A1")
在哪张表上?(。最后,您很少需要激活工作表来对其执行操作。只需跳过Activate
,直接跳到您的操作语句
Dim ws As Worksheet
With ThisWorkbook 'or ActiveWorkbook, or ?
Set ws = .Worksheets(.Worksheets("Overview").Range("A1").Value)
End With
'do something with ws
以下代码通过名称引用给定的工作表,以文本形式写入Worksheets("Overview")
中的A:A
列:
Sub PrintWorksheetNames()
Dim myCell As Range
Dim lastCell As Long
lastCell = LastRow("Overview")
For Each myCell In ThisWorkbook.Worksheets("Overview").Range("A1:A" & lastCell).Cells
Dim wksName As String
wksName = myCell.Text
ThisWorkbook.Worksheets(wksName).Range("A1:C20").PrintOut Copies:=1, Collate:=True
Next
End Sub
Public Function LastRow(wsName As String, Optional columnToCheck As Long = 1) As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(wsName)
LastRow = ws.Cells(ws.Rows.Count, columnToCheck).End(xlUp).Row
End Function
Public Function LastRow(wsName As String, Optional columnToCheck As Long = 1) As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(wsName)
LastRow = ws.Cells(ws.Rows.Count, columnToCheck).End(xlUp).Row
End Function
- 写入工作表名称的范围由
ThisWorkbook.Worksheets("Overview").Range("A1:A" & lastCell).Cells
定义 - 如果不更改上述范围,则可以对其进行硬编码-
ThisWorkbook.Worksheets("Overview").Range("A1:A8").Cells
。因此,不需要附加功能CCD_ 8 - CCD_ 9是针对列CCD_ 11的CCD_。
A
是第一列,因此可选参数负责处理它 - 如何避免在Excel VBA中使用Select(这是每个VBA人员的必读书目(