Foxtable(狐表)用户栏目专家坐堂 → 处理EXCEL


  共有8371人关注过本帖树形打印复制链接

主题:处理EXCEL

帅哥哟,离线,有人找我吗?
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/7 15:29:00 [显示全部帖子]

应该不是红色代码的问题,Value 是对象,应该使用Is Nothing判断

If rg.Count = 1 And rg(1).Value Is Nothing Then

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/7 15:56:00 [显示全部帖子]


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/7 16:23:00 [显示全部帖子]

1、Value是对象类型,也就是object,数字、时间等一样可以用IS NOTHING判断

2、没有ISNULL这种用法

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/7 17:37:00 [显示全部帖子]

有没有影响要看量,单元格多遍历起来肯定有效率问题。

至于结果都不太一样请截图详细说明一下

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/8 8:25:00 [显示全部帖子]

可以考虑使用异步函数处理,比如:http://www.foxtable.com/mobilehelp/topics/3274.htm

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/8 15:44:00 [显示全部帖子]

帮助就是例子。把需要费时处理的代码放到异步函数里执行,异步函数里需要刷新界面显示的时候调用同步函数刷新。

使用的时候注意:http://www.foxtable.com/mobilehelp/topics/277.htm

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/10 12:17:00 [显示全部帖子]

标红代码不能使用异步函数。而是上面一整段代码所在的自定义函数改为异步函数调用,然后再把标红代码放到一个同步函数里调用

比如自定义函数名称为abc,改一下函数内容为
For i As Integer=1 To RowsMax
                    For j As Integer = 1 To ColsMax
                        If ary(i, j) <> Nothing  AndAlso Typeof ary(i,j) Is String AndAlso dic.ContainsKey(ary(i,j).ToLower.Replace(" ","").Replace(chr(10), "").Replace(chr(13), "")) Then
                         rg(i, j).Value= dic(ary(i,j).ToLower.Replace(" ","").Replace(chr(10), "").Replace(chr(13), ""))                   
                        Functions.BeginSyncExecute("def","Sheet名称:" & ws.name & rg(i,j).value)    
                        End If
                    Next

Next
原来调用方法:Functions.Execute("abc")

现在使用异步的调用方法:Functions.AsyncExecute("abc")

添加一个同步函数,假设名称为def,函数内容为:
Forms("翻译器").Controls("Label11").text = args(0)
Application.DoEvents



 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/10 16:00:00 [显示全部帖子]

把for循环里处理单个sheet的代码放到函数里

For k As Integer=1 To wb.worksheets.Count
            output.show(1)
            If Wb.WorkSheets(k).Visible <> 0 Then        '如果sheet表为不隐藏时处理(0隐藏,-1为不隐藏
                Dim Ws As MSExcel.WorkSheet=Wb.WorkSheets(k)
Functions.AsyncExecute("abc",Ws)
        End If '不处理隐藏sheet
Next

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/10 16:29:00 [显示全部帖子]

这一句也放到函数外面,因为只是做个判断,处理execl也用不到

If Numcb1.Text = Nothing And Numcb2.Text = Nothing Then

其它变量该重新定义的就重新定义

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/10 16:53:00 [显示全部帖子]

参考:http://www.foxtable.com/webhelp/topics/1486.htm,先看看函数怎么传递和定义参数

 回到顶部
总数 50 1 2 3 4 5 下一页