0

如果满足特定条件,我正在拼命地寻求我的 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
4

2 回答 2

2

这是另一种方式。我敢肯定有一种方法可以不使用这么多 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
于 2013-05-21T16:08:11.270 回答
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

于 2013-05-21T11:33:38.740 回答