Excel VBA设计测绘工程表格从入门到入土
马上就要毕业了,最近一直做的这个,介绍一下个人的感受与经验,希望以后的大家少走弯路。
我个人使用的电脑是win 10家庭版,office 版本2016。
从第一个宏程序入门
第一步、新建一个xlsx工作簿
第二部、文件-选项-自定义功能区中,把右边一列中的开发工具给勾上,如下图:
第三步、点击录制宏(在菜单里面或者窗口左下角)
第四步、执行操作
例如移动几下窗口,选几个表格、输入几个字符、输入公式、调一下字体格式等等。
确定后录制键就会变成停止录制键,结束后点停止运行即可
第五步、运行宏
新建一个空白工作表(sheet2)
点宏列表的键
找到你录的宏
点执行
所有操作就会在这里出现
第六步、保存
得另存为xlsm文件,才能保存使用的宏功能
第七步、查看代码
在宏界面点编辑,会弹出VBE界面
可以看到几步简单的操作,代码却很长 (markdown 中的vb高亮关键词是vbnet)
简单分析一下VB的代码,和
Sub 宏1() ' 宏的开头 (Sub + 名字 + 括号)
'
' 宏1 宏
' VB中的注释是在句头加个单引号,三个单引号是段落注释
'
Range("A1:G13").Select ' range对象
Selection.EntireColumn.Delete ' 整列删除
Application.Left = 157.75
Application.Top = 178 '移动窗口
Range("A2").Select
ActiveCell.FormulaR1C1 = "打字1" ' 打字
Range("B2").Select
ActiveCell.FormulaR1C1 = "111" ' 数字
Range("C2").Select
ActiveCell.FormulaR1C1 = "222"
Range("A3").Select
ActiveCell.FormulaR1C1 = "=R[-1]C[1]/R[-1]C[2]"
' 输入公式,公式使用双引号括住的整体,如 "= 3/2" 需要引用的时候可以直接用绝对位置,如"=B2/C2", 默认公式是相对位置,格式为R[a][b],a为向下,b为向右,自行体会
Range("B3:C3").Select
Range("C3").Activate
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge ' 合并并居中
' 合并后的单元格要再选中的话建议用范围表示,或者用最上最左的一个单元格来运算,其他的会报错
Range("A3:C4").Select
Range("A4").Activate
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
' 给a3:c4范围加表格全部边框,excel共6种边框,上下左右内部垂直内部水平,自行体会
Range("A5:A6").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range("B5").Select
ActiveCell.FormulaR1C1 = "2.22222"
Range("B5").Select
Selection.Copy
Range("B6").Select
ActiveSheet.Paste ' 复制粘贴,不同大小的合并单元格不能粘贴
Range("D1").Select
Application.CutCopyMode = False ' 不知道啥意思
ActiveCell.FormulaR1C1 = "1"
Range("D2").Select
ActiveCell.FormulaR1C1 = "2"
Range("D3").Select
ActiveCell.FormulaR1C1 = "3"
Range("D1:D3").Select
Selection.AutoFill Destination:=Range("D1:D11"), Type:=xlFillDefault
Range("D1:D11").Select ' 填充柄
Range("A5:A6").Select
ActiveCell.FormulaR1C1 = "自定义格式"
Range("B6").Select
Selection.NumberFormatLocal = "000."" ""00"". ""00?"
' 自定义格式,显示成度分秒(详见前一篇博客)
Range("C5").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=R[1]C[-1]"
Range("C5").Select
Selection.NumberFormatLocal = "G/通用格式"
Range("D11").Select
End Sub ' 结束宏
第八步、运行代码
把鼠标放到宏的代码间点一下,表示目前的宏是 宏1 ,点击f5就可以运行调试了。
第九步、其他常用语句
由于一般用不到输出对象,但还是说一下把
' 定义变量
' dim 变量名 as 数据类型 '声明一个数据类型为xx的变量
' public 变量名 as 数据类型 '声明一个数据类型为xx的公共变量
' 例如
Public target_num As Integer
Public target_beizhu As String
' private 变量名 as 数据类型 '声明一个数据类型为xx的私有变量
' static 变量名 as 数据类型 '声明一个数据类型为xx的静态变量
' 输出
' 立即窗口:
Debug.Print "\nHello, World!"
' msgbox:
MsgBox "Hello, World!"
' 函数
' 例1
Function d() As Integer
d = 40
End Function 返回的就是与函数同名的变量d
' 例2
Function LastRow() As Long
' 找出表格最后一行
'
Dim ix As Long
ix = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
LastRow = ix
End Function
' 引用
' 定义了一个宏:
Sub 引用()
Debug.Print "Hello, World!"
MsgBox "Hello, World!"
End Sub
' 用一个宏来引用它
Sub helloworld2()
Debug.Print "调用宏 引用()"
Call 引用
Debug.Print "调用成功"
Debug.Print "调用函数 d()"
Call d
Debug.Print "调用成功"
End Sub
如何设计电子表格
Excel的xlsx类文件叫做工作簿文件,文件里面的sheet叫工作表。
Excel 有很多类文件,不仅支持本地,也支持在线
如何使用VBA开发应用实际
应用是将逻辑代码和实际功能操作相整合起来,本人主要是通过将VBA宏函数嵌入到开发界面来实现功能模块化:
主要分为如下几个步骤:
如何编辑VBA代码
本章主要介绍如何从代码层面进行代码的编写。
在开发工具选项页中单击Visual Basic即可到达VBE(editor)界面。
这个界面非常的不友好,下面介绍如何进行代码的编写。
一、了解界面
例如在视图菜单中加入我们所常用的debug窗口
字体和颜色在这里调: VBE - 工具 - 选项:
二、组织结构
在左侧的project窗口可以了解整个文件的代码层次
三、如何添加代码和窗口
在本工程的范围内任意位置右键即可插入文件:
可以看到一共有窗体、模块、类模块三个选项;窗体即包含了界面设计和响应事件的窗体文件,模块即普通空文本,可以储存函数与变量,类模块本质上也是一个代码文本文件,只是用来写类。
Excel 工作簿文件是一种集成性文件包,所有的代码都可以存储在同一个xlsm文件内部,第三方的编辑器使用起来不是很方便,后面也会说到,不过是通过导入和导出也是可以用的。将xlsm文件的后缀改成zip,再打开可以看到内部是由多个文件组成的,其中也可以看到我们所创建的代码文件。
四、编辑代码
我们点开一个模块文件,一个文件内理论上是可以写入无数个宏、函数、各种语句的,先从一些简单的语句写起
1、第一个手写宏
在模块一的文件内部写入如下代码,所有sub开头的都是宏,可以在整个文件内被随时搜索到,调用到。
Sub 第一个宏()
Debug.Print "第一个宏" '英文单引号是注释,保存后会变绿色
End Sub
点击运行或者f5,即可在立即窗口中看到输出结果
VBA中的输出通常和表格相关联,即可改写成如下代码,即可发现表格的第一行第一列的内容变了。
Sub 第一个宏()
Range("A1").Select
ActiveCell.FormulaR1C1 = "第一个宏"
End Sub
2、第二个宏
紧接上一个宏,我们再写个sub - end sub的结构,保存后,它会自动给我们分隔开。代码如下:
Sub 第二个宏()
Range("B1").Select
ActiveCell.FormulaR1C1 = "第二个宏"
End Sub
在存在多个宏时,系统会默认运行你输入光标所在的那个宏,如果没光标的话,会跳一个弹窗让你选,运行结果如下。
3、函数
在上一个函数的
五、调用代码
六、编辑窗口
七、调用窗口
八、其他
最后,VBE的次世代界面很不友好,建议大家自己配一个文本编辑器,保护以下眼睛。
写在后面
东西比我想得要多一点,目前就先写到这里了吧,有问题可以留言或者去我的github 留 issue,我会尽力回答的,至于回复时间,就随缘吧
最后祝大家学业有成,事业顺利
Extra
粘点自己作的一些笔记
excel 函数
常用语句
读物推荐
比较基础一点的是一个老外写的,Excel 宝典 和VBA编程宝典,老多页了,写的很直白,想要实现的功能不知道怎么做可以对着目录查一下,百度云链接如下:
链接:https://pan.baidu.com/s/1FmC0MK1WKwtRnWcJSaxiaA
提取码:9yr4
另外更多的学术内容直接去知网上当就行了,这类论文还挺多的
最后推荐几个挺方便的网站,推荐多用用微信的搜一搜,有时候都能搜到资源。
http://www.gb99.cn/(免费规范,不太全)
http://www.bzfxw.com/(有免费的)
http://www.downcc.com/(下文档,不太全)
http://teyilai.cn/(混进了什么奇怪的东西)
http://www.yunsuan.info/(矩阵计算器)