以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]关excel表读写问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=107900)

--  作者:yjh2002
--  发布时间:2017/10/12 10:13:00
--  [求助]关excel表读写问题
做了个读写excel表的窗口,第一遍能正常工作。第二次选择另一个文件时,就提示“未将对象引用设置到对象实例”。把这个窗口关闭重新进入就正常了,不知道是啥原因。
--  作者:有点蓝
--  发布时间:2017/10/12 11:12:00
--  
具体相关代码贴出来看看
--  作者:yjh2002
--  发布时间:2017/10/12 11:37:00
--  
Dim lj As String =e.Form.controls("TextBox2").value \'获取文件

Dim gzbq As Integer=e.Form.controls("NumericComboBox3").value
Dim gzbz As Integer=e.Form.controls("NumericComboBox4").value
Dim mhs As Integer=e.Form.controls("NumericComboBox1").value-1
Dim mzs As Integer=e.Form.controls("NumericComboBox2").value-1

try 
    Dim test As New XLS.Book(lj) \'定义一个Excel工作簿
Catch ex As Exception
    messagebox.Show("文件错误!","提示")
    Return
End try
Dim Book As New XLS.Book(lj) \'定义一个Excel工作簿
Dim zgzb As Integer=book.Sheets.Count
If gzbq<0 Or gzbz<0 Then
    messagebox.show("起始页与终止页不能小于0!","提示")
    Return
End If
If gzbq>zgzb Or gzbz>zgzb Then
    messagebox.show("工作表选择范围为0-" & zgzb-1,"提示")
    Return
End If
If mhs<0 Then
    messagebox.show("起始行不能小于0!","提示")
    Return
End If
Dim i As Integer
Dim dyg As String
Dim mclj As String
\'msgbox("aa")
For myh As Integer=gzbq To gzbz
    Dim Sheet As XLS.Sheet = Book.Sheets(myh) \'引用工作簿的第一个工作表
    i=mhs
    Do While 1=1
        dyg=sheet(i,0).value
        mclj=sheet(i,0).Hyperlink
        If dyg="" Or mclj="" Then
            Exit Do 
        Else 
            Tables("抓取数据_table1").AddNew
            Tables("抓取数据_table1").Current("bh")=i
            Tables("抓取数据_table1").Current("cxdy")=sheet(i,0).value
            Tables("抓取数据_table1").Current("clj")=mclj
            Tables("抓取数据_table1").Current("yh")=myh
        End If 
        i=i+1
    Loop
Next
Tables("抓取数据_table1").save
Tables("抓取数据_table1").Position=0

后面在timer里还有回写保存到excel的代码,应该没啥关系了。这段第一次运行没问题,运行完再选择一个新的文件就出错。

--  作者:yjh2002
--  发布时间:2017/10/12 11:40:00
--  
出错的位置在            Tables("抓取数据_table1").AddNew 之后,因为每次都要清空datatable。出错后会出现一行空白行,所以应该是执行完addnew后出的错误。


--  作者:有点甜
--  发布时间:2017/10/12 12:11:00
--  

试试改成

 

SystemReady = False

            Dim nr As Row = Tables("抓取数据_table1").AddNew

            nr("bh")=i
            nr("cxdy")=sheet(i,0).value
            nr("clj")=mclj
            nr("yh")=myh
SystemReady = True

--  作者:yjh2002
--  发布时间:2017/10/12 14:02:00
--  
我先试试,请问SystemReady是个什么属性?
--  作者:有点甜
--  发布时间:2017/10/12 14:05:00
--  

有可能是你填充值的时候触发了datacolchanged等事件导致的错误。

 

http://www.foxtable.com/webhelp/scr/2218.htm