Excel VBA创建嵌入式宏和外部宏

3

我有一个宏文件,用于编辑和格式化每周一百个Excel文件,然后将其发送出去。我希望向发送出去的文件添加一些更复杂的功能。

每个发送出去的文件都需要有类似于以下代码:

Option Explicit

Sub DropDown4_Change()
    With ThisWorkbook.Sheets("ExampleData").Shapes("Drop Down 4").ControlFormat
        Select Case .List(.Value)
            Case "Value1": SelectValue1
            Case "Value2": SelectValue2
            Case "Value3": SelectValue3
            Case "Value4": SelectValue4
            Case "Value5": SelectValue5
            Case "Value6": SelectValue6
            Case "Value7": SelectValue7
            Case "Value8": SelectValue8
        End Select
    End With
End Sub

Sub SelectValue1()
    ActiveSheet.ListObjects("Table4").Range.AutoFilter
    ActiveSheet.ListObjects("Table4").Range.AutoFilter Field:=2, Criteria1:="<>"
End Sub

Sub SelectValue2()
    ActiveSheet.ListObjects("Table4").Range.AutoFilter
    ActiveSheet.ListObjects("Table4").Range.AutoFilter Field:=3, Criteria1:="<>"
End Sub

Sub SelectValue3()
    ActiveSheet.ListObjects("Table4").Range.AutoFilter
    ActiveSheet.ListObjects("Table4").Range.AutoFilter Field:=4, Criteria1:="<>"
End Sub

Sub SelectValue4()
    ActiveSheet.ListObjects("Table4").Range.AutoFilter
    ActiveSheet.ListObjects("Table4").Range.AutoFilter Field:=5, Criteria1:="<>"
End Sub

Sub SelectValue5()
    ActiveSheet.ListObjects("Table4").Range.AutoFilter
    ActiveSheet.ListObjects("Table4").Range.AutoFilter Field:=6, Criteria1:="<>"
End Sub

Sub SelectValue6()
    ActiveSheet.ListObjects("Table4").Range.AutoFilter
    ActiveSheet.ListObjects("Table4").Range.AutoFilter Field:=7, Criteria1:="<>"
End Sub

Sub SelectValue7()
    ActiveSheet.ListObjects("Table4").Range.AutoFilter
    ActiveSheet.ListObjects("Table4").Range.AutoFilter Field:=8, Criteria1:="<>"
End Sub

Sub SelectValue8()
    ActiveSheet.ListObjects("Table4").Range.AutoFilter
    ActiveSheet.ListObjects("Table4").Range.AutoFilter Field:=9, Criteria1:="<>"
End Sub

这是基于下拉框选择的基本过滤。在我的外部宏中,我需要什么代码才能使其在运行的每个Excel文件中编写此代码?这可能吗?

Excel文件是如何创建的?您可以使用模板吗?将代码添加到模板中,然后使用该模板创建文件。 - MatthewD
请查看此答案。http://stackoverflow.com/questions/20975138/excel-add-in-to-call-subroutine-from-activeworkbook - MatthewD
Excel文件是修改过的CSV文件。我收到一个CSV文件,然后在上面运行我的外部宏来生成所有报告,最后将其发送给接收者。如果我理解得正确,那么这是导入先前导出的模块的一种方法?在我的示例代码中,值的名称和数量将根据每个文件而异,但我相信我应该能够在先前编写的模块中涵盖它们。 - Adam Smith
@AdamSmith,你是想在不必逐个打开文件的情况下运行这个宏吗?还是你想将宏放入每个文件中并运行宏? - BruceWayne
我想将上述内容(或以下修改版本)放入每个文件中。它不必在创建时运行。这些启用宏的文件随后发送给其他人。我有一个宏,我运行它来修改我收到的文件以便发送,并希望在该宏代码中包含将创建所列宏的文件被修改。 - Adam Smith
2个回答

3

仅供参考,除非我漏掉了什么,您可以通过进行微小的调整极大地减小代码的大小:

Option Explicit

Sub DropDown4_Change()
    Dim fieldVal As Long

    With ThisWorkbook.Sheets("ExampleData").Shapes("Drop Down 4").ControlFormat
        Select Case .List(.Value)
            Case "Value1": fieldVal = 2
            Case "Value2": fieldVal = 3
            Case "Value3": fieldVal = 4
            Case "Value4": fieldVal = 5
            Case "Value5": fieldVal = 6
            Case "Value6": fieldVal = 7
            Case "Value7": fieldVal = 8
            Case "Value8": fieldVal = 9
        End Select
    End With
    Call SelectValue(fieldVal)
End Sub

Sub SelectValue(myVal As Long)
    ActiveSheet.ListObjects("Table4").Range.AutoFilter
    ActiveSheet.ListObjects("Table4").Range.AutoFilter Field:=myVal, Criteria1:="<>"
End Sub

谢谢提供的信息。我一定会使用这个精简版。 - Adam Smith

1
一份进一步的 精简 版本。
Sub DropDown4_Change()
    Dim myVal As Long

    With ThisWorkbook.Sheets("ExampleData")
        With .Shapes("Drop Down 4").ControlFormat
            myVal = CLng(Replace(.list(.Value), "Value", "")) + 1
        End With
        .ListObjects("Table4").Range.AutoFilter
        .ListObjects("Table4").Range.AutoFilter Field:=myVal, Criteria1:="<>"
    End With
End Sub

一个 超级削减版 的版本。
Sub DropDown4_Change()
    With ThisWorkbook.Sheets("ExampleData")
        .ListObjects("Table4").Range.AutoFilter
        .ListObjects("Table4").Range.AutoFilter Field:=CLng(Replace(.Shapes("Drop Down 4").ControlFormat.list(.Shapes("Drop Down 4").ControlFormat.Value), "Value", "")) + 1, Criteria1:="<>"
    End With
End Sub

这些很棒,但看起来它们需要所有值都是连续的Value#?在最终版本中,组合框中的所有值都将是客户费用,并且它们在文件之间不会相同。 - Adam Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接