2011-09-23 127 views
4

我完全是MS Excel和VBA宏的新手。我想知道如何格式化单元格或使用宏VB对电子表格进行全面控制。我在这里有一个非常简单的代码来说明我想知道的内容。如何使用Excel宏模块格式化Excel电子表格单元格?

macro_format_test.xlsm

Private Sub Worksheet_Activate() 
    Me.Unprotect 
    Me.Cells.ClearContents 

    Dim ws As Worksheet 
    Set ws = Worksheets("Sheet1") 

    ws.Cells(1, 1) = "ID" 
    ws.Cells(1, 2) = "Name" 
    ws.Cells(1, 3) = "Address" 

    Me.Protect 
End Sub 

在代码...

ws.Cells(1, 1) = "ID" 
ws.Cells(1, 2) = "Name" 
ws.Cells(1, 3) = "Address" 

我想那些出现大胆,italized,并居中。我也想用代码设置他的列宽。我该怎么做?请帮忙。你也可以给我一些关于这个的参考,因为每次我尝试谷歌,我可以看到如何添加UserForm,我现在不需要。提前致谢。

回答

11
With Range("A1:C1") 
    .HorizontalAlignment = xlCenter 
    .Font.Italic = True 
    .Font.Bold = True 
    .EntireColumn.ColumnWidth = 15 
End With 

顺便说一句,找出宏会是什么这样的事情的最简单方法是单击录制宏按钮,手动进行更改,然后检查为生成的代码您。它并不总是最高效的代码,你通常必须稍微调整它,但它应该给你一个基本的想法。

+0

感谢您的回答。这提供了一个想法。 –

+0

+1对于一个整洁的响应解决提问者的问题 – brettdj

3

我想你要启动此功能在纸张上运行这个,所以你当前工作表不受保护的看起来不一致,那么你定义工作表Sheet1的片上

的工作,但像你一样用片变ws,那么你可以像下面那样应用Paul的格式化部分来与你的代码保持一致(即在ws中存储的工作表上)。同时将单个数组写入一个范围比单元写入更有效。在您的3单元格示例中不可见,但在写入1000的值时会很明显

Private Sub Worksheet_Activate() 
    Me.Unprotect 
    Me.Cells.ClearContents 
    Dim ws As Worksheet 
    Set ws = Worksheets("Sheet1") 
    Dim MyArray() 
    MyArray = Array("ID", "Name", "Address") 
    With ws.Range(ws.[a1], ws.[c1]) 
     .Value = MyArray 
     .HorizontalAlignment = xlCenter 
     .Font.Italic = True 
     .Font.Bold = True 
     .EntireColumn.ColumnWidth = 15 
    End With 
    Me.Protect 
End Sub 
+0

+1提及使用数组 – PaulStock

+0

感谢这一个......它对我的项目有很大的帮助。 –