注册 登录
编程论坛 VB6论坛

实时错误91,对象变量或with块变量未设置~~如何解决

ck3670 发布于 2014-04-13 12:26, 9910 次点击
Private Sub Command1_Click()
Dim part As Object
Dim strfilename As String
Dim longstatus As Long
Dim d1 As Integer
Dim d2 As Integer
Dim h As Single
If Dir(strfilename) = "" Then
   MsgBox ("文件不存在,请检查路径:" & vbCrLf & strfilename)
   Exit Sub
   End If
strfilename = App.Path + "\" + "垫圈.sldprt"
Set swApp = CreateObject("sldworks.application")
swApp.Visible = True
Set part = swApp.opendoc4(strfilename, 1, 0, "", longstatus)
Set part = swApp.ActivateDoc("垫圈")
ProgressBar1.Value = 4
d1 = Text1.Text
d2 = Text2.Text
h = Text3.Text
Debug.Print d1, d2, h
strfilename = "@垫圈.sldprt"
    part.Parameter("d1 @ 草图2 " & strfilename).SystemValue = d1 / 1000
    part.Parameter("d2 @ 草图2 " & strfilename).SystemValue = d2 / 1000
    part.Parameter("h  @ 拉伸1 " & strfilename).SystemValue = h / 1000
    part.EditRebulid
ProgressBar1.Value = 9
Set part = Nothing
Set swApp = Nothing
ProgressBar1.Value = 100
StatusBar1.Panels(1).Text = "更新结束"
End Sub


在最后  part.Parameter("d1 @ 草图2 " & strfilename).SystemValue = d1 / 1000~~~调试时就会出现实时错误91,对象变量或with块变量未设置,有大神告诉怎么解决吗?
18 回复
#2
owenlu19812014-04-13 13:58
1. strfilename 赋值应前置,否则永远找不到文件
strfilename = App.Path + "\" + "垫圈.sldprt"
If Dir(strfilename) = "" Then
   MsgBox ("文件不存在,请检查路径:" & vbCrLf & strfilename)
   Exit Sub
End If

2. swApp 应先定义再创建对象 (如使用Excel,则 Dim xlApp As New Excel.Application)
Dim swApp As ······
Set swApp = CreateObject("sldworks.application")
#3
ck36702014-04-15 21:57
回复 2 楼 owenlu1981
很感谢你的帮助。在我那样修改后,可以寻找到文件了,但是还是会出现那样的错误。修改后的代码如下:
Private Sub Command1_Click()
Dim part As Object
Dim strfilename As String
Dim longstatus As Long
Dim d1 As Integer
Dim d2 As Integer
Dim h As Single
strfilename = App.Path + "\" + "垫圈.sldprt"
If Dir(strfilename) = "" Then
   MsgBox ("文件不存在,请检查路径:" & vbCrLf & strfilename)
   Exit Sub
   End If
Dim swApp As Object
Set swApp = CreateObject("sldworks.application")
swApp.Visible = True
Set part = swApp.opendoc4(strfilename, 1, 0, "", longstatus)
Set part = swApp.ActivateDoc("垫圈")
ProgressBar1.Value = 4
d1 = Text1.Text
d2 = Text2.Text
h = Text3.Text
Debug.Print d1, d2, h
strfilename = "@垫圈.sldprt"
    part.Parameter("d1 @ 草图2 " & strfilename).SystemValue = d1 / 1000
    part.Parameter("d2 @ 草图2 " & strfilename).SystemValue = d2 / 1000
    part.Parameter("h  @ 拉伸1 " & strfilename).SystemValue = h / 1000
    part.EditRebulid
ProgressBar1.Value = 9
Set part = Nothing
Set swApp = Nothing
ProgressBar1.Value = 100
StatusBar1.Panels(1).Text = "更新结束"
End Sub

调试时还是提示对象变量或with块变量未设置,可以能再帮我找下问题吗?万分感谢
#4
owenlu19812014-04-15 22:41
Dim swApp As SldWorks.SldWorks
Dim Part As SldWorks.PartDoc

Set swApp = CreateObject("SldWorks.Application")
Set Part = swApp.ActiveDoc
swApp.Visible = True
#5
ck36702014-04-15 22:49
回复 4 楼 owenlu1981
Dim swApp As SldWorks.SldWorks
Dim Part As SldWorks.PartDoc
~~修改成这个会显示用户定义类型未定义。
关于之前那个调试问题出在
 Part.Parameter("d1 @ 草图1 " & strfilename).SystemValue = d1 / 1000
~~是不是这里的问题呢?
#6
owenlu19812014-04-16 11:01
回复 5 楼 ck3670
得先在工程->引用里添加对象
比如程序中使用Excel,就得先应用 Microsoft Excel xx.0 Object Library
#7
ck36702014-04-16 16:37
回复 6 楼 owenlu1981
我这是用VB对solidworks的二次开发~~在引用那里把关于solidworks的都勾上了,还是不行。本人新手,希望能教下
#8
owenlu19812014-04-16 19:15
出错语句或对象是?
#9
ck36702014-04-17 12:26
回复 8 楼 owenlu1981
出错语句一直都是
 part.Parameter("d1 @ 草图1 " & strfilename).SystemValue = d1 / 1000
这句~~
调试的错误就是实时错误91,对象变量或with变量未设置。
#10
lowxiong2014-04-17 12:33
Set part = swApp.opendoc4(strfilename, 1, 0, "", longstatus)
Set part = swApp.ActivateDoc("垫圈")
取消红色set试试,一个对象接连两次实例化肯定不合规矩。
#11
owenlu19812014-04-17 20:30
strfilename = App.Path + "\" + "垫圈.sldprt"
strfilename = "@垫圈.sldprt"
两次赋值,是不是因为第二次没有了路径就出错了?
#12
ck36702014-04-18 14:58
回复 10 楼 lowxiong
把那句出现后还是出现同样的错误,还是
 part.Parameter("d1 @ 草图1 " & strfilename).SystemValue = d1 / 1000
这里有问题
#13
ck36702014-04-18 15:05
回复 11 楼 owenlu1981
但是调试时程序是可以打开solidworks的指定文件,也就是“垫圈”这一文件的,感觉是修改参数这一步有问题
#14
owenlu19812014-04-18 16:58
Set part = swApp.ActivateDoc("垫圈")
改成 Set part = swApp.ActivateDoc("垫圈.Sldprt") 试试
#15
ck36702014-04-18 17:07
回复 14 楼 owenlu1981
还是不行。我觉得是solidworks的文件垫圈的参数D1,D2没和程序关联起来~
#16
owenlu19812014-04-18 19:53
Set part = swApp.opendoc4(strfilename, 1, 0, "", longstatus)

longstatus 值是?
#17
ck36702014-04-21 12:11
回复 16 楼 owenlu1981
这里是打开solidwork文件,没问题的
#18
鸥翔鱼游2014-04-28 14:21
看帖是学习,回帖是礼貌。。。
#19
fangbnu2017-11-06 11:01
我用vb编个小软件也偶尔会出现这个错误提示,软件一直运行正常,偶尔隔个十天半个月或一个月的出现这个错误提示,看来不是编程的问题,也不知道是什么原因。
也可能是vb的bug,在XP偶尔会出现,换成Win7不出现了。
1