Excel VBA使用外部macros创buildembeddedmacros

我有一个macros文件,我用来编辑和格式化一百个Excel文件,然后发送出去。 我正在寻找添加一些更多的涉及到的function发送的文件。

每个发出的文件都需要有类似的代码:

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 

这是基于comboboxselect的基本过滤。 在我的外部macros中需要什么代码才能在运行的每个Excel文件中写入这些代码? 这可能吗?

只要注意,除非我错过了一些东西,你可以通过一个小小的调整来大大减less代码的大小:

 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 

进一步修剪版本

 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 

一个super-trimmed版本

 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