-1

我在excel vba中的代码有点麻烦。

我想要做的是,如果工作表 1 上的范围内的任何单元格 <= 2000,则隐藏工作表 2 上的给定行。因此,该范围内的 1 个单元格对于另一个上的行只需要 <= 2000要隐藏的工作表。有点像烂苹果破坏了一堆东西。

任何帮助将不胜感激。提前致谢。

编辑:我的代码不起作用:Edit2:根据给出的评论更新代码,仍然没有运气。

Private Sub HideRows()

   Sheets("Summary").Cells.EntireRow.Hidden = False

   For Each cell In Sheets("Worksheet").Range("G9:P9")
     If Abs(cell.Value) < 2000 Then
         Sheets("Summary").Rows(11).EntireRow.Hidden = True
         Sheets("Summary").Rows(23).EntireRow.Hidden = True
         Sheets("Summary").Rows(43).EntireRow.Hidden = True
         Sheets("Summary").Rows(54).EntireRow.Hidden = True
         Sheets("Summary").Rows(78).EntireRow.Hidden = True
         Sheets("Summary").Rows(90).EntireRow.Hidden = True
     End If
   Next
End Sub

代码也有正确的结束符,例如 End Select、Next、End Sub

-马特

4

6 回答 6

2

我会这样做:

Private Sub HideRows()
     Worksheets("Summary").Cells.EntireRow.Hidden = False

     For Each cell In Sheets("Worksheet").Range("G9:P9")
        If Abs(cell) < 2000 Then
            Worksheets("Summary").Range("A11,A22,A43,A54,A78,A90").EntireRow.Hidden = True
        End If
    Next
End Sub

最好使用Range对象并引用不连续的单元格,因为它使其成为单行。

于 2013-07-05T15:20:24.857 回答
2

您可能想尝试避免循环类似:

Sub NoLoopSample()
Dim lngLessThenSum As Long, lngGreaterThenSum As Long
Dim rngTestRange As Range

Set rngTestRange = Sheets("Worksheet").Range("G9:P9")

lngBetween2k4k = WorksheetFunction.SumIfs(rngTestRange, rngTestRange, ">=" & 2000, rngTestRange, "<" & 4000)
lngLessThenSum = WorksheetFunction.SumIf(rngTestRange, "<" & 2000)

If lngBetween2k4k > 0 Then
        MsgBox "Atleast 1 Number Is Between 2000 And 4000"
End If

If lngLessThenSum > 0 Then
    MsgBox "Atleast 1 Number Is Less then 2000"
    Sheets("Summary").Range("11:11, 23:23, 43:43, 54:54, 78:78, 90:90").EntireRow.Hidden = True
End If
End Sub

应该做你想做的,并且不必测试你范围内的每一个单元格。可能还有其他功能或方法可以做到这一点,但这是我的首要任务。尽管在如此小的范围内,您甚至都不应该注意到差异。

我还想尽可能少地从 VBA 对工作表进行更改,因此在我的示例中,我隐藏了您在一次调用中提到的所有行,而不是对每一行的调用。

于 2013-07-05T13:30:38.013 回答
0
Sub try()
i = 1
While Sheet1.Cells(i, 1).Value <> ""
If Sheet1.Cells(i, 1).Value > 2000 Then
    Sheet2.Rows(i).EntireRow.Hidden = True
End If
i = i + 1
Wend
End Sub
于 2013-07-06T20:13:49.730 回答
0

也许是关于 EntireRow 财产..

参考.. http://msdn.microsoft.com/en-us/library/office/ff836836.aspx

由于您的代码.. Rows("11").EntireRow.Hidden = True.. 您必须确保 Row("11") 是 Range var ..

并隐藏你可以做的行Rows(11).Hidden = True

于 2013-07-05T13:06:50.750 回答
0

开门见山:

Range("a11,a22,a43,a54,a78,a90").EntireRow.Hidden = [sum((g9:p9>0)*(g9:p9<2001))]
于 2015-05-01T06:28:28.160 回答
0

您只关心最小值。我宁愿使用 Excel 的 Min 函数来完成这项工作:

Sub HideRows()

Set InRng = Worksheets("Worksheet").Range("G9:P9") 'Input Range
Set OutRng = Worksheets("Summary").Range("A11,A22,A43,A54,A78,A90") 'Rows to be hidden

MinVal = Application.WorksheetFunction.Min(InRng) 'Invoking inbuilt function to get minimum value

If MinVal < 2000 Then
    OutRng.EntireRow.Hidden = True
End If

End Sub
于 2015-07-10T05:01:12.803 回答