Excel VBA

由于工作需要,需要从头开始学习Excel表格。以前并没有认识到Excel表格的丰富功能直到工作后,接触到别人(BA)写的 Excel,看了一下还不错。所以在这里整理一下我查找的资料。


Excel VBA : At the begining for VBA (Basic) 

Excel VBA Tutorial - Easy Excel Programming

API 

VBA 方法

VBA 与 VB 区别与联系

VBA(Visual Basic for Applications) VB (Visual Basic)

1. VB是设计用于创建标准的应用程序,而VBA是使已有的应用程序(EXCEL等)自动化
           2. VB具有自己的开发环境,而VBA必须寄生于已有的应用程序.
           3. 要运行VB开发的应用程序,用户不必安装VB,因为VB开发出的应用程序是可执行文件(*.EXE),而VBA开发的程序必须依                   赖于它的父应用程序,例如EXCEL.
           4.VBA是VB的一个子集。


Excel VBA API 中文版 

https://www.jb51.net/shouce/vbs/vsmthReadAll.htm


Excel中表单控件和ACTIVEX控件主要区别

一个主要区别就是表单控件可以和单元格关联,操作控件可以修改单元格的值(不用编程),所以用于工作表,而           ACTIVEX控件虽然属性强大,可控性强,但不能和单元格关联,所以用于表单Form。


Excel 函数列表

1. VLOOKUP函数(使用率很高,类似 SQL外键查询。)

=VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)    =VLOOKUP(F:F,Sheet2!A:I,4,0)

a.外键区域 b.外键在另一个sheet页的区域 c. 外键列的位置 d. 是否是精确查询 0,1

VLOOKUP 多条件查询

2. Text()


多看代码,实践中学习


在录制宏后的脚本基础上进行修改比较容易


高亮显示

Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' 鼠标放在哪里,选中哪里
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual 
'Call gys '调用改颜色 的sub 代码
Dim fist As Range, rownum As Integer

Set fist = Range("A2:EJ2000")

fist.Interior.Pattern = xlNone

rownum = ActiveCell.Row

If rownum >= 2 Then

Selection.EntireRow.Interior.ColorIndex = 37 ' 选择的区域整行的底纹的内部颜色是
 
End If

Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True
 
End Sub

Application.Calculation影响VBA运行速度

VBA通常在程序开始加两句:
Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 
在结尾处再恢复:
Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True


筛选信息 

VBA筛选AutoFilter用法(转载)

Sub FilterSophia()
'
' FilterSophia 宏
'重点 在于 Variant 变量

'(2, "1/10/2019")
Dim dateformat As String, Year As String, Month As String, Day As String, myValue As Variant


  If ActiveSheet.AutoFilterMode = False Then  '检查是否开启自动筛选

        Range("A1:B9").AutoFilter   '没有开启的话则开启自动筛选

    End If

    Selection.AutoFilter
    Range("A1").Select
    
    
   ' myValue = InputBox("Give me Date (Format M/DD/YYYY)")
   
   myValue = Date

    
    ActiveSheet.Range("$A$1:$XEZ$2138").AutoFilter Field:=92, Criteria1:= _
        "Sophia Shao"
    ActiveSheet.Range("$A$1:$XEZ$2138").AutoFilter Field:=93, Operator:= _
        xlFilterValues, Criteria2:=Array(2, myValue)
End Sub

关闭或保存文件时的提示信息

原文:https://blog.csdn.net/iamlaosong/article/details/78842718 

1、关闭文件时如果文件做了修改,系统会提示保存,用下列语句就不会提示了:

ThisWorkbook.Close savechanges:=False     

False表示不保存修改,如果改为True,则保存修改。类似的:

ActiveWindow.Close savechanges:=False

Windows(datfile).Close savechanges:=False

。。。

2、保存文件时如果存在同名文件,系统会提示是否覆盖,用用下列语句就不会提示了:

在文件处理开始时,关闭报警:
Application.DisplayAlerts = False
在文件保存后,再打开报警:
Application.DisplayAlerts = True

3、下列语句可以消除“隐私警告”消息框:

ActiveWorkbook.RemovePersonalInformation = False
 


with 语句

with语句,当对某个对象执行一系列的语句时,不用重复指出对象的名称。

Set regex = CreateObject("VBScript.RegExp")

With regex
  .Pattern = "(SC2)-[A-Z0-9]{5}-[A-Z]{4}-\d{6}$" 'Change pattern for different requirement
  .Global = True
End With

Set matches = regex.Execute(ActiveSheet.Range("A" & i).Value)


VBA-正则表达式


VBA 与SQL(To be confirm)

Sub CreateRecordset1()
Application.Calculation = xlManual
    Dim cnn As Object
    Dim rst As Object
    Dim strPath As String
    Dim strSQL As String
    Dim lngCount As Long
    Dim i As Integer
    Set cnn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.RecordSet")
    '----后期引用Recordset对象
    strPath = ThisWorkbook.FullName
    '----指定ADO连接的文件路径(本工作簿)
    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" _
        & "Extended Properties=Excel 12.0;" _
        & "Data Source=" & strPath
    strSQL = "select distinct a.*,b.工艺设计理论单产 from (select distinct 工厂,物料,max(提交日期) as  最新日期 from [MX$] group by 工厂,物料) as a left  join [MX$] as b on a.工厂=b.工厂 and a.物料=b.物料 and (a.最新日期=b.提交日期 or a.最新日期 is null)" '定义SQL记录命令"
    '----SQL语句
    rst.Open strSQL, cnn, 1, 3
    '----使用Open方法建立记录集
    Cells.ClearContents
    For i = 0 To rst.Fields.Count - 1
    '----遍历读取记录集中的字段
        Cells(1, i + 1) = rst.Fields(i).Name
    Next i
    Range("A2").CopyFromRecordset rst
    '----读取记录集中的记录
    lngCount = rst.RecordCount
    '----记录的数目
    MsgBox "共查询到:" & lngCount & "条记录。"
    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing
  Application.Calculation = xlAutomatic '打开自动计算

End Sub


app.

shortcut key F1 help

MsgBox "Entered value is " & Range("A1").Value  & join the string 

Highlight Active Cell

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim rowNumberValue As Integer, columnNumberValue As Integer, i As Integer, j As Integer

Cells.Interior.ColorIndex = 0

rowNumberValue = ActiveCell.row
columnNumberValue = ActiveCell.column

For i = 1 To rowNumberValue
    Cells(i, columnNumberValue).Interior.ColorIndex = 37
Next i

For j = 1 To columnNumberValue
    Cells(rowNumberValue, j).Interior.ColorIndex = 37
Next j

End Sub

Range Object

Private Sub CommandButton1_Click()

Dim rng As Range, cell As Range

Set rng = Range("C4:D10")
Set cell = Selection//鼠标手动选择的区域

If cell.Count = 1 And IsNumeric(cell) And Not IsEmpty(cell) And Not Intersect(rng, cell) Is Nothing Then
    MsgBox "You win"
Else
    MsgBox "You lose"
End If

End Sub

Sort Numbers

Dim i As Integer, j As Integer, temp As Integer, rng As Range

Set rng = Range(""A1"").CurrentRegion
For i = 1 To rng.Count
    For j = i + 1 To rng.Count
If rng.Cells(j) < rng.Cells(i) Then
'swap numbers
temp = rng.Cells(i)
rng.Cells(i) = rng.Cells(j)
rng.Cells(j) = temp
Next j
Next i
End If

Dependent Drop-down Lists  (accroding to previous set)

 


快捷键

local on top-left ctrl + Home/End

Insert Row  ctrl + shift + "+"

Delect Row ctrl + "-"

Current date Ctrl +;

Select last row  Ctrl+ arrows

Select area Shift + Ctrl + arrows

Select all area Shift + Ctrl + End

Fliter Shift + Ctrl + L

Hide row Ctrl +9

Hide column Ctrl + 0


快速选择工作表

在红色框处,点击右键可以查看所有工作表清单。


高级筛选

筛选状态下,复制数据时,隐藏的数据经常会被复制出来。使用数据->高级筛选,可以直接将筛选结果复制到指定的区域。


合并文本内容

符号 “&”

Phonetic


合并序列号填充

不同数量的单元格,无法通过下拉来填充序号,因此可以使用Max和相对地址来快速填充序列号。

=MAX($B$2:B2)+1

按Ctrl+Enter全部填充


VBA学习路线图


Thanks for above blog author. 

+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值