VBA 自动化编程的一些常用技巧。持续更新

389 阅读2分钟

1. 选中最下,最上,最左,最右的单元格

Range对象的end()方法可以传递以下几个常量,分别实现底端上下左右的选择。

常量	        値	内容	        对应键盘操作
xlUp	        -4162	上方向移動	[Ctrl] + [↑]
xlDown	        -4121	下方向移動	[Ctrl] + [↓]
xlToLeft	-4159	左方向移動	[Ctrl] + [←]
xlToRight	-4161	右方法移動	[Ctrl] + [→]

<例子1>

Sub Sample1()
    '从A1选择最下面的单元格
    Range("A1").End(xlDown).Select
End Sub

例子1 虽然可行,但有些情况却不太方便。比如以下两种情况。那就需要用到例子2中的写法。

  • A1到A列最后一行中有空格。
  • A列为空。

<例子2>
Sub Sample2()
    '----A列最終行向上找的第一行
    Cells(Rows.Count, 1).End(xlUp).Select
End Sub

这样写就比较安全了。

2. 打开文件操作

Application的下面这个方法可以很方便的打开各种文件。

  • GetOpenFilename( FileFilter, FilterIndex, Title, ButtonText, MultiSelect)

  • 参数FileFilter指定任意的字符串描述想要打开的类型,比如“excel文件”。然后指定类型。可以用通配符。

  • 关于用户取消操作
  • 实际操作中会弹出一个对话框让你选文件,如果什么文件都不选就关闭对话框,这时的返回值为False。

    <例子3>

    Dim OpenFileName As String
    OpenFileName = Application.GetOpenFilename("excel文件,*.xls?;*.xlsx")
    '用户取消了操作
    If (OpenFileName = "False") Then
        End
    End If
    
    Workbooks.Open OpenFileName
    

    3. 取消画面渲染

    如果做的处理比较耗时,可以取消画面渲染加快处理速度。

    Application.ScreenUpdating = False
    // 做一些比较耗时的处理
    Application.ScreenUpdating = True
    

    4. 单元格相对位置

    Range.Offset(行方向, 列方向)来获取相对位置。正数代表往下,往右。所以下面的例子是B2左边一列,也就是A2。

    Range("B2").Offset(0, -1)
    

    5. 声明变量同时赋值

    普通声明一个变量就是Dim xx as xx。同时赋值要再写一遍变量名。。。不得不说真的很麻烦。

    Dim S_ROW As Integer: S_ROW = Range("A1")
    

    6. 不显示确认对话框

    做一些删除之类的操作,如果程序里不自动屏蔽对话框的话,自动化就无从谈起了。以下是个简单的例子。

    Application.DisplayAlerts = False
    Worksheets("sheet1").Delete
    Application.DisplayAlerts = True
    

    7. 保存工作簿

    Workbook.SaveAs方法。设置Filename参数即可。

     Dim book1 As Workbook
     book1.SaveAs Filename:=ThisWorkbook.Path & "\AutoSheet.xlsx"