为什么这不会循环下拉列表

时间:2016-02-17 11:46:58

标签: excel vba excel-vba pdf

我有这个代码,它应循环遍历下拉列表中的每个项目。当选择下一个项目时,它应该更新主工作表。然后创建工作表的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

4 个答案:

答案 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 ,如:

enter image description here

并运行此代码的缩短版本:

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

我明白了:

enter image description here

首先尝试我的短程序。

修改#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