更改隐藏列和行的列宽和行高(保持隐藏):Excel VBA

时间:2017-05-01 03:49:46

标签: excel-vba vba excel

我有一个宏可以更改excel工作簿中所有工作表的列宽和行高,但是,此宏不会在隐藏的行和列中进行更改。

请建议我应该如何修改我的代码,以便它应该更改隐藏行和列的列宽和行高并保持隐藏?

Sub rowcolactivesheetb()

    Dim exworkb As Workbook
    Dim xlwksht As Worksheet
    Dim lastrow1 As Long
    Dim lastcolumn1 As Long
    Dim firstrowDB As Long

    With ActiveSheet

        lastrow1 = .Cells(Rows.Count, "A").End(xlUp).Row
        lastcolumn1 = .Cells(1, Columns.Count).End(xlToLeft).Column

        .Range(.Cells(1, 1), .Cells(lastrow1, lastcolumn1)).Select

        With Selection.SpecialCells(xlCellTypeVisible)
            .ColumnWidth = 10.2
            .RowHeight = 9.4
        End With

    End With

End Sub

修改

我已经在下面实施了Wolfie的方法,但现在正在

  

运行时错误91,对象变量或未设置块变量。

在这一行:

' Z is a number, my loop variable for looping over each sheet
rng = ActiveWorkbook.Sheets(Z).Range(Sheets(Z).Cells(1, 3), Sheets(Z).Cells(lastrow1, lastcolumn1))

1 个答案:

答案 0 :(得分:1)

以下代码非常简单,并进一步详细说明。步骤进行:

  • 循环使用范围内的行和列,记下哪些是隐藏的。
  • 取消隐藏所有内容并调整大小
  • 循环回行和列,隐藏
  • 之前隐藏的行

代码

Sub rowcolactivesheetb()
' Resizes all rows and columns, including those which are hidden.
' At the end, hidden rows and columns remain hidden.
    Dim n As Long
    Dim hiddencols() As Long
    Dim hiddenrows() As Long
    Dim rng As Range
    Application.ScreenUpdating = False
    With ThisWorkbook.ActiveSheet
        ' Set up range variable and true/false hidden arrays        
        ' We don't need to find last row/col, just used UsedRange
        Set rng = .UsedRange
        ReDim hiddencols(rng.Columns.Count)
        ReDim hiddenrows(rng.Rows.Count)
        ' Get hidden/visible status of each row and column
        For n = 0 To UBound(hiddencols)
            hiddencols(n) = rng.Columns(n + 1).Hidden
        Next n
        For n = 0 To UBound(hiddenrows)
            hiddenrows(n) = rng.Rows(n + 1).Hidden
        Next n
        ' Unhide all
        rng.EntireColumn.Hidden = False
        rng.EntireRow.Hidden = False
        ' resize all
        rng.ColumnWidth = 10.2
        rng.RowHeight = 9.4
        ' Re-hide rows/cols
        For n = 0 To UBound(hiddencols)
            rng.Columns(n + 1).Hidden = hiddencols(n)
        Next n
        For n = 0 To UBound(hiddenrows)
            rng.Rows(n + 1).Hidden = hiddenrows(n)
        Next n
    End With
    Application.ScreenUpdating = True
End Sub

最后一条关于With的说明,除非第一个中的对象,否则不应该开始第二个With块。但是你真的可以用这个事实抛弃(不受欢迎的)Select ......

With ActiveSheet
    lastrow1 = .Cells(Rows.Count, "A").End(xlUp).Row
    lastcolumn1 = .Cells(1, Columns.Count).End(xlToLeft).Column
    With .Range(.Cells(1, 1), .Cells(lastrow1, lastcolumn1)).SpecialCells(xlCellTypeVisible)
        .ColumnWidth = 10.2
        .RowHeight = 9.4
    End With
End With

编辑:

关于您的跟进错误,您必须在为变量分配Set对象时使用Range命令。所以你的代码应该是

Set rng = ActiveWorkbook.Range("...

您不必将Set用于基本变量类型(字符串,整数等)