每当我在excel上打开或编辑任何内容时,如何启用此宏?

时间:2019-05-22 07:42:29

标签: excel vba

对不起,我是excel-vba的新手,需要一些指导。我想在打开Excel文件时自动调整合并单元格的高度。

我找到了自动调整合并单元格高度的代码,这已经尝试了并且可以工作。我还发现了在打开Excel文件时每次都能使宏运行的代码。但是,我很难将两者都集成在一起。

用于自动调整单元格高度的代码

Option Explicit

Public Sub AutoFitAll()
    Call AutoFitMergedCells(Range("I13:L13"))
End Sub


Public Sub AutoFitMergedCells(oRange As Range)
  Dim tHeight As Integer
  Dim iPtr As Integer
  Dim oldWidth As Single
  Dim oldZZWidth As Single
  Dim newWidth As Single
  Dim newHeight As Single
  With Sheets("Acceptance")
    oldWidth = 0
    For iPtr = 1 To oRange.Columns.Count
      oldWidth = oldWidth + .Cells(1, oRange.Column + iPtr - 1).ColumnWidth
    Next iPtr
    oldWidth = .Cells(1, oRange.Column).ColumnWidth + .Cells(1, oRange.Column + 1).ColumnWidth
    oRange.MergeCells = False
    newWidth = Len(.Cells(oRange.Row, oRange.Column).Value)
    oldZZWidth = .Range("ZZ1").ColumnWidth
    .Range("ZZ1") = Left(.Cells(oRange.Row, oRange.Column).Value, newWidth)
    .Range("ZZ1").WrapText = True
    .Columns("ZZ").ColumnWidth = oldWidth
    .Rows("1").EntireRow.AutoFit
    newHeight = .Rows("1").RowHeight / oRange.Rows.Count
    .Rows(CStr(oRange.Row) & ":" & CStr(oRange.Row + oRange.Rows.Count - 1)).RowHeight = newHeight
    oRange.MergeCells = True
    oRange.WrapText = True
    .Range("ZZ1").ClearContents
    .Range("ZZ1").ColumnWidth = oldZZWidth
  End With
End Sub

使宏在打开excel时运行的代码

Private Sub Worksheet_Activate()
    'your code here
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    'your code here
End Sub

所以我希望实现的是,当我打开excel文件时,将自动调整合并的单元格,这些单元格具有无法在单元格的默认高度内显示的过多内容,因此可以调整所有内容见过。

1 个答案:

答案 0 :(得分:1)

打开工作簿时,

Worksheet_Activate() Worksheet_Change 不会运行。它们在工作表被激活或更改时运行。

您需要 ThisWorkbook 类中的 Private Sub Workbook_Open()

要在打开工作簿时运行宏,您可以将调用添加到其中的Sub

Private Sub Workbook_Open()
    AutoFitAll
End Sub