您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 小白自学ExcelVBA道路坐标高程计算程序流程
小白自学ExcelVBA道路坐标高程计算程序流程1声明1.1本人是个工作时间不长测量施工员。1.2听说想轻松愉快的干好测量得学门编程,又听说ExcelVBA是个简单的可视化的常用的……1.3本人很懒,面对厚厚的全是“昏天暗地”代码的ExcelVBA教科书籍,实在是没心没力。其实俺还是懂点儿VB编程的(学校学过“=”是赋值,if、while、end的意思,嘿嘿,还有画窗体图框,其他的就都还给老师了)。1.4谷歌、度娘,是咱的好帮手。1.5仰望的存在,神一般的存在,无私的化身!道路中边桩坐标计算程序120424.xls(王中伟”教授”QQ:595077)曲线坐标计算程序VBA4.6.xls(陈超”中铁”QQ:295188316)陈师傅的VBA代码乍一看感觉比王老师的让人头痛,怎么说咱们也是个有理想有目标的人,要啃就啃硬骨头!就选~~~嘿嘿~~~王老师的程序吧!1.6道路中边桩坐标计算程序120424.xls代码获取。王老师、陈师傅担心不懂编程的人,不小心修改代码导致程序错误,设置了vba密码(个人认为),其次我跟他们不熟,没有正大光明的要的密码,于是求助谷歌度娘,这个关于VBA密码破解,于是很不厚道的得到了密码,为了方便本次学习,又很不厚道的把道路中边桩坐标计算程序120424.xls的密码贴出来(df750726),神人勿怪呀!2代码理解ing…我们通过密码打开vba代码窗口,大家可以先把每个表格打开浏览一下代码,是不是感觉很短呀,感觉应该是超级链接的意思,嘿嘿,主要的代码在模块“lx”里,打开下,代码多吧,这就是咱们要肯的骨头。现在咱们冲呀!2.1第一段代码理解貌似第一段代码是定义的意思“定义π值”、'定义桩号点”、“'定义坡段”、“'定义基本曲线”①PublicConstPIAsDouble=3.14159265358979谷歌翻译:PublicConstPIAsDouble公共常量PI作为双精度浮点型百度百科:双精度浮点数双精度浮点数(Double)用来表示带有小数部分的实数,一般用于科学计算,用8个字节(64位)存储空间,其数值范围为1.7E-308~1.7E+308,双精度浮点数最多有15或16位十进制有效数字,双精度浮点数的指数用“D”或“d”表示。双精度浮点数科学记数法格式:±aD±c或±ad±c在一些现代的被优化用来进行高速数学计算的处理器上双精度型实际上比单精度的快。所有超出人类经验的数学函数,如sin(),cos(),和sqrt()均返回双精度的值。当你需要保持多次反复迭代的计算的精确性时,或在操作值很大的数字时,双精度型是最好的选择。个人理解:PI是储存数据的符号,把3.14159265358979赋值储存进去,公共常量,意思是大家都可以调用的固定值,双精度浮点型应该是规定PI能储存的数据类型(什么整数啦、日期啦、小数啦、文字啦之类的),还有储存量(估计双精度比单精度储存的多)之类的规定。②PublicTypeStaPoint……EndType谷歌翻译:PublicTypeStaPoint(联系上下文“定义桩号点”应该是StakePoint)公共类型桩号点百度文库:VB中Type语句的功能及用法Type语句只能在模块级使用。使用Type语句声明了一个用户自定义类型后,就可以在该声明范围内的任何位置声明该类型的变量。可以使用Dim、Private、Public、ReDim或Static来声明用户自定义类型的变量。在标准模块中,用户自定义类型按缺省设置是公用的。可以使用Private关键字来改变其可见性。而在类模块中,用户自定义类型只能是私有的,且使用Public关键字也不能改变其可见性。在Type...EndType块中不允许使用行号和行标签。用户自定义类型经常用来表示数据记录,记录一般由多个不同数据类型的元素组成。个人理解:①号句定义了常量的代码(经常用π值,就把3.1415固定到PI里,方便调用)。②使用Type语句分段(StaPoint/桩号点、Slope/坡段、CurveSec/基本曲线)、批量自定义变量的代码,这几段都是定义的双精度,之所以分段,联系下文,估计是方便经常调用。值得注意的是CurveSec/基本曲线定义这一段,对于ST_Sta/起点、EN_Sta、/终点的定义,调用了前面StaPoint/桩号点的定义,两句话,直接把基本曲线所需要使用参数代号都定义了,呵呵,这就是Type语句吧,可以相互调用,方便定义!2.2咦??????这个分割线是怎么回事?为什么会跟下一段的SubAuto_Open().....EndSub分开呢?点一下SubAuto_Open().....EndSub右上角的“声明”就变成“Auto_Open”,声明什么意思?Auto_Open又是什么意思?点击声明的下拉列表,好家伙,全是程序(sub)代号,应该是起到一个引所目录的作用吧!触发某段代码运行.....对于上面的SubAuto_Open()......EndSub代码的功能的功能聪明的我已经猜到,是打开Excel表格,就会跳到标签为“欢迎”的页面。③Sub…….EndSub谷歌翻译:Sub…….EndSub(联系上下文“定义桩号点”应该是StakePoint)程序结束程序百度搜索:Sub…….EndSub语句的功能及用法语法[Public|Private]Subname[(arglist)][statements][ExitSub][statements]EndSubSub语句的语法包含以下部分Public表示Sub过程可被所有Script中的所有其他过程访问。Private表示Sub过程只可被声明该过程的Script中的其他过程访问。NameSub的名称,遵循标准变量命名约定。Arglist代表在调用时要传递给Sub过程的参数的变量列表。用逗号隔开多个变量。Statements在Sub过程主体内所执行的任何语句组。用户自定义类型经常用来表示数据记录,记录一般由多个不同数据类型的元素组成。在Sub过程中使用的变量分为两类:一类是在过程内显式声明的,另一类则不是。在过程内显式声明的变量(使用Dim或等效方法)总是局部变量。对于那些没有在过程中显式声明的变量也是局部的,除非在该过程外更高级别的位置显式地声明它们。Sub过程是包含在Sub语句和EndSub语句中的一系列VisualBasic语句。每次调用过程时都执行过程中的语句,从Sub语句后的第一个可执行语句开始,到遇到的第一个EndSub、ExitSub或Return语句结束。个人理解:Sub语句中sub作为开头,是让计算机一阅读代码就知道,你执行的是一个程序,而不是默认的定义一些数据,当然要先定义,才能执行,前面的①②代码都是公共定义,是计算机最先执行的,sub里有自己小范围的dim定义。据观察给sub后加名字,名字最后必须是(),至于为什么要加(),别问我,我是小白,我不知道!!!但启动调用程序时,就直接用写名字就行了。2.3一切反动派都是纸老虎丫丫了个呸的!这一层一层的代码都是什么呀!太祖有云,一切反动派都是纸老虎!上去戳他去!行动听指挥,一步一步来!④Dimzy,i,jAsInteger谷歌也没搜到Dim是个啥玩意,就当成定义的意思了,定义zy,i,j为整数类型(Integer),后面还有个定义成字符型(String)的,就是可以储存字母之类的。⑤PM(3,5)DimPM(3,5)AsDouble里出现了个PM(3,5)百度知道:excelvba中PM(3,5)是什么意思?1、cells(行坐标,列坐标)表示一个单元格的位置,如:A1:CELLS(1,1)B2:CELLS(2,2)C2:CELLS(2,3)2、VBA中没有PM()属性,(1)可能是自定义的数组,如:dimPM(10,10)则PM(3,5)就是这个数组的一个元素(2)或是单元格区域,如:setPM=RANGE(B2)则B2为PM(1,1),PM(3,5)就是单元格F4个人理解:DimPM(3,5)AsDouble是定义3×5=15个PM(?,?)数组元素,双精度的,可以使用这十五个PM(?,?)符号进行储存,注意第二个问号前有个空格。⑥WithSheets(平面资料)……EndWith百度知道:VBA中的WITH语句用法及含义通俗点讲with的作用就是简化代码,让代码简洁易懂让你不需要输入重复的内容例如:With[A1].RowHeight=10.ColumnWidth=15EndWith相当于[A1].RowHeight=10[A1].ColumnWidth=15省去了输入很多[A1]也就是说with中以.开头的就相当于WITH后的对象.什么什么什么⑦Rows(6:500).ClearContents谷歌翻译:Rows(6:500).ClearContents行清除内容百度知道:excel的vb中Rows(6:500).ClearContents是什么意思?将第6行到第500行的内容清除。谷歌翻译:Worksheets(Sheet1).Range(A1:G37).ClearContents工作表范围清除内容2.4探索与发现其实就单纯的表格数据计算,所使用的VBA编程知识,是非常非常少的,换个VB编程高手,来看咱们工程坐标计算所使用的代码规则,简直就是加减乘除而已。事实上也是如此,你只要耐心的跟同样小白的我,一起花十几分钟看完这篇流程,你已经有能力看懂88%的代码,并且可以简单的修改应用。传说ExcelVBA可以直接接入CAD….这就要等大家去探索发现了,嘿嘿!!废话少说,还有几段小代码规则,大家再来看看吧!⑧If.Cells(i+2,3)=Then….EndIf如果你连if、while、for这些条件循环语句都不懂的话,那你真比我还小白了,哈哈!!!这段代码并不难,之所以拿出来研究,还是为了消除大家的畏惧心理,嘿嘿!!百度搜索:这个语句可判断IfCells(j,2)=Then这个单元格“Cells(j,2)”是空白单元格吗?如果cells(j,2)为空的话,这时候下一步,这里的双引号是空的意思。下面,好菜上场了,个人感觉这个非常有用的规则,解密了③代码的()问题。⑨ST1=Fwj(PM(1,1),PM(1,2),PM(2,1),PM(2,2))计算方位角乍一看,挺晕,其实呢,首先不要被PM(?,?)、ST1所迷惑,个人感觉,这家伙就是a、b、c、d,好了,言归正传,x=Fwj(a,b,c,d),咦?,Fwj是个什么东东,嘿嘿百度上是搜不到的,我找了一大遍,发现sub里有个Fwj⑩FunctionFwj(x1,y1,x2,y2)….EndFunction谷歌翻译:Function→函数原来是自定义函数的意思呀!这里()里不再是空的了,转念一想,我们在表格里不是经常使用一些简单的公式么?什么“=SUM()求和”、“DEGREES()弧度转角度”、“Pi()”都是有括号么?在代码规则里括号里有东西,估计也是直接把括号里的东西定义了,可以直接使用。嘿嘿,我发现,在宏里定义了的函数可以在表格里找到嘿嘿,转念一想,哈哈,这TMD以后方便了,自定义函数真是个好东西,网上应该有很多很不错的自定义函数,大家搜索一下,一定有意想不到的收获。呵呵,个人感觉ExcelVBA就是个大函数,我们只不过是把A1、B2之类的单元格使用代码替换了一下,附加个函数运算就得了,哈哈!2.5又一个的小问题傻了吧!SubGetStaCoor(secAsCurveSec,staAsStaPoint)这是神马东东,嘿嘿,只不过是把sec跟sta这两个代符直接在括号里定义了,没什么大不了的。又傻了吧!LL=sec.EN_Sta.Mile-sec.ST_Sta.Mile狗日的这又是神马东西?嘿嘿,不要着急,这些东西,你都见过的,只不过用“.”给连接起来了,感觉应该是一层一层的递归查找的意思,你看,先把sec使用以前定义好的CurveSec/基本曲线定义,这样sec里就有了EN_Sta之类的,同理,就有了Mile之类的。至此我
本文标题:小白自学ExcelVBA道路坐标高程计算程序流程
链接地址:https://www.777doc.com/doc-5535200 .html