簡體   English   中英

使用宏隱藏Excel中的單元格

[英]Hiding Cells in Excel with a macro

如果滿足某個條件,我正在拼命地尋找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

您可以使用公式標記要隱藏的行,然后使用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

這是另一種方式。 我敢肯定有一種方法可以不使用這么多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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM