使用宏隐藏Excel中的单元格

时间:2013-05-21 09:12:22

标签: excel-vba vba excel

如果满足某个条件,我正在拼命寻找excel宏的帮助来隐藏行。我试图输入之前在其他问题答案中提供的所有代码,只是无法让该死的东西运行。

我的代码运行得非常好,没有行隐藏部分

在生成模板之前,我需要以下内容进行计算

If range F30 to J30 is blank then rows 29 to 30 must be hidden
If range F33 to J33 is blank then rows 32 to 33 must be hidden
If range F30 to J33 is blank then rows 28 to 35 must be hidden

你能帮助我吗

Function RangeName(sName As String) As String
RangeName = Application.Substitute(sName, " ", "_")
End Function
Sub MergePrint()
Dim wsForm As Worksheet, wsData As Worksheet
Dim sRngName As String, r As Long, c As Integer
Set wsForm = Worksheets("Template")
Set wsData = Worksheets("DataSource")
With wsData.Cells(1, 1).CurrentRegion
For r = 2 To .Rows.Count
If Not wsData.Cells(r, 1).EntireRow.Hidden Then
For c = 1 To .Columns.Count
sRngName = wsData.Cells(1, c).Value
Range(RangeName(sRngName)).Value = wsData.Cells(r, c)
Next
wsForm.PrintOut
End If
Next
End With
End Sub

2 个答案:

答案 0 :(得分:1)

您可以使用公式标记要隐藏的行,然后使用 SpecialCells 返回需要隐藏的行,并将hidden属性设置为true或false。

在另一列(例如,第N列)中添加以下公式:

=IF(LEN(CONCATENATE(F:F,G:G,H:H,I:I,J:J))=0,NA(),"")

您也可以使用VBA以编程方式输入此公式:
Range("N28:N35").Formula = "=IF(LEN(CONCATENATE(F:F,G:G,H:H,I:I,J:J))=0,NA(),"""")"

这将检查单元格,如果它们全部为空,则返回#N/A错误。

现在,您可以使用VBA中的SpecialCells函数来选择要隐藏的行:

Cells.SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Hidden = True

答案 1 :(得分:1)

这是另一种方式。我确信有一种方法可以不使用这么多if语句......

Sub Test()
    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
    End With

    With Sheet1
        If Application.WorksheetFunction.CountA(.Range("F30:J30")) = 0 Then
            .Range("F29:J30").EntireRow.Hidden = True
        Else
            .Range("F29:J30").EntireRow.Hidden = False
        End If

        If Application.WorksheetFunction.CountA(.Range("F33:J33")) = 0 Then
            .Range("F32:J33").EntireRow.Hidden = True
        Else
            .Range("F32:J33").EntireRow.Hidden = False
        End If

        If Application.WorksheetFunction.CountA(.Range("F30:J33")) = 0 Then
            .Range("F28:J35").EntireRow.Hidden = True
        Else
            .Range("F28:J35").EntireRow.Hidden = False
        End If
    End With

    With Application
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
    End With
End Sub
相关问题