Excel中的VBA - 如何在每个表之前自动添加空白列

问题描述 投票:0回答:1

我有一个需要使用宏自动化的任务,我已经编写了代码来完成它;但是,我的代码无法成功完成任务。因此,我现在需要你的帮助。

请下载我的示例文件,包括3张:“start_1”,“start_2”和“result”。 “start_1”和“start_2”完全相同。我需要将这两张表中的表格格式化为“start”,这样它们看起来就像是“结果”表。

http://www.mediafire.com/download/n8dwli8v55lw9gl/add_a_blank_column_before_each_table.xls

详细地说,这里是需要自动化的任务:

  • 在顶部添加1个空行(我已经完成了)
  • 冻结标题行(我已经完成了)
  • 这是我不能做的:在每个表之前添加1个空白列。添加的列必须没有填充颜色且根本没有边框。 (此处的每个表都由顶部标题行中的合并单元格标识)
  • 另请告诉我如何确定带数据的最后一列和带数据的最后一行,以便隐藏空白外层空间。

非常感谢您的帮助。

下面是我的代码(在ThisWorkbook模块中):

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim bScrUpdate As Boolean
Dim ws As Worksheet
Dim rng As Range

Application.EnableCancelKey = xlDisabled 'disable ESC key
bScrUpdate = Application.ScreenUpdating
If bScrUpdate = True Then Application.ScreenUpdating = False
Application.DisplayAlerts = False

For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "result" Then
ws.Select
Rows("1:1").Insert Shift:=xlDown

Range("A4").Select
ActiveWindow.FreezePanes = True

For Each rng In Rows("2:2").Cells
If rng.MergeCells Then
rng.MergeArea.Cells(1, 1).Select
Selection.Offset(-1, 1).EntireColumn.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
End If
Next rng
End If
Next ws

Application.DisplayAlerts = True
If Not Application.ScreenUpdating = bScrUpdate _
Then Application.ScreenUpdating = bScrUpdate
Application.EnableCancelKey = xlInterrupt 'enable ESC key
End Sub
excel vba
1个回答
0
投票

要添加列并清除其所有格式,您可以执行以下操作:

Sub InsertCol()
    Columns(1).Insert
    Columns(1).ClearFormats ' might be unnecessary
End Sub

如果你想确定最后一行/列,请查看this question.

© www.soinside.com 2019 - 2024. All rights reserved.