乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 99|回复: 6

VBA代码的奇怪错误在哪

[复制链接]

29

主题

128

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
244
发表于 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

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



桩号

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


回复

使用道具 举报

0

主题

58

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 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
回复

使用道具 举报

29

主题

128

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

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

使用道具 举报

0

主题

58

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 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失效,你就会发现修改属性的两行放在这里是错误的.
所以我对你的代码做的修改主要就是先创建对象,再修改属性,仅此而已.
另外,你在创建对象时使用的字高和后面修改的字高不一致,好像没有必要吧?所以对此也一并做了修改,在创建对象时直接按要求指定字高,而不再修改字高属性.

回复

使用道具 举报

29

主题

128

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
244
发表于 2010-6-9 16:40:00 | 显示全部楼层
谢谢楼上的帮助。
但是addmext(坐标,多行文字宽度,文字)
我定义txtheight=25是为了不重新定义变量

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

mtextObj.height = 2 * zg  ‘这一句才是为多行文字赋字高属性啊。
不知道对不对,请多指教

回复

使用道具 举报

0

主题

58

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2010-6-10 20:25:00 | 显示全部楼层
对不起,是我搞错了.呵呵,我把单行文字和多行文字搞混了.
你是对的,为多行文字赋予字高应该有.
回复

使用道具 举报

2

主题

10

帖子

1

银币

初来乍到

Rank: 1

铜币
18
发表于 2010-10-22 10:10:00 | 显示全部楼层
取之于明 用之于明
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-1 07:41 , Processed in 0.710499 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表