VBA的学习笔记(持续更新)

内容

声明变量(Dim & public & private & static). 4

Public Sub 和 Private Sub的区别... 4

复制一切&复制数值... 4

1.Windows10で起動時に実行するファイルを設定する方法!... 5

2. VBAでIEの全要素のデータを取得する方法(改良版)~VBA(マクロ)でIE操作... 5

工作表对象(sheet). 6

1.引用工作表的三种方法... 6

2.选中工作表的方法... 7

3.选中多个/所有工作表... 7

4.遍历所有worksheet(Traversal)... 8

5.添加/删除worksheet 9

6.禁止更改工作表名称... 9

基本操作代码... 9

1.单元格背景上色... 9

2.字体颜色更改... 10

3.Resize调整选区大小... 10

4.选中单元格操作select & activate &goto. 10

5.查找Find函数... 12

6.替换replace函数... 12

7.人机交互弹窗返回值VByesno. 12

8.数据有效性... 12

Excel小知识... 13

1.ExecuteExcel4Macro是什么?... 13

2。:=的含义?... 14

3.On error resume next 14

4.怎么让代码在Excel打开时候自动运行而不需要手动去点击来触发。... 14

5.Excel代码里xl的含义... 14

6.Ubound含义... 15

7.Lcase和Ucase是什么意思?... 15

7.常见的Chr(13)是什么?... 15

8.使用application.SendKeys模拟键盘输入... 15

9.URL含义... 16

10. 正则表达式... 16

11.VBE的立即窗口... 16

12.给变量赋值... 17

12.1给数据类型变量赋值... 17

12.2给对象类型变量赋值(object)... 17

13. class类是什么?... 17

14.Excel2003和Excel2007. 18

VBA的常用函数... 18

①       圆整函数(round)... 18

2.evaluate函数... 18

3.删除重复数据(Removeduplicates). 19

4.Split函数... 20

Application(应用程序)对象... 20

1.获取Excel的版本及用户名... 20

2.定时执行(Ontime函数)... 21

3.屏蔽/更改组合键(比如ctrl+c)(Onkey函数)(2023/2/1)... 21

4.设置excel标题栏... 21

5.关闭workbook的方法(close和quit)... 22

常用excel小代码... 23

1.设置Excel使用期限... 23

2.得出A列数据的行数(经典案例)... 23

3.得出数据的列数... 24

3.删除重复数据... 24

4.高亮重复数据... 24

5.高亮显示选定单元格行列(十字交叉)... 25

5.批量获取网页id&name. 26

6.加快代码运行小技巧... 27

7.给sheet或者workbook加密码,解密码... 28

8.隔行插入数据... 28

9.隐藏Excel主界面... 28

10.防止用户干预宏的操作... 29

11.关闭excel不出现弹窗... 29

12.为单元格添加批注... 30

13.使用webbrowser控件显示GIF动态图... 30

14.制作进度条... 31

15.VBA打开网页... 31

16.VBA打开网页进行搜索... 32

17.文字和字母分离的正则代码... 33

18.VBA执行过程禁止鼠标键盘操作... 34

19.单词熟练度check功能... 34

20.批量创建HyperLink. 35

21单词check代码... 37

PPT.. 38

1.增加撤销次数限制... 38

2.设定自动保存时间... 38

3.增加PPT文件的预览图... 39

声明变量(Dim & public & private & static)

Public Sub 和 Private Sub的区别

Public Sub在其他的Module(该sub以外的模块)也能调用
Private Sub在其他的Module(该sub以外的模块)不能调用

复制一切&复制数值

1.上面这个是复制A1:C3的一切。

2.下面这个只复制了值(Values

uploading.4e448015.gif

转存失败重新上传取消

第一步是把内容复制到剪切板内,第二步再贴到指定位置。

1.Windows10で起動時に実行するファイルを設定する方法!

【20秒でできる。】Windows10で起動時に実行するアプリを設定する方法! | nujonoa_blog.

2. VBAでIEの全要素のデータを取得する方法(改良版)~VBA(マクロ)でIE操作

【簡単】VBAでIEの全要素のデータを取得する方法(改良版)~VBA(マクロ)でIE操作 | nujonoa_blog

3. 【保存版】初心者がエクセルVBAを実務で使えるようになるための完全マニュアル

【保存版】初心者がエクセルVBAを実務で使えるようになるための完全マニュアル

工作表对象(sheet)

  首先,一个excel是一个book,然后book里面有很多sheet,我们最常用的是worksheet。在excel下面的sheet栏右键→插入,就可以看到可以插入以下东西,所以说excel的sheet包含3个东西,worksheet & chart &macro,所以我们写代码的时候,最好写worksheet比较好。

uploading.4e448015.gif

转存失败重新上传取消

1.引用工作表的三种方法

前言:在切换各个工作表的时候,需要指定工作表,引用工作表有三种方法。

uploading.4e448015.gif

转存失败重新上传取消

uploading.4e448015.gif

转存失败重新上传取消

1.使用工作表索引号

比如说有以上5个sheet,在excel界面,工作名是1,5,2,3,4。这个顺序就是索引号,比如5这工作表的索引号是2,2工作表的索引号是3,所以,索引号就是excel界面的顺序。workSheets(2).select选中的就是“5”工作表。

2.使用工作表名称

workSheets(“2“).select选中的就是名为“2”的工作表。

3.使用工作表代码名称

workSheet2.select这次选中的是“2”工作表,即使名字变了,也是选中的sheet2,如果sheet的名字可能会发生改变,最好采用这种方法,我常常常用第二种方法。

2.选中工作表的方法

选中工作表可以采用select和activate,前者是选择,后者是激活,量都可以让sheet称为活动工作表,区别是select只能选择此时选中的sheet,activate则可以选中隐藏的sheet。

如下例所示,sheet1和sheet3都被隐藏,select会报错,activate则没问题。

PS:经过测试,如果隐藏了sheet,用activate无法选中该sheet,会自动选中该sheet后面的一个sheet,所以说,如果想操作一个sheet,隐藏的话是无法操作的吧?在操作的时候,该sheet需要visible=true

uploading.4e448015.gif

转存失败重新上传取消

3.选中多个/所有工作表

通常我们都是直接.select就选中一个物体了

Sheet1.select

如果想多选怎么办呢?通过macro录制,得到以下代码,是用sheet名字的数组来实现的。

    Sheets(Array("1", "Sheet5", "Sheet6", "5" , "Sheet8")).Select

如果有很多表格,然后我想全选所有表格用什么办法呢?有两种方法。

uploading.4e448015.gif

转存失败重新上传取消

表达式.select True/False,其中的true就是选中单个物体,False就是叠加选中,通过一个for循环,我们就实现了选中所有sheet的操作。

另一个简单的就是如下这种方法。

uploading.4e448015.gif

转存失败重新上传取消


 

4.遍历所有worksheet(Traversal)

4.1 For each…next

uploading.4e448015.gif

转存失败重新上传取消

4.2 For…next

uploading.4e448015.gif

转存失败重新上传取消

最终的结果都是以下msgbox。

uploading.4e448015.gif

转存失败重新上传取消

5.添加/删除worksheet

uploading.4e448015.gif

转存失败重新上传取消

6.禁止更改工作表名称

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

If Sheet1.Name <> "hans" Then

        Sheet1.Name = "hans"

Else

        End If

End Sub

基本操作代码

1.单元格背景上色

有两种方法,一个是colorindex,后面加数字,一个是color,后面加rgb形式,对应着红绿蓝三原色。

Sub test()

Range("A1:D10").Interior.ColorIndex = 0

Range("A10").Interior.Color = RGB(0, 255, 3)

End Sub

通过以下代码即可得到每个颜色指数对应的颜色,通过测试知道有56种颜色。

Sub test()

k = 1

For i = 1 To 8

    For j = 1 To 7

        Cells(i, j).Interior.ColorIndex = k

        Cells(i, j) = k

        k = k + 1

    Next j

Next i

End Sub

uploading.4e448015.gif

转存失败重新上传取消

2.字体颜色更改

颜色也是56个,对应关系和上面的底纹颜色是一样的。

Range("A10").Font.ColorIndex = 2

3.Resize调整选区大小

Resize(rowsize,columnsize)

Range("A1").Resize(5, 10).Select

选中A1单元格,然后扩展到5行10列,即最终选中的是A1到J5。

4.选中单元格操作select & activate &goto

4.1 select

Sheets("sheet1").Activate

Sheets("sheet1").Range("A1").Select

注意点:select的对象是默认是正在打开的sheet,如果打开的是sheet2,然后需要选中sheet1的单元格,就会弹出以下报错。

“类range的select方法失败了”

uploading.4e448015.gif

转存失败重新上传取消

4.2 activate

Sheets("sheet1").Activate

Sheets("sheet1").Range("A1").activate

注意点:activate的对象是默认是正在打开的sheet,如果打开的是sheet2,然后需要选中sheet1的单元格,就会弹出以下报错,和select是一样的。

uploading.4e448015.gif

转存失败重新上传取消

4.3 goto函数

注意点:goto和以上两种方法的区别就是不需要提前激活sheet,如果打开的是sheet2,然后需要选中sheet1的单元格,是不会报错的。

Application.Goto Sheets("sheet1").Range("A1")

2.复制

Sub test()

Range("A1:D10").Copy Range("F5")

End Sub

3.剪切

Sub test()

Range("A1:D10").Cut Range("F5")

End Sub

5.查找Find函数

Sub Macro()

    Cells.Find(What:="abc").Activate

End Sub

简写

Sub Macro()

    Cells.Find("abc").Activate

End Sub

这里activate也可以写成select

6.替换replace函数

Sub Macro3()

    Cells.Replace What:="abc", Replacement:="123"

End Sub

把前面的what里面的内容abc换成后面的123。

简写

Sub test()

       Cells.Replace "abc", "123"

End Sub

7.人机交互弹窗返回值VByesno

Sub iif()

        Dim Ret as integer

Ret = MsgBox("do you like VBA?", vbYesNo)

If Ret = vbYes Then

MsgBox "you are a good boy!"

Else

MsgBox "you are a bad guy!"

End If

End Sub

8.数据有效性

具体用宏录制即可,无需记忆。

Sub Macro1()

''

    With Selection.Validation

        .Delete

        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

        xlBetween, Formula1:="1,2,3,4"

        .IgnoreBlank = True

        .InCellDropdown = True

        .InputTitle = "Please input~"

        .ErrorTitle = "error"

        .InputMessage = "message~~~~"

        .ErrorMessage = "error message~~~"

        .IMEMode = xlIMEModeNoControl

        .ShowInput = True

        .ShowError = True

    End With

   

    End Sub

得到Excel指定列非空数据的行数

Excel小知识

1.ExecuteExcel4Macro是什么?

ExecuteExcel4Macro是执行Excel4.0的宏。换句话说,就是使用旧版本(4.0版本)的宏。

这是在VBA可以用之前使用的工具(excel4.0发行于1994年,VBA是 1993年开发,1994年发行的Excel 5.0版本中才开始具备了VBA的宏功能,它可以与最新版本的Excel一起使用。 虽然是很老的东西,但是它有一些非常有用的功能,因此可以将其视为在使用VBA时遇到问题时的一种手段。

机能:未打开的Excel工作簿中读取数据。

比如说在执行代码的时候,我需要得到C:\Users\n311733\Desktop\下的一个1.xlsx表格中sheet1的A1单元格的数值,并且我还想在不打开这个excel的前提下(以免拖慢运行速度)

可以用excel4.0的宏来执行。

Sub test()

Range("A1") = ExecuteExcel4Macro("'C:\Users\n311733\Desktop\[1.xlsx]sheet1'!R1C1")

End Sub

由于它不打开book,因此比在VBA中正常打开book要快得多。但是,一次只能获取一个单元格,不能一次获取多个单元格。因此,当需要获取多个cell,cell的数量很大时,可能会比较慢。

注意点:表达方式是固定的,双引号+单引号+路径+[文件名]sheet+单引号++R1C1格式的单元格形式+双引号

2。:=的含义?

参数的赋值号,比如 Cells.Find(What:="abc").Activate,这里的:=表示给参数what赋值。

如果是给变量赋值,直接用等号a=5即可。

3.On error resume next  

当我们在某处加上On Error Resume Next这条语句后,随后的程序即便出现"运行时错误"时,也不会显示"出错信息",并且会继续运行下去.

4.怎么让代码在Excel打开时候自动运行而不需要手动去点击来触发。

在VBE界面的Thisworkbook下输入以下代码,注意不是在模块下面写代码!

Private Sub Workbook_Open()

' Put your code here

End Sub

这样每次打开excel的时候,代码就会自动运行起来了~比如一些权限设定和文件日期判定都可以写在Thisworkbook下。

5.Excel代码里xl的含义

应该就是excel的缩写!比如下列代码的xlup,就表示从A99999单元格按住ctrl+上方向键,得到a列最后一个数值,然后把行数赋值给a。

Sub 123()

a = Range("A99999").End(xlUp).Row

end sub

6.Ubound含义

UBound的是数组的上界
比如一组数组arr(1 to 10),那么ubound(arr)=10
那二维数组arr(1 to 10,1 to 100)呢?

ubound(arr,1)=10表示第一维的上界是10
ubound(arr,2)=100表示第二维的上界是100。

三维四维数组依此类推。

 Ucase

7.LcaseUcase是什么意思?

VBLCASE是将大写改成小写,UCASE是将小写改大写

7.常见的Chr(13)是什么?

Sub test()

MsgBox "abc" & Chr(13) & "def"

End Sub

uploading.4e448015.gif

转存失败重新上传取消

8.使用application.SendKeys模拟键盘输入

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

              If Target.Column = 3 Then Application.SendKeys "%{down}"

End Sub

  %{down}的意思是alt+↓的意思。

sendkeys是模拟键盘操作。

但是这样会导致num键开关,解决方法有三种,具体如下。

1.Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Set x = CreateObject("wscript.shell")

If Target.Column = 3 Then x.SendKeys "%{down}"

End Sub

2.再用一次sendkeys貌似就可以再打开num键了。

3. 'NumLockが解除されてしまう事への対応
SendKeys "{NUMLOCK}"

9.URL含义

URL:在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位器),它是WWW的统一资源定位标志,通俗说就是网址。

Navigate:导航; 确定(船、飞机、汽车等)的位置和方向; 航行; 航海。

10. 正则表达式

正则表达式,又称规则表达式,Regular Expression,在代码中常简写为regexregexpRE),是一种文本模式,包括普通字符(例如,a z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。

11.VBE的立即窗口

立即窗口是一个可以即时执行代码的窗口,和DOS操作类似。

在立即窗口输入代码后,按回车即可执行代码,快捷键是Ctrl+G。

还可以用来调试(debug),在需要调试的代码前面加上debug.print即可在立即窗口看到该值的变化。

uploading.4e448015.gif

转存失败重新上传取消

uploading.4e448015.gif

转存失败重新上传取消

12.给变量赋值

12.1给数据类型变量赋值

Let 变量=xxx

常用的就是给数据类型变量赋值,其中let通常是省略掉的。

12.2给对象类型变量赋值(object)

Set 变量=xxx

变量还可以储存工作簿,工作表,单元格等对象(object),这里的set是不可以省略的。

假如根据excel一列的数据来批量生成一堆sheet,可以使用以下代码。

uploading.4e448015.gif

转存失败重新上传取消

13. class类是什么?

类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。类的内部封装了方法,用于操作自身的成员。类是对某种对象的定义,具有行为(be-havior),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。

14.Excel2003和Excel2007

对于后缀是xls的excel,对应的是Excel2003,行数只有65536行。(6万),列数是256列。

对于后缀是xlsx的excel,对应的是Excel2007,行数提高了16倍,有1048576行。(100万),列数是16384列。

VBA的常用函数

  1. VBA的Round関数是不能进行整数部分的圆整,只能是小数部分进行圆整。这个和excel自带的round函数是不一样的,excel自带的round(数,位数)是可以输入负值的,表示整数部分的圆整,但是VBA的位数不可以输入负值。
  2. Excel的Round函数是四舍五入;

VBA的Round函数不是四舍五入,是用银行型的圆整方式来进行的。

银行型的圆整就是 小数点第一位是5的时候把数字整体向偶数方向进行调整。VBA的round也只是针对第一位小数而言的,后面位数的小数还是采用的四舍五入。

uploading.4e448015.gif

转存失败重新上传取消

2.evaluate函数

Application.Evaluate的作用是将一个字符串转换为一个对象或者一个值。可以省略Application关键字。比如以下代码,在excel里面看就能知道区别。

Sub test0()

              Cells(3, 3) = "=sum(A1:A10)"

              Cells(4, 4) = Evaluate("=sum(A1:A10)")

End Sub

uploading.4e448015.gif

转存失败重新上传取消

三行三列是显示的中间的公式,四行四列由于用了evaluate函数,输出的是一个值,看不到中间的公式。如果代码生成的公式不想让使用的人看到的化就可以用这个功能,隐藏掉中间的公式。

3.删除重复数据(Removeduplicates)

使用自带的Removeduplicates 函数即可删除指定区域的重复数据。

Removeduplicates (columns,Header)

其中columns是必须的,表示第几列。如下图的代码所示就是A~D列的区域内,以第三列为基准来删除重复的数,关联的行都会删掉。如果columns变成2,那就是以第二列为基准来判断重复。

uploading.4e448015.gif

转存失败重新上传取消  

4.Split函数

Split(expression, delimiter, limit, compare)

没写分隔符就默认是空格,如果写了分隔符,分隔符需要被删除。

uploading.4e448015.gif

转存失败重新上传取消

uploading.4e448015.gif

转存失败重新上传取消

uploading.4e448015.gif

转存失败重新上传取消

Application(应用程序)对象

1.获取Excel的版本及用户名

uploading.4e448015.gif

转存失败重新上传取消

Memo:对于某些机能,老版本的excel没有,所以可以通过这个判定来提前给出提醒。对于大公司而言,大家的excel版本都是统一的,感觉Excel的版本用处不是很大,但是用户名可以进行一些使用权限的判定,还是非常有用的。

2.定时执行(Ontime函数)

具体可以参考以下CSDN链接

每隔十分钟弹窗提醒(Ontime函数)_Kazefuku的博客-CSDN博客

3.屏蔽/更改组合键(比如ctrl+c)(Onkey函数)(2023/2/1)

功能:屏蔽电脑原有组合键功能,或者自定义快捷键。

Application.onkey (key,procedure)

首先在workbook里面写入以下代码,字母的话要用{}圈起来?数字不能用{}圈起来。

其中^表示按下crtl键,那么onkey.”{^c}”表示的就是按ctrl+c,表示复制。后面表示调用其他的sub函数,本次是调用的msg的sub函数。就是说当你激活这个workbook的时候,ctrl+c就已经改成了弹窗功能。如果不填procedure就表示不进行任何更改操作(恢复初始状态),如果是Application.onkey (key,””),就表示执行空白(也就是说屏蔽了改功能且无任何提醒)。

uploading.4e448015.gif

转存失败重新上传取消

uploading.4e448015.gif

转存失败重新上传取消

思考:如果你同时打开好多个workbook,即使切到别的workbook,由于你最开始打开了这个workbook就已经激活了这个功能,所以其他的workbook也不能使用ctrl+c功能,这样也许会让人困扰,解决方法就是在这个workbook里面加入恢复的代码。Onkey后面无procedure即代表恢复ctrl+c的功能。

uploading.4e448015.gif

转存失败重新上传取消

4.设置excel标题栏

    Excel的标题栏默认是**** -Excel,可以通过application.caption来更改这个标题。感觉用处不大,可能用来写版权声明倒是不错!

uploading.4e448015.gif

转存失败重新上传取消

其中vbnullchar表示空字符,这样-Excel的后缀就消失了。

Empty表示的是恢复默认状态。效果如下图所示。

uploading.4e448015.gif

转存失败重新上传取消

5.关闭workbook的方法(close和quit)

     关闭workbook通常有两种方法,一个是thisworkbook.close,一个是application.quit,前者是只关闭这个workbook,但是不kill整个excel程序。后者是关闭整个excel程序,两者各有特色。

uploading.4e448015.gif

转存失败重新上传取消

假象一种情景,我现在开着excel且有很多workbook,然后我需要在VBA里面运行代码关闭某个workbook,就用workbook.close就好了,但是,如果我就开了一个workbook,执行thisworkbook.close的话,excel是没有关闭的,所以最终代码运行以后会出现一个空白的excel界面,会让人感觉很奇怪。

所以我的需求是:当只有一个workbook打开的时候,运行application.quit来完全关闭excel。

如果有多个workbook打开,运行thisworkbook.close只关闭这一个workbook。只需要用一个if判定即可解决这个问题。

uploading.4e448015.gif

转存失败重新上传取消

常用excel小代码

1.设置Excel使用期限

Private Sub Workbook_Open()

Dim today As Date

today = Date

If today > "2022/1/1" Then

MsgBox ("License expired, please contact HanShuang!!!")

ps = InputBox("Please input the Admin password")

If ps = "123" Then Exit Sub

ThisWorkbook.Close

End If

End Sub

2.得出A列数据的行数(经典案例)

 Sub test()

Dim rng As Range

Dim i As Integer

For Each rng In Range("A:A")

If rng <> "" Then i = i + 1 Else Exit For

Next

Cells(4, 4) = i

End Sub

--------------------------------------------------

Sub test()

i = Cells(100000, 1).End(xlUp).Row

End Sub

从第一行的底下(随便写个1万行,或者用65536),end(xlup)等于ctrl+↑,这样就能找到最底下的那行数,然后将该数的行数赋值给i即可。

用currentregion也是可以的

j = Sheets(1).Range("A1").CurrentRegion.Rows.Count

3.得出数据的列数

依此类推用end(xltoleft).column即可得到数据的列数。

Sub test()

i = Cells(1, 256).End(xltoleft).column

End Sub

PS:excel2003只有256列。

3.删除重复数据

uploading.4e448015.gif

转存失败重新上传取消

RemoveDuplicates (Columns , Header),其中Columns是必須,header可省略。

亲测columns好像没啥用?无论是1还是2,选中的所有列都实施了重复数据的删除???

Sub test001()

Range("A1:C10").Select

Selection.RemoveDuplicates Columns:=1

End Sub

Sub test002()

ActiveSheet.Range("A1:C100").RemoveDuplicates Columns:=1

End Sub

4.高亮重复数据

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Range("A:A").Interior.ColorIndex = 0

Dim rng As Range

Dim i!

i = 0                                           

For Each rng In Range("A1:A100")

If Target.Count > 1 Then Exit Sub                       ‘如果多选则退出

If Target.Column > 1 Then Exit Sub                      ‘如果不是第一列则退出

If Target = "" Then Exit Sub                            ‘如果是空值则退出

If rng = Target Then rng.Interior.ColorIndex = 8

i = i + 1

Next

End Sub

如果是一个区域,不是一列,代码如下。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Range("A1:G50").Interior.ColorIndex = 0

Dim rng As Range

Dim i!

i = 0

For Each rng In Range("A1:G50")

If Target.Count > 1 Then Exit Sub

If Target = "" Then Exit Sub

If rng = Target Then rng.Interior.ColorIndex = 8

i = i + 1

Next

End Sub

5.高亮显示选定单元格行列(十字交叉)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Cells.Interior.ColorIndex = xlColorIndexNone

Set Rng = Application.Union(Target.EntireColumn, Target.EntireRow)

Rng.Interior.ColorIndex = Int(56 * Rnd + 1)

Set Rng = Nothing

End Sub

这里rnd是随机数,每次点击后颜色都会变化,也可以用一个常数。

5.批量获取网页id&name

Sub IEinput()

Application.ScreenUpdating = False

Dim objIE As Object

Set objIE = GetObject("", "InternetExplorer.Application")

objIE.Visible = True

 objIE.Navigate "https://www.baidu.com/"

While objIE.ReadyState <> 4 Or objIE.Busy = True

        DoEvents

Wend

On Error Resume Next

   I = 1

   J = objIE.document.all.Length

    Cells(I, 1).Value = "No"

    Cells(I, 2).Value = "tagname"

    Cells(I, 3).Value = "Type"

    Cells(I, 4).Value = "NAME"

    Cells(I, 5).Value = "ID"

    Cells(I, 6).Value = "className"

    Cells(I, 7).Value = "TABINDEX"

    Cells(I, 8).Value = "Vakue"

    Cells(I, 9).Value = "checked"

    Cells(I, 10).Value = "tagname"

   

Dim A As Object

For Each A In objIE.document.getElementsByTagName("INPUT")

        Cells(I + 1, 1) = I - 1

        Cells(I + 1, 2) = A.TAGNAME

        Cells(I + 1, 3) = A.Type

        Cells(I + 1, 4) = A.Name

        Cells(I + 1, 5) = A.ID

        Cells(I + 1, 6) = A.className

        Cells(I + 1, 7) = A.TabIndex

        Cells(I + 1, 8) = A.Value

        Cells(I + 1, 9) = A.Checked

        Cells(I + 1, 10) = A.parentElement.TAGNAME

        I = I + 1

        Application.StatusBar = I & "/" & J

    Next

On Error GoTo 0

Application.ScreenUpdating = True

Application.StatusBar = False

    

End Sub

6.加快代码运行小技巧

为了加快代码的执行速度,最简单的方式,将代码的执行过程设置为不显示,可以在代码执行时,临时关闭后续设置:自动重算、自动刷新、弹窗警告

温馨提示:以下代码需要成对出现,设置False后,末尾改回True

Sub AppSetting()

        ’  程序开始

    With Application

        .ScreenUpdating = False         '  关闭屏幕刷新

        .EnableEvents = False           '  关闭事件触发

        .DisplayAlerts = False          '  关闭弹窗提示

    End With

   

    ' Your Code                         '   调用程序运行的主体代码

        ’程序末尾

    With Application

        .ScreenUpdating = True          '  恢复屏幕刷新

        .EnableEvents = True            '  恢复事件触发

        .DisplayAlerts = True           '  恢复弹窗提示

    End With

   

End Sub

7.给sheet或者workbook加密码,解密码

Sub Macro1()

    Sheets("1").Protect Password:="123"

    ThisWorkbook.Protect Password:="123456"

   

    Sheets("1").Unprotect Password:="123"

    ThisWorkbook.Unprotect Password:="123456"

End Sub

8.隔行插入数据

Sub Macro1()

    Selection.EntireRow.Insert

    Range("A1:D1").Copy Selection.Range(Cells(1, 1), Cells(1, 4))

    Do

    ActiveCell.Offset(2, 0).EntireRow.Select

    Selection.Insert

    Range("A1:D1").Copy Selection.Range(Cells(1, 1), Cells(1, 4))

    Loop Until ActiveCell.Offset(1, 0) = ""

   

End Sub

9.隐藏Excel主界面

如果想要打开一个excel的时候只显示窗体Form,不显示主界面。可以在workbook里面输入以下代码。

uploading.4e448015.gif

转存失败重新上传取消

10.防止用户干预宏的操作

在执行代码时,如果时间较长,用户点鼠标的位置也许会影响代码的运行。可以在代码开始之前设置interactive=false,记住在代码结束后一定要设置interactive=True,如果没有设置,代码运行后将无法操作excel。

11.让excel只在指定路径打开

比如说做了一个excel,然后需要在指定路径下使用,不希望别人复制到自己文件夹下使用(因为该工具可能会定期进行更新,如果他人自己复制使用可能导致计算的结果不是最新工具产生的)。在workbook的open里面输入以下代码,如果路径不是指定路径,那么会有弹窗然后关闭本workbook。

uploading.4e448015.gif

转存失败重新上传取消

11.关闭excel不出现弹窗

用代码执行的过程中,不希望有人机交互。比如关闭excel的bookd的时候,默认是会有弹窗的,有以下方法可以进行禁止弹窗。

uploading.4e448015.gif

转存失败重新上传取消

1.close的savechanges更改

在close后面打一个空格就会出来close函数对应的参数,第一个就是savechanges

uploading.4e448015.gif

转存失败重新上传取消

2. 关闭之前save

uploading.4e448015.gif

转存失败重新上传取消

3.禁用所有的弹窗

uploading.4e448015.gif

转存失败重新上传取消

12.为单元格添加批注

uploading.4e448015.gif

转存失败重新上传取消

如果目标单元格有批注了,再次添加会报错,所以有is nothing的判断。Visible是将批注显示出来,默认是添加,但是不显示出来。

13.使用webbrowser控件显示GIF动态图

uploading.4e448015.gif

转存失败重新上传取消

在form里面添加webbrowser控件,然后点击webbrowser控件,输入以下代码即可。

Private Sub UserForm_Initialize()

Me.WebBrowser1.Navigate "路径+ bear_rabbit.gif"

End Sub

14.制作进度条

Sub progress_bar()

Dim i As Double

              UserForm1.Show 0

With UserForm1.ProgressBar1

              .Min = 1

              .Max = 10000

              .Scrolling = 0

For i = 1 To 1000000

              Cells(i, 1) = i

              .Value = i

              UserForm1.Caption = "exe is executing...." & i / 10000 & "% have been                completed!!!!"

Next i

End With

Unload UserForm1

End Sub

15.VBA打开网页

Sub teststeststes()

  Set IE = CreateObject("internetexplorer.application")

   IE.Visible = True

   IE.Navigate "http://www.baidu.com/"

  End Sub

16.VBA打开网页进行搜索

假如说用的百度,想要通过代码直接检索abcd这个词。首先检索一次abcd,可以知道百度的检索形式是百度安全验证”其他的可以不要,所以代码就是

uploading.4e448015.gif

转存失败重新上传取消

uploading.4e448015.gif

转存失败重新上传取消

其中,如果不需要网页出现,visible(可视)调成false,不仅让程序在跑的时候有种神秘感(并没有),还能稍微加快一点速度。

uploading.4e448015.gif

转存失败重新上传取消

同理,google也是一样,只是变成了search?q=xxx.

uploading.4e448015.gif

转存失败重新上传取消

uploading.4e448015.gif

转存失败重新上传取消

17.文字和字母分离的正则代码

uploading.4e448015.gif

转存失败重新上传取消

Sub test()

With CreateObject("VBSCRIPT.REGEXP")

    For i = 1 To [a65536].End(xlUp).Row

        .Global = True

        .Pattern = "\w"

        Cells(i, 4) = Replace(Cells(i, 1), " ", "")         ‘这个代码是去掉字符串的空格

         Cells(i, 2) = .Replace(Cells(i, 4), "")

         Cells(i, 3) = Replace(Cells(i, 4), Cells(i, 2), "")

     Next i

 End With

End Sub

18.VBA执行过程禁止鼠标键盘操作

Sub xxx()
Application.Interactive = False'禁用键鼠操作
'执行其它代码!
Application.Interactive = True'启用键鼠操作!
End Sub

19.高亮显示选定单元格(十字交叉)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

              Cells.Interior.ColorIndex = xlColorIndexNone

              Set Rng = Application.Union(Target.EntireColumn, Target.EntireRow)

              Rng.Interior.ColorIndex = Int(56 * Rnd + 1)

              Selection = Int(56 * Rnd + 1)

              Set Rng = Nothing

End Sub

19.单词熟练度check功能

Sub valcabulary_check()

Dim rng As Range

Dim rng1 As Range

Dim i!

i = 0

j = 1

Set rng = Selection

For Each rngs In rng

n = rngs.Row

    If Cells(n, 5) = Cells(n, 7) Then

        Cells(n, 10) = Cells(n, 10) + 1

        i = i + 1

       

    Else

    rng(j) = Cells(n, 1)

    Sheets("review").Cells(j, 1) = rng(j)

    j = j + 1

        End If

Next

MsgBox "Right:  " & i & "  word" & Chr(13) & "Miss:  " & n - i - 1 & "  word"

End Sub

20.批量创建HyperLink

Sub sheet_name_hyperLink()

Dim name

k = 0

For i = 1 To 30

name = Cells(i, 2)

ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 2), Address:=name

Next i

Cells(1, 1).Select

MsgBox ("Update Is completed!")

End Sub

INI文件是什么?

.ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,统管windows的各项配置,一般用户就用windows提供的各项图形化管理界面就可实现相同的配置了。但在某些情况,还是要直接编辑ini才方便,一般只有很熟悉windows才能去直接编辑。

uploading.4e448015.gif

转存失败重新上传取消

21单词check代码

Sub valcabulary_check()

Dim rng As Range

'Dim rng1 As Range

Application.ScreenUpdating = fale

hang_shu = Cells(10000, 1).End(xlUp).Row

lie_shu = Sheets("review").Cells(1, 1000).End(xlToLeft).Column

Sheets("review").Range("A:A").Cut Sheets("review").Cells(1, lie_shu + 1)

Dim i!

i = 0

j = 1

k = 0

Set rng = Range("A2:A" & hang_shu)

For Each rngs In rng

n = rngs.Row

      If Cells(n, 8) = "OK" Or Cells(n, 8) = "TBD" Then

'       If Cells(n, 5) = Cells(n, 7) Then

        Cells(n, 10) = Cells(n, 10) + 1

        i = i + 1

    Cells(n, 1).Interior.ColorIndex = 2

    Else

'    Cells(n, 1).Interior.Bold = True

    Cells(n, 1).Interior.ColorIndex = 3

   

    Sheets("review").Cells(j, 1) = Cells(n, 1)

    j = j + 1

        End If

        k = k + 1

Next

Application.ScreenUpdating = True

MsgBox "Right:  " & i & "  word" & Chr(13) & "Miss:  " & k - i & "  word"

End Sub

PPT

1.增加撤销次数限制

文件→选项→详细设定

uploading.4e448015.gif

转存失败重新上传取消

2.设定自动保存时间

文件→选项→保存

uploading.4e448015.gif

转存失败重新上传取消

3.增加PPT文件的预览图

在文件夹的表示中,如果希望PPT有以下预览情况

重命名文件后缀bat

cd/d"C:\Users\Administrator\Desktop\922_main shaft bearing\922c_sls011\载荷谱 SY9MW ABA Report57102"
ren "*.htm" "*.txt"

  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常好的问题!让我来回答你的问题。 首先,关于VBA学习笔记(一):自动添加代码,你可以使用VBA的宏来自动添加代码。具体步骤如下: 1. 打开你要添加代码的Excel文件,并按下Alt + F11进入VBA编辑器界面。 2. 在左侧的“项目资源管理器”窗格中,展开你的Workbook,并双击“这台电脑”(或“Microsoft Excel 对象”),打开相应的代码窗口。 3. 在代码窗口的顶部,选择“工具” > “宏” > “录制新宏”。 4. 在弹出的“新建宏”对话框中,为新宏命名,并选择一个快捷键,以便日后调用。 5. 点击“确定”后,VBA会自动开始录制你的操作。 6. 在代码窗口中,添加你需要自动执行的代码。 7. 完成代码添加后,点击“停止录制”按钮,保存你的新宏。 接下来,关于VBA修改注册表,你可以使用VBA的“WshShell”对象来实现。具体步骤如下: 1. 在VBA编辑器中,打开你要修改注册表的代码窗口。 2. 在代码窗口的顶部,添加以下代码: ``` Dim WshShell As Object Set WshShell = CreateObject("WScript.Shell") ``` 这将创建一个名为“WshShell”的对象,用于执行后续的注册表修改操作。 3. 接下来,你可以使用该对象的“RegWrite”方法来修改注册表。例如,以下代码将修改Windows启动时自动运行的程序列表: ``` WshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\MyApp", "C:\MyApp.exe", "REG_SZ" ``` 该代码将在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”键下添加一个名为“MyApp”的值,其值为“C:\MyApp.exe”,类型为“REG_SZ”。 4. 完成代码添加后,保存并执行你的代码。 希望这些步骤对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值