Excelmacros(VBA) – 根据条件隐藏另一个工作表中的某些命名范围

我必须首先说我在VBA中是一个可能的人。 我正在处理一个代码来隐藏命名范围在另一个工作表基于条件。 这是我想要做的。

我有一个名为“承诺成本”的工作表,它看起来像这样:

在这里input图像说明

底部会有更多的线条(我现在有7000多个)。 范围A3:E14被命名为cc_0101,范围A14:E26被命名为cc_0195。 还有更多的下面。

我有一个“设置”工作表,看起来像这样:

在这里input图像说明

C列是一个有两个选项的下拉菜单:“显示”和“隐藏”。 如果select“隐藏”,D列中的公式显示为1,如果select“显示”,则显示0。 现在我想让macros通过“设置”工作表上的帐户列表,如果D8 = 1,那么从“Committed Costs”工作表命名的整个cc_0101范围应该是隐藏的,如果D9 = 0,那么cc_0195不应该是隐藏等等。 所以基本上,macros现在必须从E列中获取每行的值。

我在Excel中有以下代码:

Dim showhide1 As Range Set showhide1 = ThisWorkbook.Worksheets("Settings").Range("d7:g716") Dim showhide2 As Variant showhide2 = showhide1.Value Dim i As Integer, j As Integer For i = LBound(showhide2, 1) To UBound(showhide2, 1) For j = LBound(showhide2, 2) To UBound(showhide2, 2) If showhide1(i, 1) = 1 Then Sheets("Committed Costs").Range("showhide2(i,2)").EntireRow.Hidden = True Else Sheets("Committed Costs").Range("showhide2(i,2)").EntireRow.Hidden = False End If Next j Next i 

该代码产生运行时错误1004。

在我开始阅读关于数组和所有代码的代码如下所示之前:

 Dim drng As Range, d as Range Dim erng As Range, e as Range Set drng = Range("D7:D716") Set erng = Range("E7:E716") For Each d In drng If d = 1 Then Sheets("Committed Costs").Range("e").EntireRow.Hidden = True Else Sheets("Committed Costs").Range("e").EntireRow.Hidden = False End If Next d 

然后我意识到我没有以任何方式定义“e”,所以macros不知道从E列中获取值(我猜测)。 我得到条件工作的唯一方法是:

 Dim d as Range Set d = Range("D8") If d = 1 Then Sheets("Committed Costs").Range("cc_0101").EntireRow.Hidden = True Else Sheets("Committed Costs").Range("cc_0101").EntireRow.Hidden = False End If 

但是这根本不起作用。 我必须硬编码范围的名字,在这个例子中是cc_0101,代码只比较一行(第8行),而不是遍历整个账户列表。

我感谢任何帮助

这是一个简单的修复,它是围绕如何引用您的数组项目。 而且,不需要遍历列索引,因为它们从不使用。 改变你的代码到下面。 为什么你传递的数组值为"showhide2(i,2)"它正在寻找名为“showhide2(i,2)”的表格,而不是存储在showhide2(i,2)

 Dim showhide1 As Range Set showhide1 = ThisWorkbook.Worksheets("Settings").Range("d7:g716") Dim showhide2 As Variant showhide2 = showhide1.Value Dim i As Integer, j As Integer For i = LBound(showhide2, 1) To UBound(showhide2, 1) If showhide2(i, 1) = 1 Then Sheets("Committed Costs").Range(showhide2(i,2)).EntireRow.Hidden = True Else Sheets("Committed Costs").Range(showhide2(i,2)).EntireRow.Hidden = False End If Next i