分享

Excel VBA(WPS Office下)安装及入门操作

 bunny2er 2018-11-28

Excel VBA入门(即可)

之前就有了解过WPS Office的宏功能,并且mark了一下,昨天偶然百度到了门路,这里把一些过程简单总结一下,分享给大家。

1.vba简介
这里写图片描述

Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件。也可说是一种应用程式视觉化的Basic脚本。该语言于1993年由微软公司开发的的应用程序共享一种通用的自动化语言——–Visual Basic For Application(VBA),实际上VBA是寄生于VB应用程序的版本。

2.所需软件:

  • WPS Office (10.1.0.7224)

    也就是目前2018年4月14日安装的最新版本,由此可以看出,和wps版本无关~

  • vba提取自WPS2012专业增强版
    下载地址网上很多,贴出来我在百度云盘保存的
    链接:https://pan.baidu.com/s/1HuBHlDmBfYH3zpvNo9c8yg 密码:xr8j

进阶技能:VB语言
这里写图片描述
VBA中有对象、方法、属性。理解这些是学习VBA的基础。
1、对象:工作簿、工作表、单元格、行、列等
2、属性:相应对象的属性。如工作表名称、单元格的行高等属性一般理解为对象拥有的静态特性。
3、方法:对相应对象所执行的动作称为对象的方法。如单元格移动、单元格删除内容等。
3.安装配置

  • 安装vba,双击vba6chs傻瓜安装即可
    这里写图片描述

4.收藏资料

链接:https://pan.baidu.com/s/1lxn5OKdBzkJwQ9ptmURFLg 密码:bdug

链接:https://pan.baidu.com/s/1dIVRJ0w0IOmQjYMx3b5-Ew 密码:tjra

链接:https://pan.baidu.com/s/1_Mb2WdzetVNAnZfgf4KuyA 密码:bcbp

5.简单入门操作
- 简单使用

  1. 创建一个宏
  2. MsgBox
  3. 工作簿和工作表对象
  4. Range对象
  5. 变量
  6. IF Then语句
  7. 循环
  8. 宏错误
  9. 字符串操作
  10. 日期和时间
  11. 事件
  12. 数组
  13. 函数和子函数
  14. 应用对象
  15. ActiveX控件
  16. 用户窗体

1. 创建宏
首先注意:保存的文件格式是Microsoft Office Excel 2007 启用宏的工作簿 (.xlsm),否则将出现以下提示
这里写图片描述
点击否,再选择正确的xlsm格式保存即可(下图中选中的格式)
这里写图片描述
然后是创建的过程(举个栗子)
新建一个Macro_test_01.xlsm
这里写图片描述
点击宏快捷键(Alt+F8)创建一个宏,赋个名字,点击“创建”按钮
这里写图片描述
工程界面,初始头已经给出
这里写图片描述
我们加了一句

Range("A1").Value = "Hello,Macro!"
  • 1

意思是给单元格A1赋值为”Hello,Macro!”
这里写图片描述
点击上面的运行快捷键(F5),返回excel工作簿界面看效果,这样就完成了我们第一个macro的创建,之后知道怎么开始了,针对问题到网上搜代码案例理解修改就好了;实际上,直接搜索VB语言相关的代码就可以得到更多信息
这里写图片描述

2. Msgbox
MsgBox是Visual Basic和VBS中的一个函数,功能是弹出一个对话框,等待用户单击按钮,并返回一个Integer值表示用户单击了哪一个按钮。
“MsgBox”即为“Message Box”的缩写,在英语中意为“信箱”。

『例1』单击按钮弹出对话框删除所有内容
step1:创建命令按钮,开发工具->命令按钮,在工作表合适位置拉出按钮
这里写图片描述
step2:双击按钮出现工程界面,输入代码如下:

Dim answer As Integer
answer = MsgBox("要清空工作表么?", vbYesNo + vbQuestion, "清空工作表")

If answer = vbYes Then
    Cells.ClearContents
Else
    'do nothing
End If
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

运行即可看到效果,在工作表中随便输入随机数据,单击按钮即可实现清除工作表的效果
step3:拓展
看到下拉框里面的内容否?可以将动作设置成这些,根据命名就可以看出作用;另外,需要做其他效果搜一下Msgbox,看看相关函数就能模仿出其他效果。
这里写图片描述
『例2』单击弹出输入框向A1输入一个数据

Dim myValue As Variant

myValue = InputBox("输个啥?", "InputBox函数", 1)
Range("A1").Value = myValue
  • 1
  • 2
  • 3
  • 4

step1:创建按钮,输入代码,运行调试
这里写图片描述
step2:退出设计模式,单击命令按钮2实现效果
这里写图片描述
这里写图片描述
step3:拓展
第一句,声明Variant类型的变量myValue,在这里使用Variant类型的变量,因为Variant变量可以保存任何类型的值。这样用户可以输入文字,数字等。
第二句,InputBox函数具有更多可选参数。提示+标题+具有默认值的输入框。如果没有提供其他输入,将使用默认值。

3.工作簿和工作表对象

4. Range对象

5. 变量

6. IF Then语句

7. 循环

  • Do Until 循环
Dim i As Integer
i = 1

Do Until i > 6
    Cells(i, 1).Value = 20
    i = i + 1
Loop
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这里写图片描述

  • 循环遍历整个列,将A列中小于给定数的数据上色
Dim i As Long

Columns(1).Font.Color = vbBlack

For i = 1 To Rows.Count
    If Cells(i, 1).Value < Range("D2").Value And Not IsEmpty(Cells(i, 1).Value) Then
        Cells(i, 1).Font.Color = vbRed
    End If
Next i
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这里写图片描述
注意:Excel 2003中的工作表最多可包含65,536行,Excel 2007或更高版本中最多可包含1,048,576行。无论您使用的是什么版本,上面的代码行都会遍历所有行

  • 删除A的重复数据

实际上是把A列中下一个在B中不存在的数据不断添加到B列中,遇到空数据直接跳出,不复制。(功能放到一个命令按钮里面)

Dim toAdd As Boolean, uniqueNumbers As Integer, i As Integer, j As Integer
Cells(1, 2).Value = Cells(1, 1).Value
uniqueNumbers = 1
toAdd = True
'第一个数字总是'唯一的',直接拷贝过去
For i = 2 To Sheet1.Range("a65536").End(xlUp).Row
'Sheet1.Range("A65536").End(xlUp).Row意思是从A65536向上找到最后一个非空单元格,返回其行号
    If Cells(i, 1).Value <> "" Then
    '如果单元格非空,则继续
        For j = 1 To uniqueNumbers
        '遍历新的一列数据,判断是否重复,重复则false to add,不重复跳出
            If Cells(i, 1).Value = Cells(j, 2).Value Then
                toAdd = False
            End If
        Next j
        '跳出的都是true to add的,拷贝过去即可,拷完一个新列行号增一
        If toAdd = True Then
            Cells(uniqueNumbers + 1, 2).Value = Cells(i, 1).Value
            uniqueNumbers = uniqueNumbers + 1
        End If
        toAdd = True
    End If
Next i
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

这里写图片描述
拓展这个案例只是删除一个单独列的重复数据,如果我们根据这一个key(主键)列删除其所带着的一行数据也可以修改出来

  • 顺序排序
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
        End If
    Next j
Next i
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

这里写图片描述
这里写图片描述

  • 随机排序
Dim tempString As String, tempInteger As Integer, i As Integer, j As Integer

For i = 1 To 5
    Cells(i, 2).Value = WorksheetFunction.RandBetween(0, 1000)
Next i

For i = 1 To 5
    For j = i + 1 To 5
        If Cells(j, 2).Value < Cells(i, 2).Value Then
            tempString = Cells(i, 1).Value
            Cells(i, 1).Value = Cells(j, 1).Value
            Cells(j, 1).Value = tempString

            tempInteger = Cells(i, 2).Value
            Cells(i, 2).Value = Cells(j, 2).Value
            Cells(j, 2).Value = tempInteger
        End If
    Next j
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

这里写图片描述
这里写图片描述

  • 背包问题
    xlsm文件
    链接:https://pan.baidu.com/s/1npbfb4owo_UMXl_z_fOoeg 密码:hgwo
    定义:给定一组项目,每个项目都有一个权重和一个值,确定要包含在一个集合中的项目,以使总值尽可能大,并且总权重小于给定限制。它的名字来源于受固定尺寸背包约束的人所面临的问题,并且必须填写最有用的物品。

例如:5个项目的权重,数值和限制已给定。

这里写图片描述

Dim limit As Double, weight As Double, value As Double, totalWeight As Double, maximumValue As Double
Dim i, j, k, l, m As Integer

Dim weighti, weightj, weightk, weightl, weightm As Double
Dim valuei, valuej, valuek, valuel, valuem As Double

limit = Range("D6").value
maximumValue = 0

weighti = Range("B2").value
weightj = Range("C2").value
weightk = Range("D2").value
weightl = Range("E2").value
weightm = Range("F2").value

valuei = Range("B3").value
valuej = Range("C3").value
valuek = Range("D3").value
valuel = Range("E3").value
valuem = Range("F3").value

For i = 0 To 1
    For j = 0 To 1
        For k = 0 To 1
            For l = 0 To 1
                For m = 0 To 1
                    weight = weighti * i + weightj * j + weightk * k + weightl * l + weightm * m
                    value = valuei * i + valuej * j + valuek * k + valuel * l + valuem * m
                    If value > maximumValue And weight <= limit Then
                        Range("B4").value = i
                        Range("C4").value = j
                        Range("D4").value = k
                        Range("E4").value = l
                        Range("F4").value = m
                        totalWeight = weight
                        maximumValue = value
                    End If
                Next m
            Next l
        Next k
    Next j
Next i

Range("B6").value = totalWeight
Range("B8").value = maximumValue
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

这里写图片描述
8. 宏错误

9. 字符串操作
分离字符串
Dim fullname As String, commaposition As Integer, i As Integer

For i = 2 To 7
fullname = Cells(i, 1).Value
commaposition = InStr(fullname, “,”)

Cells(i, 2).Value = Mid(fullname, commaposition + 2)
Cells(i, 3).Value = Left(fullname, commaposition - 1)
  • 1
  • 2

Next i

10. 日期和时间

MsgBox Now
'新建一个宏,写这样一句就得出当前时间弹出框

11. 事件

12. 数组

13. 函数和子函数

14. 用户窗体

15. ActiveX控件
这里写图片描述
共有74个控件

  • 复选框
If CheckBox1.Value = True Then Range("B4").Value = 1
If CheckBox1.Value = False Then Range("B6").Value = 0
  • 1
  • 2

这里写图片描述这里写图片描述

  • 文本框
    添加俩按钮,一个向文本框录入
TextBox1.Text = "数据录入成功!"
  • 1

一个清除文本框信息

TextBox1.Value = ""
  • 1

这里写图片描述
这里写图片描述
- 列表框

将列表框链接到单元格A5,设计模式右键单击列表框->属性->LinkedCell填A5
这里写图片描述
设计模式->右键单击列表框->查看代码->Project->ThisWorkbook->左下拉Workbook右Open,填写下列代码对列表框进行添加
这里写图片描述

With Sheet1.ListBox1
    .AddItem "Turkey"
    .AddItem "Tokyo"
    .AddItem "Paris"
End With
  • 1
  • 2
  • 3
  • 4
  • 5

清除(我把清除都放在了cls按钮里,方便)

ListBox1.Clear
  • 1

效果
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

  • 组合框
    操作和列表框基本相同
  • 选项按钮
    实验到这里,已经很简单了,不过多解释
If OptionButton1.Value = True Then Range("A3").Value = 233
  • 1
If OptionButton2.Value = True Then Range("A6").Value = 666
  • 1

这里写图片描述
这里写图片描述

  • 数值调节按钮
Range("A5").Value = SpinButton1.Value
  • 1

属性设置
这里写图片描述
效果
这里写图片描述
这里写图片描述

16.应用对象

  • 将excel文件内容写到本地csv文件
Dim myFile As String, rng As Range, cellValue As Variant, i As Integer, j As Integer

myFile = Application.DefaultFilePath & "\sales.csv"
Set rng = Selection

Open myFile For Output As #1

For i = 1 To rng.Rows.Count
    For j = 1 To rng.Columns.Count
        cellValue = rng.Cells(i, j).Value

        If j = rng.Columns.Count Then
            Write #1, cellValue
        Else
            Write #1, cellValue,
        End If
    Next j
Next i
Close #1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

这里写图片描述

  • 从txt文件读取数据
Dim myFile As String, text As String, textline As String, posLat As Integer, posLong As Integer
myFile = "C:\Users\Randolph\Desktop\testWriteIn.txt"
'myFile = Application.GetOpenFilename()

Open myFile For Input As #1
    Do Until EOF(1)
        Line Input #1, textline
        text = text & textline
    Loop
Close #1

posLat = InStr(text, "ID")
posLong = InStr(text, "密码")

Range("A1").Value = Mid(text, posLat + 4, 4)
'后一个数是找到数据的长度,数据可以包括空格;前一个数是拷贝数据的起始字符位置,即从这行的第第个字符开始复制
'当然,每行第一个是0
Range("A2").Value = Mid(text, posLong + 4, 13)
'这里实验发现一个汉字算一个字母,若第二个数长于我们所需要的数据,将把下次出现的其他数据录入进来
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

用到的测试txt文件信息:

Some information here..

ID: aPig
密码: isAkindOfHAHA

Some more information here..
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里写图片描述

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约