我继承了这种可怕性,并被要求进行更新。
目前,这个工作簿是使用一个包含一堆复选框的工作表构建的,所有复选框都与工作簿中的其他工作表相关联。用户选择复选框,然后单击按钮以打印与选中的每个复选框关联的工作表。
它现在的构建方式,为每个选定的工作表运行打印作业。我被要求为所有选择的纸张运行一个打印作业(以避免有一百张封面纸)。
我编写了一个VBA函数,它生成一个字符串,其中包含选中复选框的每个工作表的名称,用引号,逗号分隔。
我需要找出一种方法来使用这些信息来选择所有的纸张,然后在选择我需要的每张纸张后再打印。
甚至地狱,我还能把这个字符串吐回到最初为打印能力编写的宏中。现在宏是工作簿中的另一个工作表,有102个不同的打印命令,由一堆if语句控制。因此,我要将字符串吐入该表中,这样我就可以运行一个打印命令。
无论哪种方式,有人请帮助。
这是我的代码:
Public Function sheetString()
Dim c As Integer
Dim r As Integer
Dim sConcat As String
Dim ws As Worksheet
For c = 2 To 6 Step 2
For r = 1 To 46
If Sheet94.Cells(r, c) = True Then
sConcat = sConcat & Sheet94.Cells(r, c - 1) & ", "
End If
Next r
Next c
sConcat = Left(sConcat, Len(sConcat) - 2)
Debug.Print sConcat
End Function
代码的输出是这样的(具有不同的名称取决于检查哪些框):
编辑:感谢simoco,我到目前为止比我更接近。这是现在的代码。" PR015"," PR018"," PR019"," PR026"," PR029A"
Public Function sheetString()
Dim c As Integer
Dim r As Integer
Dim sConcat As String
Dim ws As Worksheet
Set ws = Sheet94
For c = 2 To 6 Step 2
For r = 1 To 46
If ws.Cells(r, c) = True Then
sConcat = sConcat & ws.Cells(r, c - 1) & ","
End If
Next r
Next c
sConcat = Left(sConcat, Len(sConcat) - 1)
Debug.Print sConcat
sheetString = sConcat
End Function
Sub test()
'if cells with sheet names contains quotes
'Sheets(Split(Replace(sheetString, """", ""), ",")).Select
'if cells with sheet names doesn't contain quotes
Sheets(Split(sheetString, ",")).Select
ActiveSheet.PrintOut Copies:=1
End Sub
它在没有轰炸的情况下运行,但现在它只选择了第一张选中它的盒子。
答案 0 :(得分:1)
这是稍微修改过的函数sheetString
:
Public Function sheetString()
Dim c As Integer, r As Integer
Dim sConcat As String
Dim ws As Worksheet
Set ws = Sheet94
For c = 2 To 6 Step 2
For r = 1 To 46
If ws.Cells(r, c) Then
sConcat = sConcat & ws.Cells(r, c - 1) & ","
End If
Next r
Next c
sConcat = Left(sConcat, Len(sConcat) - 1)
Debug.Print sConcat
sheetString = sConcat
End Function
然后调用就像这样:
Sub test()
'if cells with sheet names contains quotes
'Sheets(Split(Replace(sheetString, """", ""), ",")).PrintOut Copies:=1
'if cells with sheet names doesn't contain quotes
Sheets(Split(sheetString, ",")).PrintOut Copies:=1
End Sub
答案 1 :(得分:-1)
Sub Macro1()
Application.Dialogs(xlDialogPrint).Show
End Sub
Sub Macro()
Worksheets.PrintOut
End Sub
使用此代码打印xl中的所有工作表。同时选择您的具体pri