明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1930|回复: 6

VBA代码的奇怪错误在哪

[复制链接]
发表于 2010-6-8 11:47:00 | 显示全部楼层 |阅读模式

我编写了段代码,想把EXCEL中的文字提取到CAD中,并设为多行文字,对齐方式为正中,但是奇怪的是执行后,最后一列(设计渠底)字高个对齐方式没有变,烦请高人指点啊

 

Sub uu()
Dim insPnt(0 To 2) As Double
 On Error Resume Next  '这句话很重要
      ' 连接Excel应用程序
       Dim xlApp As Excel.Application
     Set xlApp = GetObject(, "Excel.Application")
     If Err Then
         MsgBox " Excel 应用程序没有运行。请启动 Excel 并重新运行程序。"
         Exit Sub
     End If
     Dim xlSheet As Worksheet
     Set xlSheet = xlApp.ActiveSheet
zg = 2.5
For p = 1 To 6
     txtStr = xlSheet.Cells(1, p)
      txtHeight = 25
      insPnt(0) = 100: insPnt(1) = 100 - p * 15 + 8.5: insPnt(2) = 0
      mtextObj.AttachmentPoint = 5
      mtextObj.height = 2 * zg
      Set mtextObj = ThisDrawing.ModelSpace.AddMText(insPnt, txtHeight, txtStr)
         Next p
End Sub

 

电子表格里的第一行是如下内容

 

桩号

 

现状渠顶 设计渠顶 设计水位 现状渠底 设计渠底
           
           
           
           
           

 

 

发表于 2010-6-8 19:02:00 | 显示全部楼层

For p = 1 To 6
     txtStr = xlSheet.Cells(1, p)
      txtHeight = 2 * zg
      insPnt(0) = 100: insPnt(1) = 100 - p * 15 + 8.5: insPnt(2) = 0
      Set mtextObj = ThisDrawing.ModelSpace.AddMText(insPnt, txtHeight, txtStr)
      mtextObj.AttachmentPoint = 5

Next p

 楼主| 发表于 2010-6-9 15:12:00 | 显示全部楼层
谢谢,就是把字高属性语句放到最后。可是为何放在前面就出现最后一行没有执行字高呢。百思不得其解。不过还是谢谢你啊
发表于 2010-6-9 16:06:00 | 显示全部楼层

按你的代码,进入FOR循环时,先设置mtextObj的对正和字高属性,可这时mtextObj对象还没有创建,mtextObj还不存在,这时修改其属性的两行语句一定会出错.但你在代码的最前面有一行On Error Resume Next,尽管你的本意是用这个错误处理代码来检测EXCEL程序是否运行,但到了循环语句时,这一句还在发挥作用,程序不会报错而是越过出错的两行代码向下运行到创建mtextObj这一行.创建一个mtextObj对象后程序又回到循环体的前面,设置mtextObj的对正和字高属性,这次不会出错了,但这次被设置属性的是第一次创建的mtextObj对象,然后再创建第二个mtextObj,然后再回去......直到创建最后一个mtextObj后直接退出循环.最后一个mtextObj并没有修改属性.

如果你在进入循环体之前,加一行On Error Goto 0,让前面的On Error Resume Next失效,你就会发现修改属性的两行放在这里是错误的.

所以我对你的代码做的修改主要就是先创建对象,再修改属性,仅此而已.

另外,你在创建对象时使用的字高和后面修改的字高不一致,好像没有必要吧?所以对此也一并做了修改,在创建对象时直接按要求指定字高,而不再修改字高属性.

 

 楼主| 发表于 2010-6-9 16:40:00 | 显示全部楼层

谢谢楼上的帮助。

但是addmext(坐标,多行文字宽度,文字)

我定义txtheight=25是为了不重新定义变量

 

Set mtextObj = ThisDrawing.ModelSpace.AddMText(insPnt, txtHeight, txtStr)

 

mtextObj.height = 2 * zg  ‘这一句才是为多行文字赋字高属性啊。

不知道对不对,请多指教

发表于 2010-6-10 20:25:00 | 显示全部楼层

对不起,是我搞错了.呵呵,我把单行文字和多行文字搞混了.

你是对的,为多行文字赋予字高应该有.

发表于 2010-10-22 10:10:00 | 显示全部楼层
取之于明 用之于明 
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 20:47 , Processed in 0.150152 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表