




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Excel VBA在工程测量上的应用Excel是大家很熟悉的办公软件,相信大家在工作中经常使用吧。在测量工作中,你是否感觉到有很不方便的时候?比如,计算一个角度的三角函数值,而角度的单位是60进制的,此时,你一定感到很无奈,因为,Excel本身无法直接计算60进制的角度的三角函数!还有,如果你的工作表中有了点坐标值(二维或者三维),要在CAD中展绘出来,怎样才能又快又直接?不然,就只有拐弯摸角了,很痛苦啊!其实,只要对 Excel进行一些挖掘,就可以发现Excel的功能我们还没有好好的利用呢。Excel本身提供了强大的二次开发功能,只要我们仔细的研究,没有什么能难倒我们的。下面,好好笔者将带你走近Excel,认识它的强大的二次开发环境VBAIDE,用它来解决上面所提到的问题,就非常容易了。初识VBAIDE首先,你必须懂得一些简单的VB编程常识。如果不懂就只有通过其他的途径去学习了。但用不着深入的研究,只要静下心来,几个小时就可以了。打开Excel,按Alt+F11即进入VBAIDE,学过VB的人一看就知道那就是熟悉的VB界面。下面看看如何定义一个函数,然后利用它来解决60进制的角度的三角函数计算问题。在菜单上依次点击插入-模块,然后输入如下代码Public Const pi = 3ublic Function DEG(n As Double)Dim A As Double, B As Double, C As Double, D As Double, E As Double, F As Double, G As Double, KA As DoubleD = Abs(n) + 0.000000000000001F = Sgn(n)A = Int(D)B = Int(D - A) * 100)C = D - A - B / 100DEG = F * (A + B / 60 + C / 0.36) * pi / 180End Function这样,就定义了一个名字叫DEG的函数,它的作用就是转换60进制的角度为Excel认识的弧度。编辑完后按Alt+Q即返回Excel,再在某一单元格输入=sin(deg(A1)(A1既可以是单元格的值,也可以是输入的角度值),回车,哈哈,怎么样?结果出来了吧?你可以用计算器检验一下是否正确。如果出现#NAME?那就要设置一下安全设置。依次点工具-宏-安全性,在安全级选项卡上选择“中”或者“低”,然后关闭后重新打开就可以了,以后只要是60进制的角度,就用它转换,非常方便哦。工程测量中,经常碰到导线的计算,如果手头没有平差计算程序就只有手工计算了,这时候你曾经想过编个小程序来计算?其实,这很简单,笔者在宛坪(上海至武威)高速公路上做测量监理,因为有大量的导线需要复核,故编写了一个附合导线计算程序,代码很简单,但很实用。下面是该程序的代码:Sub附合导线计算()Dim m As Integer, n As Integer, ms As Double, gg As Double, sht As Object, xx As Double, yy As Double, S As DoubleSet sht = ThisWorkbook.ActiveSheetDo While sht.Cells(m + 3, 4) m = m + 1LoopFor n = 3 To m + 2ms = DEG(ms) + DEG(sht.Cells(n, 4)ms = RAD(ms)S = S + sht.Cells(n, 3)Nextms = DEG(ms)gg = RAD(DEG(sht.Cells(3, 5) + ms - DEG(sht.Cells(3 + m, 5) - pi * m)xx = 0: yy = 0For n = 4 To m + 2方位角sht.Cells(n, 5) = RAD(DEG(sht.Cells(n - 1, 5) + DEG(sht.Cells(n - 1, 4) - pi - DEG(gg) / m)坐标增量sht.Cells(n, 6) = Format(sht.Cells(n - 1, 3) * Cos(DEG(sht.Cells(n, 5), #.#)sht.Cells(n, 7) = Format(sht.Cells(n - 1, 3) * Sin(DEG(sht.Cells(n, 5), #.#)坐标增量和xx = xx + sht.Cells(n, 6)yy = yy + sht.Cells(n, 7)Nextxx = xx + sht.Cells(3, 10) - sht.Cells(m + 2, 10)yy = yy + sht.Cells(3, 11) - sht.Cells(m + 2, 11)sht.Cells(m + 4, 5) = = & Format(gg, #.#)sht.Cells(m + 4, 6) = X= & Format(xx, #.#)sht.Cells(m + 4, 7) = Y= & Format(yy, #.#)sht.Cells(m + 4, 3) = S= & Format(S, #.#)sht.Cells(m + 4, 9) = S= & Format(Sqr(xx * xx + yy * yy), #.#)sht.Cells(m + 4, 10) = 相对精度 1/ & Format(S / Sqr(xx * xx + yy * yy), #)For n = 4 To m + 2sht.Cells(n, 8) = Format(xx / S * sht.Cells(n - 1, 3), #.#)sht.Cells(n, 9) = Format(yy / S * sht.Cells(n - 1, 3), #.#)NextFor n = 4 To m + 1sht.Cells(n, 10) = sht.Cells(n - 1, 10) + sht.Cells(n, 6) - sht.Cells(n, 8)sht.Cells(n, 11) = sht.Cells(n - 1, 11) + sht.Cells(n, 7) - sht.Cells(n, 9)Next Columns(F:K).Select Selection.NumberFormatLocal = 0.000_ End SubPublic Function RAD(Nu As Double) As DoubleDim A As Double, B As Double, C As Double, D As Double, E As Double, F As Double, G As Double, p As DoubleD = Abs(Nu)F = Sgn(Nu)p = 180# / piG = p * 60#A = Int(D * p)B = Int(D - A / p) * G)W = BC = (D - A / p - B / G) * 20.62648062RAD = (C + A + B / 100) * FEnd Function值得注意的是,前面提到的DEG函数别忘记加进去。如果自己定义一个名字叫“计算”的按钮,指定此工具的宏为“单一附合导线计算”,那么,只要按下面的格式输入原始数据(斜体是输入的),点“计算”就可以得到计算结果了。所有的过程都是自动的,无须再手工填写,是不是很方便?下面我们就来解决上面提到的与CAD的连接和通讯问题。进入VBAIDE,按工具-引用,找到可使用的引用,在“AutoCAD2000类型库”的左边打钩,点确定就行了。在模块中输入以下代码:Global Sheet As Object, acadmtext As acadmtext, fontHight As Double Global xlBook As Excel.WorkbookGlobal p0(2) As Double, p1(2) As Double, p2(2) As DoubleGlobal acadApp As AcadApplicationGlobal acadDoc As AcadDocumentGlobal acadPoint As acadPoint Global number As Integer Public Type pt n As Integer pt(2) As DoubleGlobal pt() As pt Global text1 As AcadText Global CAD As Object Global p(2) As Double, i As Integer, j As Integer Global h As Integer, l As IntegerPublic Function Get_ACAD(Dwt As String) As Boolean Dim YER As Integer On Error Resume Next Set acadApp = GetObject(, AutoCAD.Application) If Err Then Err.Clear Set acadApp = CreateObject(AutoCAD.Application) If Err Then MsgBox Err.Description On Error GoTo 0 Get_ACAD = False Exit Function End If End If On Error GoTo 0Set acadDoc = acadApp.ActiveDocument acadApp.Visible = True Get_ACAD = True Dim typeFace As String Dim Bold As Boolean Dim Italic As Boolean Dim charSet As Long Dim PitchandFamily As Long acadDoc.ActiveTextStyle.GetFont typeFace, Bold, Italic, charSet, PitchandFamilyacadDoc.ActiveTextStyle.SetFont 宋体, Bold, Italic, charSet, PitchandFamilyEnd FunctionSub 显示对话框()Form1.Show (0)End SubPublic Function Draw_Point(Point() As Double) As acadPoint Set Draw_Point = acadDoc.ModelSpace.AddPoint(Point) Draw_Point.UpdateEnd FunctionPublic Sub Set_layer(s As String) Dim layerObj As AcadLayer Set layerObj = acadDoc.Layers.Add(s) acadDoc.ActiveLayer = layerObjEnd Sub再按以下模式做个对话框:窗体的名字就叫“Form1”双击“展点”按钮,输入以下代码:Dim p0(2) As Double, p1(2) As Double, p2(2) As DoubleDim T1 As Double, T2 As Double, T3 As Double, T4 As DoublePublic ne As Integer, sp As Single, cz As SingleCall Get_ACAD()Dim txt As AcadTextDim la As AcadLayerFor Each Layer In acadDoc.ModelSpaceNextCall Set_layer(zdh)Set Sheet = ThisWorkbook.ActiveSheetDim i As IntegerDo While Sheet.Cells(i + 1, 3) Or Sheet.Cells(i + 1, 1) If Sheet.Cells(i + 1, 3) = Or Sheet.Cells(i + 1, 4) = Then GoTo IIWith Sheetp1(0) = .Cells(i + 1, 3).Valuep1(1) = .Cells(i + 1, 4).Valuep1(2) = .Cells(i + 1, 5).ValueEnd Withp(0) = p1(0)p(1) = p1(1)Call Set_layer(ZDH)Call Draw_Point(p1) fontHight = TextBox5.ValueIf Cells(i + 1, 2) = Then GoTo ooSet txt = acadDoc.ModelSpace.AddText(Cells(i + 1, 2), p, fontHight)txt.Color = acMagentaoo:If Cells(i + 1, 5) = Then GoTo IISet_lay
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人工智能开发工程师中级面试模拟题与答案详解
- 2025年黄浦区社区工作者招聘考试笔试试卷【附答案】
- 2025年美容美发师实操模拟题及答案
- 中小学教学课件案例
- 2025年物资储备管理局招聘面试中的团队合作问题解析与应对技巧
- 2025年初中数学特岗教师招聘考试备考策略
- 2025年自动化生产线操作工面试指南与预测题
- 2025年金属材料加工技术中级考试要点解析
- 2025年山东省聊城市高考语文三模试卷
- 野村-中国医疗保健:跨国公司2025年第二季度中国业务总结 China healthcare MNCs2Q25 China results summary
- 骨折内固定术术前宣教
- 毛振明《体育教学论》(第3版)配套题库【课后习题+专项题库】
- 集团公司内部资金调剂管理办法
- 思想道德与法治课件:专题五在实现中国梦的实践中放飞青春梦想
- 新人教A必修一《集合》课件
- 复用器械处理流程
- 静安沉恒 沉子恒
- GB/T 23510-2009车用燃料甲醇
- GB/T 14216-2008塑料膜和片润湿张力的测定
- 警械使用课件
- 人教版小学三年级英语上册期中考试试卷
评论
0/150
提交评论