双条件VBA

时间:2018-10-21 21:43:16

标签: excel vba

我正在学习使用VBA,并且必须对我目前正在从事的语言项目具有相当的创新性。希望您能提供帮助!

我正在建立一个提供4种不同语言的词汇表,人们必须能够从这4种语言中选择任意几种。

因此,我建立了一个“起始页”,可以在其中选择源语言和目标语言。

我的目标: -单击源语言=>单击目标语言 -宏将用户发送到所选源语言的“内容”列表(例如,Content_FR工作表) -同时,“术语表”中的列表应将“目标语言”过滤为所选语言(例如英语)。 -当用户单击“内容表”中的特殊字段时,会将其发送到“过滤条件列表”。

一切就绪,我只是停留在2种开始条件上:在宏将我发送到“内容”或“术语表”工作表之前,我只能单击一个字段。 您是否有办法将这两个VBA融合在一起?当然,即使我必须为每种可能的语言对都制作一个宏。

我希望这已经足够清楚了……我已经在这个文件中游泳了很久(淹没了?),我不确定如何解释它。

我非常希望你们中的一个有一个聪明的主意可以帮助我;)

(不知道如何附加文件,因此我只是在这里将其上传:[URL = http://www.k-upload.fr/afficher-fichier-2018-10-21-1b9b7bf03fichetermino.xlsm.html][IMG]http://file.k-upload.com/k-upload_fr.png[/IMG][/URL])。

3 个答案:

答案 0 :(得分:0)

我已经尝试并花了一些时间来查看您的问题是否有解决方案。

答案是否定的,您不能同时操作两个按钮(两个不同的代码同时/并行工作)。


因此,您不能按一个按钮再单击另一个按钮。 Excel需要执行一个代码并完成它。然后就可以开始下一个了。

假设我从工作表“起始页”开始。我按“英语”,该代码可以将我发送到“ Sommaire_EN”工作表。但是到此为止。原因是Excel(VBA应用程序)不知道您想先做什么。在我进入“ Sommaire_EN”工作表时,代码不知道我要按的内容,因为您还没有决定任何事情(经济还是促销)。

所以我在想,也许我可以暂停由“英语”按钮触发的代码,然后单击另一个按钮“经济”,然后恢复我的第一个代码...不能。第一个代码需要“完成”,然后您可以执行下一个代码。

一种解决方案可能是单击“英语”,然后弹出一个窗体/列表,您可以在其中选择类别词(“促销”)。这是更复杂的方法,我认为它不容易维护但可行...

作为奖励,我清理了您的工作簿,并提供了一些评论:

  • 将“ Sheets("Synthèse").Select”中的选择语句替换为 Worksheets("Synthèse").Activate,因为应避免选择,但 宏记录器会自动使用它。
  • 我为每个Sommaire_Language工作表创建了一个模块,因此英语只有一个模块,西班牙语有一个模块,等等。更容易找到代码。
  • 我将所有按钮都链接到了所有语言的相应单词。
  • 不要更改工作表名称...代码将停止工作(Content_EN-> Sommaire_EN)
  • 我为“起始页”按钮添加了过滤器。当您单击一种语言按钮时,Synthèse工作表将仅根据该语言进行过滤,并将您发送到该语言的Sommaire_表。

您的工作表“Synthèse”中存在一些错误...

总体而言,布局和工作确实很好,易于遵循。我只能猜测您必须花费多少时间。我喜欢人们互相教teach的时候!

答案 1 :(得分:0)

回答您的问题:)

1。 -我认为这是专注于目标语言的好方法。但是,我认为没有必要再次选择(,用户可以在其中选择目标语言,这将自动在“合成”文件中过滤目标语言。)。 我认为您可以在“起始页”上选择目标语言时进行过滤。还将节省您很多维护工作(否则,您需要链接另外16个按钮)...

从“起始页”进行过滤,这是我尝试在编辑的工作簿中实现的。当用户选择一种语言时,将从“起始页”中过滤出目标语言和源语言。在Dropbox链接中(在前面的评论部分中),您将找到更改后的工作簿,然后可以下载它:),如果您无法下载它,我还将在所有答案中发布所有代码,以便您可以将其复制并添加(但是您需要将每个子代码链接到正确的按钮。

2。 -是的首先选择合成表,然后进行筛选,最后将人引导到内容表。它应该运行得如此之快,以至于大多数人不会注意到发生了过滤部分。

Worksheets("Synthèse").Activate 'Select the synthese sheet to filter.
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
    "English" 'Filter synthese sheet
Worksheets("Sommaire_EN").Activate 'Go to content sheet

3。 -不(这只是我身边的通知)。如果您不想,我认为不需要。如果有很多代码,并且计划通过复杂的交互来编写更多代码,则绝对不应有任何select语句(it will reduce potential errors when you have pages of code)。但是有了这个简单的代码,我就不会了。现在的回报很小,值得花时间:)。 select的好处是易于理解和跟踪正在发生的事情。乍一看,另一个需要更多的努力,至少我是这样认为的。


我认为我们在同一条道路上。

对于“开始”页面上的每个按钮,

enter image description here

我将此代码添加到了工作簿中的每个按钮(对于每个内容表,我都更改为“正确的语言”。)

Sub SommaireEN()
'
' SommaireEN Macro
'

'
    Worksheets("Synthèse").Activate 'Activate the Synthese sheet
        ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "English" 'Since you click the button English, it will filter language english
    Worksheets("Sommaire_EN").Activate 'Go to sheet Sommaire_EN.

End Sub

Alt + F11进入此视图。每个代码都链接到其相应的按钮。

enter image description here

因此,当用户单击“开始页面”(例如Deutschen)上的按钮时,“合成”工作表将筛选为所选的语言,并且您将被定向到Sommaire_DE的内容表。 注意,它将不会在合成表中选择任何专业字段,只会选择语言。 enter image description here

用户将最终进入Deutsch表,并且当他单击特殊字段时,例如Wirtschaft ...

enter image description here

...然后,合成工作表也将被更新,用户将在这里结束:)

enter image description here

随时问任何问题:)

答案 2 :(得分:0)

Sommaire_DE的代码:

Sub Naturschutz()
'
' Naturschutz Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Deutsch"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Naturschutz"
         Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Naturschutz"
    Range("C3").Select
End Sub
Sub ClearFilterDE()
'
' ClearFilter Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2
    Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = ""
End Sub
Sub Umweltbewusstsein()
'
' Umweltbewusstsein Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Deutsch"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Umweltbewusstsein"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Umweltbewusstsein"
    Range("C3").Select
End Sub
Sub Energieeffizienz()
'
' Energieeffizienz Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Deutsch"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Energieeffizienz"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Energieeffizienz"
    Range("C3").Select
End Sub
Sub Langlebigkeit()
'
' Langlebigkeit Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Deutsch"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Langlebigkeit"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Langlebigkeit"
    Range("C3").Select
End Sub

Sub Gesetzliches()
'
' Gesetzliches Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Deutsch"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Gesetzliches"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Gesetzliches"
    Range("C3").Select
End Sub

Sub Moderne_Technologien()
'
' Moderne Technologien Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Deutsch"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Moderne Technologien"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Moderne Technologien"
    Range("C3").Select
End Sub
Sub Wirtschaft()
'
' Wirtschaft Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Deutsch"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Wirtschaft"
         Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Wirtschaft"
    Range("C3").Select
End Sub
Sub Filmproduktion()
'
' Filmproduktion Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Deutsch"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Filmproduktion"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Filmproduktion"
    Range("C3").Select
End Sub
Sub Promotionskampagne()
'
' Promotionskampagne Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Deutsch"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Promotionskampagne"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Promotionskampagne"
    Range("C3").Select
End Sub
Sub Interne_Struktur()
'
' Interne Struktur Macro
'

'
    Worksheets("Synthèse").Activate
    Range("A5").Select
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Deutsch"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Interne Struktur"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Interne Struktur"
    Range("C3").Select
End Sub
Sub ChangerTitreDE()
'
' ChangerTitre Macro
'

'
    Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Economy"
    Range("C3").Select
End Sub

Sommaire_EN的代码:

Sub Preservation()
'
' Preservation Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "English"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Preservation"
         Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Preservation"
    Range("C3").Select
End Sub
Sub ClearFilter()
'
' ClearFilter Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2
    Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = ""
End Sub
Sub Environmental_education()
'
' Environmental education Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "English"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Environmental education"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Environmental education"
    Range("C3").Select
End Sub
Sub Energy_efficiency()
'
' Energy efficiency Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "English"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Energy efficiency"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Energy efficiency"
    Range("C3").Select
End Sub
Sub Sustainability()
'
' Sustainability Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "English"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Sustainability"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Sustainability"
    Range("C3").Select
End Sub

Sub Legislation()
'
' Legislation Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "English"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Legislation"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Legislation"
    Range("C3").Select
End Sub

Sub New_technology()
'
' New technology Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "English"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "New technology"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "New technology"
    Range("C3").Select
End Sub
Sub Economy()
'
' Economy Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "English"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Economy"
         Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Economy"
    Range("C3").Select
End Sub
Sub Production()
'
' Production Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "English"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Production"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Production"
    Range("C3").Select
End Sub
Sub Promotion()
'
' Promotion Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "English"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Promotion"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Promotion"
    Range("C3").Select
End Sub
Sub Organizational_structure()
'
' Organizational structure Macro
'

'
    Worksheets("Synthèse").Activate
    Range("A5").Select
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "English"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Organizational structure"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Organizational structure"
    Range("C3").Select
End Sub
Sub ChangerTitreEN()
'
' ChangerTitre Macro
'

'
    Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Economy"
    Range("C3").Select
End Sub

Sommaire_SP的代码:

Sub Preservación()
'
' Preservación Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Español"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Preservación"
         Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Preservación"
    Range("C3").Select
End Sub
Sub ClearFilterSP()
'
' ClearFilter Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2
    Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = ""
End Sub
Sub Educación_ambiental()
'
' Educación ambiental Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Español"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Educación ambiental"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Educación ambiental"
    Range("C3").Select
End Sub
Sub Eficiencia_energética()
'
' Eficiencia energética Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Español"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Eficiencia energética"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Eficiencia energética"
    Range("C3").Select
End Sub
Sub Sostenibilidad()
'
' Sostenibilidad Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Español"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Sostenibilidad"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Sostenibilidad"
    Range("C3").Select
End Sub

Sub Legislación()
'
' Legislación Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Español"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Legislación"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Legislación"
    Range("C3").Select
End Sub

Sub Nuevas_tecnologías()
'
' Nuevas tecnologías Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Español"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Nuevas tecnologías"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Nuevas tecnologías"
    Range("C3").Select
End Sub
Sub Economía()
'
' Economía Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Español"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Economía"
         Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Economía"
    Range("C3").Select
End Sub
Sub Producción()
'
' Producción Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Español"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Producción"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Producción"
    Range("C3").Select
End Sub
Sub Fomento()
'
' Fomento Macro
'

'
    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Español"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Fomento"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Fomento"
    Range("C3").Select
End Sub
Sub Modo_de_funcionamiento()
'
' Modo de funcionamiento Macro
'

'
    Worksheets("Synthèse").Activate
    Range("A5").Select
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Español"
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=2, Criteria1:= _
        "Modo de funcionamiento"
        Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Modo de funcionamiento"
    Range("C3").Select
End Sub
Sub ChangerTitreSP()
'
' ChangerTitre Macro
'

'
    Range("C1").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "Economy"
    Range("C3").Select
End Sub

起始页代码

Sub SommaireEN()
'
' SommaireEN Macro
'

'
    Worksheets("Synthèse").Activate
        ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "English"
    Worksheets("Sommaire_EN").Activate

End Sub
Sub SommaireSP()
'
' SommaireSP Macro
'

'
    Worksheets("Synthèse").Activate
        ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Español"
    Worksheets("Sommaire_SP").Activate

End Sub
Sub SommaireDE()
'
' SommaireDE Macro
'

'

    Worksheets("Synthèse").Activate
        ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Deutsch"
    Worksheets("Sommaire_DE").Activate

End Sub

Sub GlossaireFR()
'
' GlossaireFR Macro

    Worksheets("Synthèse").Activate
    ActiveSheet.Range("$A$4:$C$11652").AutoFilter Field:=1, Criteria1:= _
        "Français"
    Worksheets("Sommaire_FR").Activate

End Sub