标题:类似vlookup的出现的问题
只看楼主
huangyz_xy
Rank: 2
等 级:论坛游民
帖 子:101
专家分:30
注 册:2016-10-2
结帖率:77.78%
已结贴  问题点数:20 回复次数:6 
类似vlookup的出现的问题
这是一个类似vlookup的代码,有两个问题一直没有解决:1、执行后打开的时候没有写入东西,即保存不了;2、  不能彻底清空内存,执行完成后在任务管理器的进程里面始终存在,要手动清理后才能打开excel文件,请高手们帮忙解决一哈!
Dim xlsApp   As Excel.Application
    Dim xlsBook  As Excel.Workbook
    Dim xlsSheet As Excel.Worksheet
    Dim xlsCells As Excel.Range
    Dim StartTime, EndTime, UsedTime As Single
    Dim rng As Range
    Dim i, j, k, row, col, coll As Double
    Dim SL, TL As Double
    Dim SQL As String
    Set xlsApp = CreateObject("Excel.Application")   '创建EXCEL对象
    Set xlsBook = xlsApp.Workbooks.Open(TxtFile)  '打开已经存在的EXCEL工件簿文件
    Set xlsSheet = xlsBook.Worksheets(ComSheet.Text)
    Set xlsCells = xlsSheet.Cells
    Set rng = xlsSheet.UsedRange
    i = rng.Rows.Count
    j = rng.Columns.Count
    FrmRemind.Show
    For col = 1 To j   
        If xlsCells(1, col) = ComSourceCol.Text Then
            SL = col
            Exit For
        End If
    Next
    For coll = 1 To j
        If xlsCells(1, col) = ComTargetCol.Text Then
            TL = coll
            Exit For
        End If
    Next
    For row = 2 To i
        If rst.State = adStateOpen Then rst.Close
        SQL = "SELECT * FROM " & ComTable & "   where " & ComField.Text & "='" & xlsSheet.Cells(row, SL) & "'"
        rst.Open SQL, Conn, adOpenKeyset, adLockOptimistic
        If rst.RecordCount <> 0 Then
            xlsCells(row, TL) = rst.Fields(ComSourceField.Text)  '执行这句没有问题,但是实际上没有写入,再次打开excel的时候没有更新
        End If
    Next row
    xlsApp.DisplayAlerts = False
    xlsBook.Save
    xlsBook.Close
    Set xlsApp = Nothing
    Set xlsBook = Nothing
    rst.Close
    Conn.Close
搜索更多相关主题的帖子: If For Excel Dim Set 
2019-11-06 18:33
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:14 
xlsApp    没关闭 ,只是把引用设为空。

但是实际上没有写入,检查是否执行的这句,是否正确保存的文件。

授人于鱼,不如授人于渔
早已停用QQ了
2019-11-06 19:19
huangyz_xy
Rank: 2
等 级:论坛游民
帖 子:101
专家分:30
注 册:2016-10-2
得分:0 
回复 2楼 风吹过b
师傅,又是你!
添加xlsapp.quit后还是关闭不了!
正确的保存方法就是xlsbook.save吧?如果没有xlsApp.DisplayAlerts = False这句会提示是否替换,点击替换后还是没有变化!
调试xlsCells(row, TL) = rst.Fields(ComSourceField.Text)的时候是没有问题的,能查询到内容,且单元格也在变化!百思不得其解了
2019-11-06 19:28
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
那就不知道具体出啥问题了,现在没测试环境,WIN10,连装VB6的欲望都没有了。

授人于鱼,不如授人于渔
早已停用QQ了
2019-11-06 21:39
huangyz_xy
Rank: 2
等 级:论坛游民
帖 子:101
专家分:30
注 册:2016-10-2
得分:0 
回复 4楼 风吹过b
现在行了,把Set xlsApp = CreateObject("Excel.Application")  改成Set xlsApp = GetObject(,"Excel.Application")  就OK!
2019-11-07 14:34
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
CreateObject  创建一个新的对象
GetObjec  引用现存的对象

如果你是使用引用现有的对象,当你没有运行应用时(这是对应excel),程序将报错。
建议你这里加一个错误检测
先引用,检测错误
存在错误,那就创建新的,再检测错误
还存在错误,提示,停止运行。

授人于鱼,不如授人于渔
早已停用QQ了
2019-11-07 23:57
huangyz_xy
Rank: 2
等 级:论坛游民
帖 子:101
专家分:30
注 册:2016-10-2
得分:0 
回复 6楼 风吹过b
好主意,但是如何判断呢?没有做过这个错误判断,原来是在选中文件并添加完字段后我就关闭app了,导入的时候我再重新创建对象并再次打开,所以会出现这种清情况
2019-11-09 07:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-497647-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.068532 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved