我有这个代码,它应循环遍历下拉列表中的每个项目。当选择下一个项目时,它应该更新主工作表。然后创建工作表的pdf。会发生什么,它会在每个项目后创建一个名称为pdf,但内容不会从第一个项目更改。我基本上有50个pdfs的第1项称为50个不同的东西。虽然我想要50件以每件事命名的50件物品的pdf?任何帮助赞赏
Sub Create_pdf_pack()
Dim inputRange As Range
Dim c As Range
Set inputRange = Evaluate(Range("AD5").Validation.Formula1)
For Each c In inputRange
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
fileName:="C:\test\" & c.Value, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Next c
End Sub
答案 0 :(得分:2)
这是与我上次评论相对应的代码。 它应检索验证值(ComboBox中的值)并更改[AD5]中每个可能值的值,然后计算工作表并将其导出。
Sub Create_pdf_pack()
Dim inputRange As Range
Dim c As Range
Set inputRange = Evaluate(Range("AD5").Validation.Formula1)
For Each c In inputRange
[AD5] = c.Value
'you might need to refresh the sheet here
ActiveSheet.Calculate
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
fileName:="C:\test\" & c.Value, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Next c
End Sub
答案 1 :(得分:0)
您可能忘记修改下拉列表的值(变量名为c?)。读取此值并将其添加到pdf名称中,但不进行修改。
就像现在一样,在for循环中只有一条用于创建pdf的指令,因此,它是唯一执行的操作。
尝试将字段的修改添加到循环中。
希望它可以帮到你。
答案 2 :(得分:0)
如果数据验证已设置为支持,则您的编码应该有效。这很容易验证。
如果我设置 DV ,如:
并运行此代码的缩短版本:
Sub qwerty()
Dim inputRange As Range
Dim c As Range, msg As String
Set inputRange = Evaluate(Range("AD5").Validation.Formula1)
msg = inputRange.Address & vbCrLf & vbCrLf
For Each c In inputRange
msg = msg & c.Address & vbTab & "C:\test\" & c.Value & vbCrLf
Next c
MsgBox msg
End Sub
我明白了:
首先尝试我的短程序。
修改#1:强>
根据您的评论,尝试替换:
ActiveSheet.ExportAsFixedFormat _
使用:
c.ExportAsFixedFormat _
修改#2:强>
我们可能会越来越近了。我认为每个 c 代表 DV 列表中的单个单元格,并且每个 c 包含的地址为要导出的单元格块。如果是这种情况,则替换:
ActiveSheet.ExportAsFixedFormat _
行:
Dim rng As Range
Set rng = Range(c.Text)
rng.ExportAsFixedFormat _
答案 3 :(得分:0)
也许这可以帮到你:
Public mainSheets(3) As String
Public Function setMainSheets()
mainSheets(0) = "sheet1"
mainSheets(1) = "sheet2"
mainSheets(2) = "sheet3"
End Function
Public Function hasMainSheet(search As String, arrey As Variant) As Boolean
hasMainSheet = (UBound(Filter(arrey, search)) > -1)
End Function
function yourFunction()
setMainSheets
For Each plan In Worksheets
If (Not hasMainSheet(plan.Name, mainSheets)) Then
your code here
end if
next
end function