生成数组中可变页数的 PDF
Generate PDF of variable number of sheets in an array
我想通过电子邮件发送 pdf。
Excel 的 sheet 是可变的(有时会添加一些,有时会删除一些),它的名称存储在其他 sheet 称为 Projetos 的范围内。
我的代码似乎一直有效,直到我尝试 select 我的 sheets(使用数组)。
我得到
Run.time error 9 - Subscript out of range.
但是,如果我在数组中手动引入 sheet 名称,代码会完美地完成所有事情。
Sub Send_PDF_Email()
Dim wPath As String, wFile As String, pets As Variant, myArray As Variant, yourArray As String
R = 5
Do While Not IsEmpty(Sheets("Projetos").Cells(R, 2))
R = R + 1
Exit Do
Loop
pets = Worksheets("Projetos").Range("B5:B" & R).Value
myArray = Application.Transpose(pets)
yourArray = Join(myArray, " , ")
ThisWorkbook.Sheets(yourArray).Select
'ThisWorkbook.Sheets(Array("2070507", "2070614")).Select
wPath = ThisWorkbook.Path
wFile = "DadosRPO.pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=wPath & wFile, Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=False
On Error GoTo 0
Set dam = CreateObject("Outlook.Application").CreateItem(0)
dam.To = Sheets("Projetos").Cells(28, 3).Value
dam.Subject = "Dados RPO"
dam.Body = "Seguem os dados referentes aos projectos em execução"
dam.Attachments.Add wPath & wFile
dam.Send
End Sub
你只需要这样做:
cpt=0
For x = 5 To R
cpt = cpt + 1
ReDim Preserve MyArray (cpt)
MyArray (cpt) = Worksheets("Projetos").Range("B" & x ).value
Next x
ThisWorkbook.Sheets(MyArray).Select
或者像 PEH 所说的那样没有循环:
ThisWorkbook.Sheets(MyArray).Select
而不是:
ThisWorkbook.Sheets(yourArray).Select
如果上述方法不起作用,我想你需要:
显示存储在您的数组中的所有值,并检查它们是否与您的 sheet 名称具有相同的值。
谢谢你们。我终于能够 运行 我的代码正确了。
Sub Send_PDF_Email()
Dim wPath As String, wFile As String, myArray() As String
'################ SHEETS TO PDF #######################
R = 5
Do While Not IsEmpty(Sheets("Projetos").Cells(R, 2))
R = R + 1
Loop
cpt = 0
ReDim myArray(1 To R - 5)
For x = 5 To R - 1
cpt = cpt + 1
myArray(cpt) = Worksheets("Projetos").Range("B" & x).Value
Next x
'##################### PDF ################
ThisWorkbook.Sheets(myArray).Select
wPath = ThisWorkbook.Path
wFile = "DadosRPO.pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=wPath & wFile,
Quality:=xlQualityStandard, IncludeDocProperties:=False,
IgnorePrintAreas:=False, OpenAfterPublish:=False
On Error GoTo 0
'#################### EMAIL ####################
Set dam = CreateObject("Outlook.Application").CreateItem(0)
dam.To = Sheets("Projetos").Cells(28, 3).Value
dam.Subject = "Dados RPO"
dam.Body = "Seguem os dados referentes aos projectos em execu��o"
dam.Attachments.Add wPath & wFile
dam.Send
Worksheets("Projetos").Activate
End Sub
我想通过电子邮件发送 pdf。
Excel 的 sheet 是可变的(有时会添加一些,有时会删除一些),它的名称存储在其他 sheet 称为 Projetos 的范围内。
我的代码似乎一直有效,直到我尝试 select 我的 sheets(使用数组)。
我得到
Run.time error 9 - Subscript out of range.
但是,如果我在数组中手动引入 sheet 名称,代码会完美地完成所有事情。
Sub Send_PDF_Email()
Dim wPath As String, wFile As String, pets As Variant, myArray As Variant, yourArray As String
R = 5
Do While Not IsEmpty(Sheets("Projetos").Cells(R, 2))
R = R + 1
Exit Do
Loop
pets = Worksheets("Projetos").Range("B5:B" & R).Value
myArray = Application.Transpose(pets)
yourArray = Join(myArray, " , ")
ThisWorkbook.Sheets(yourArray).Select
'ThisWorkbook.Sheets(Array("2070507", "2070614")).Select
wPath = ThisWorkbook.Path
wFile = "DadosRPO.pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=wPath & wFile, Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=False
On Error GoTo 0
Set dam = CreateObject("Outlook.Application").CreateItem(0)
dam.To = Sheets("Projetos").Cells(28, 3).Value
dam.Subject = "Dados RPO"
dam.Body = "Seguem os dados referentes aos projectos em execução"
dam.Attachments.Add wPath & wFile
dam.Send
End Sub
你只需要这样做:
cpt=0
For x = 5 To R
cpt = cpt + 1
ReDim Preserve MyArray (cpt)
MyArray (cpt) = Worksheets("Projetos").Range("B" & x ).value
Next x
ThisWorkbook.Sheets(MyArray).Select
或者像 PEH 所说的那样没有循环:
ThisWorkbook.Sheets(MyArray).Select
而不是:
ThisWorkbook.Sheets(yourArray).Select
如果上述方法不起作用,我想你需要: 显示存储在您的数组中的所有值,并检查它们是否与您的 sheet 名称具有相同的值。
谢谢你们。我终于能够 运行 我的代码正确了。
Sub Send_PDF_Email()
Dim wPath As String, wFile As String, myArray() As String
'################ SHEETS TO PDF #######################
R = 5
Do While Not IsEmpty(Sheets("Projetos").Cells(R, 2))
R = R + 1
Loop
cpt = 0
ReDim myArray(1 To R - 5)
For x = 5 To R - 1
cpt = cpt + 1
myArray(cpt) = Worksheets("Projetos").Range("B" & x).Value
Next x
'##################### PDF ################
ThisWorkbook.Sheets(myArray).Select
wPath = ThisWorkbook.Path
wFile = "DadosRPO.pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=wPath & wFile,
Quality:=xlQualityStandard, IncludeDocProperties:=False,
IgnorePrintAreas:=False, OpenAfterPublish:=False
On Error GoTo 0
'#################### EMAIL ####################
Set dam = CreateObject("Outlook.Application").CreateItem(0)
dam.To = Sheets("Projetos").Cells(28, 3).Value
dam.Subject = "Dados RPO"
dam.Body = "Seguem os dados referentes aos projectos em execu��o"
dam.Attachments.Add wPath & wFile
dam.Send
Worksheets("Projetos").Activate
End Sub