清理重复的VBA代码

我有一些可行的代码,但我认为可以写得更好。 我对这个不是很了解,但是有没有办法把这个清理干净呢? 如果单元格A12小于40,则会在单独的表单中隐藏更多数据行。

Option Explicit Sub Main() Dim wsa As Worksheet: Set wsa = ActiveWorkbook.Sheets("Sheet A") Dim wse As Worksheet: Set wse = ActiveWorkbook.Sheets("Sheet E") Dim wsf As Worksheet: Set wsf = ActiveWorkbook.Sheets("Sheet F") Dim wsg As Worksheet: Set wsg = ActiveWorkbook.Sheets("Sheet G") Dim wsk As Worksheet: Set wsk = ActiveWorkbook.Sheets("Sheet K") If wsa.Range("A12").Value < "40" Then Range("A_Data").EntireRow.Hidden = True Else Range("A_Data").EntireRow.Hidden = False End If If wse.Range("A12").Value < "40" Then Range("E_Data").EntireRow.Hidden = True Else Range("E_Data").EntireRow.Hidden = False End If If wsf.Range("A12").Value < "40" Then Range("F_Data").EntireRow.Hidden = True Else Range("F_Data").EntireRow.Hidden = False End If If wsg.Range("A12").Value < "40" Then Range("G_Data").EntireRow.Hidden = True Else Range("G_Data").EntireRow.Hidden = False End If If wsf.Range("A12").Value < "40" Then Range("K_Data").EntireRow.Hidden = True Else Range("K_Data").EntireRow.Hidden = False End If Exit Sub 

任何帮助将不胜感激,我很难搞清楚这一点。 谢谢你的时间。

我会做这一个:

 Sub Main() Dim x For Each x In Array("A", "E", "F", "G", "K") Range(x & "_Data").EntireRow.Hidden = _ (CDbl(ActiveWorkbook.Worksheets("Sheet " & x).Range("A12").Value) < 40) Next x End Sub 

我也用

 CDbl(ActiveWorkbook.Worksheets("Sheet " & x).Range("A12").Value) < 40 

因为string比较可能会给你意想不到的结果(比如说"2">"10"返回TRUE )。