乐筑天下

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

VB.NET调用CAD出现下面问题,麻烦高手解答

[复制链接]

10

主题

25

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2012-7-17 00:40:00 | 显示全部楼层 |阅读模式
调用的时候出现错误,如图所示,麻烦高手解答
附上我的代码:

ytngcpitswx.jpg

ytngcpitswx.jpg


之前下面的AcadApp定义是.Application下面Acaddoc一样,按照书上的要求,但是看到一个帖子(我没有发链接权限,麻烦高手百度“”如何使VB 开发的程序不依赖于CAD 的版本”是JXCAD论坛里面的一个帖子)这样说的,我就这样做了,没什么问题,但是就是死活到图中那块过不去,麻烦版主、高手帮我看看,程序到底问题出在哪?
Dim acadApp As Object
     Dim acadDoc As Object
     Dim myExcel As New Excel.Application
     Dim MTextStr() As String '第i文本字符串
     Dim MTextStrX() As Double '第i文本字符串的X坐标
     Dim MTextStrY() As Double '第i文本字符串的Y坐标
     Dim MTextStrID() As Long '第i文本字符串的ID号
     Dim MTextStrFt As String 'MText文本字符串的格式代码
     Dim NumberofMTextStr As Integer '文本字符串数目
     Dim R() As Double '第i文本字符串位于第R行
     Dim C() As Double '第i文本字符串位于第C列
     Dim ColumsX() As Double '明细表首个最大列所在行各文本字符串的X坐标
     Dim Colums As Integer '明细表列数
     Dim MtextHeight As Double '文字高
     Dim LeftLowerPoint As Object '明细表左下角坐标
     Dim RightUpperPoint As Object '明细表右上角坐标
     Dim i, j As Integer
     Dim mydb As dao.Database '数据库对象
     Dim Cell(200, 10)  '明细表各单元格文本字符
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
         Dim AcadApp As AcadApplication
         Dim AcadDoc As AcadDocument
         AcadApp = Nothing
         AcadDoc = Nothing
         Call 连接AutoCAD()
     End Sub
     Sub 连接Excel()
         On Error Resume Next
         myExcel = GetObject(, "Excel.Application")
         If Err.Number Then
             Err.Clear()
             myExcel = CreateObject("Excel.Application")
             If Err.Number Then
                 MsgBox("不能运行Excel,请检查本机是否安装了Excel软件!")
                 Exit Sub
             End If
         End If
         myExcel.Visible = True
         AppActivate(myExcel.Caption)
     End Sub
     Sub 连接AutoCAD()
         If (CheckApplicationIsRun("acad.exe")) Then

            MessageBox.Show("检测到CAD软件已经运行,请点击确定进入程序!")
             Me.Show()
         Else
             MessageBox.Show("请先打开AutoCAD软件,或者本地计算机没有安装CAD软件,请安装后先运行AutoCAD!")
             Me.Close()
         End If
         acadApp.Visible = True '界面可视
         acadDoc = acadApp.ActiveDocument
         AppActivate(acadApp.Caption) '显示AutoCAD界面
     End Sub
     Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
         Me.OpenFileDialog1.Title = "请首先打开AutoCAD装配图文件"
         Me.OpenFileDialog1.Filter = ".dwg|*.dwg"
         If Me.OpenFileDialog1.ShowDialog = DialogResult.OK Then
             AcadApp.ActiveDocument.Open(Me.OpenFileDialog1.FileName)
         Else
             Exit Sub
         End If
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2012-7-17 07:57:00 | 显示全部楼层
acadApp是空值
没有GetObject或Create。。。
回复

使用道具 举报

10

主题

25

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2012-7-17 09:03:00 | 显示全部楼层

谢谢版主的回复,但是我之前的代码是
Sub 连接AutoCAD()
        On Error Resume Next
        AcadApp = GetObject(, "AutoCAD.Application")
        If Err.Number Then
            Err.Clear()
            AcadApp = CreateObject("AutoCAD.Application")
            If Err.Number Then
                MsgBox("请先打开CAD软件,或检查本地计算机是否安装了AutoCAD!!!")
                Exit Sub
            End If
        End If
        AcadApp.Visible = True '界面可视
        AcadApp.WindowState = AutoCAD.AcWindowState.acMax '界面最大化
        AppActivate(AcadApp.Caption) '显示AutoCAD界面
    End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '用对话框打开待提取的装配图明细表的AutoCAD文件
        Me.OpenFileDialog1.Title = "请首先打开AutoCAD装配图文件"
        Me.OpenFileDialog1.Filter = ".DWG|*.DWG"
        If Me.OpenFileDialog1.ShowDialog = DialogResult.OK Then
            AcadApp.ActiveDocument.Open(Me.OpenFileDialog1.FileName)
        Else
            Exit Sub
        End If
        Call 第i文本字符串的值()
        Call 第i文本字符串位于第R行()
        Call 第i文本字符串位于第C列()
        Call 填充Access表()
    End Sub
但是到 AcadApp.WindowState = AutoCAD.AcWindowState.acMax '界面最大化   
提示没有这个类acMax
问题一:检测不到我已经运行的CAD2004或者2010,问题二:
就又运行不下去了,会出现错误:
AcadApp.ActiveDocument.Open(Me.OpenFileDialog1.FileName)未将对象引用设置到对象的实例。
回复

使用道具 举报

10

主题

25

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2012-7-17 09:04:00 | 显示全部楼层
错误如图所示,烦请班主和高手看一下

wmgszghknpg.jpg

wmgszghknpg.jpg

回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2012-7-17 10:58:00 | 显示全部楼层
你要先
call 连接AutoCAD()
回复

使用道具 举报

10

主题

25

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2012-7-17 14:36:00 | 显示全部楼层

这个是有的,在FORM_LOAD.
回复

使用道具 举报

31

主题

227

帖子

8

银币

后起之秀

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

铜币
351
发表于 2012-7-18 18:17:00 | 显示全部楼层
提示是不是说要设setAcadApp=newacadapplication 才可以哈。
回复

使用道具 举报

10

主题

25

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2012-7-19 09:23:00 | 显示全部楼层

是啊 是 啊   或说对象 应初始为NULL。。。。。
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2012-7-19 14:32:00 | 显示全部楼层
Public Class Form1
    Dim acApp
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    End Sub
    Public Function GetAcApp()
        Dim progID As String = "AutoCAD.Application"
        Try
            acApp = GetObject(, progID)
        Catch
            Try
                acApp = CreateObject(progID)
                acApp.Visible = True
            Catch
                Return Nothing
            End Try
        End Try
        Return acApp
    End Function
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        GetAcApp()
    End Sub
End Class
回复

使用道具 举报

10

主题

25

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2012-7-20 16:49:00 | 显示全部楼层

感谢版主,我先试试。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-6-30 03:54 , Processed in 1.519558 second(s), 86 queries .

© 2020-2025 乐筑天下

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