我怎样才能让每一个excel工作簿打开有column.autofit财产?

我想编写一个macros或调整Excel属性,以便每当我打开一个新的Excel工作簿时,所有的值都自动填充到列。

我试着使用下面的代码,如果我保存特定工作簿的代码,但是如果我将代码保存在PERSONAL工作簿中,该代码会产生错误。 “对象”_Global“的方法”列“失败”

Sub auto_open() Columns().AutoFit End Sub 

我这样做的方法是创build一个简单的加载项来处理我想拦截的应用程序事件。 它在auto_open()中不起作用的原因是因为你正试图在实例化之前处理Columns对象。 更好地使用SheetActivate事件。 这也避免了打开一个20页的工作簿的可能性,并不得不等待所有的人自动调整。 你只看到活动表,对吧?

这个概念是为应用程序获取一个WithEvents引用,并为你关心的任何事件设置处理程序。 要做到这一点,你必须把代码放到一个类中。 我叫我的“AppHolder”。

class级代码:

 Option Explicit Private WithEvents app As Application Private Sub Class_Initialize() Set app = Application End Sub Private Sub app_SheetActivate(ByVal Sh As Object) Sh.Columns().AutoFit End Sub Private Sub app_WorkbookActivate(ByVal Wb As Workbook) Wb.ActiveSheet.Columns().AutoFit End Sub Private Sub app_WorkbookNewSheet(ByVal Wb As Workbook, ByVal Sh As Object) Sh.Columns().AutoFit End Sub 

然后,在ThisWorkbook模块中创build一个类的实例,并将其设置为auto_open(或Workbook_Open,视情况而定):

 Option Explicit Private hook As AppHolder Private Sub Workbook_Open() Set hook = New AppHolder End Sub 

将其作为Excel加载项文件(.xlam)保存在默认位置 – 应位于Users [You] \ AppData \ Roaming \ Microsoft \ AddIns中。 closuresExcel并重新打开它,然后转到开发人员插件并启用它。 所有这一切都是为了它。

编辑:几乎忘了 – 这不包括所有的情况下,你会被提交一个工作表。 你也需要WorkbookActivate和WorkbookNewSheet …

你可以使用这样的东西:( 未经testing

 Sub auto_open() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Application.EnableEvents = False Application.DisplayAlerts = False Dim wb As Workbook Dim ws As Worksheet For Each wb In Workbooks For Each ws In wb.Worksheets ws.Columns.AutoFit Next ws Next wb Application.DisplayAlerts = True Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True Application.ScreenUpdating = True End Sub 

确定你正在使用的对象(在本例中是工作簿工作表 )是非常重要的,因为它可以帮助你知道你可以应用哪些对象( 参见 )

这可能工作:

 Sub auto_open() For i = 1 To Application.Workbooks.Count For j = 1 To Application.Workbooks(i).Sheets.Count For k = 1 To Application.Workbooks(i).Sheets(j).Cells(1, Columns.Count).End(xlToLeft).Column Application.Workbooks(i).Sheets(j).Columns(k).EntireColumn.AutoFit Next k Next j Application.Workbooks(i).Save Next i End Sub