标题:请教一个问题,找遍了baidu,但是没有答案
取消只看楼主
start1901
Rank: 1
等 级:新手上路
帖 子:25
专家分:4
注 册:2018-2-26
结帖率:40%
已结贴  问题点数:20 回复次数:5 
请教一个问题,找遍了baidu,但是没有答案
我写了一个VB程序,批量处理excel文件,由于有很多重复语句,需要劈分成几个sub子程序,如下代码中标注之间这段,试了几遍都不行,
问题1:不知道这种with怎么传递到子过程中,
问题2:在子函数中需要把Set xlapp = CreateObject("Excel.Application")再写一遍么,子函数中“d1 = .Cells(k, 46) + d1”总是提示错误,
求大神帮忙指点一下,谢谢!


Private Sub Command15_Click()  
pb1 = "D:\55.xls"
Set xlapp = CreateObject("Excel.Application")
xlapp.Visible = True
Set xlBook = xlapp.Workbooks.Open(pb1)   
Set xlSheet = xlBook.Worksheets(1)
With xlSheet

  a1 = ylSheet.Cells(2, 4)
      For k = 5 To m  ',
         If InStr(.Cells(k, 7), "算前") <> 0 And InStr(.Cells(k, 8), "已开") <> 0 And IsNumeric(.Cells(k, 46)) And .Cells(k, 46) > 0 Then  
           '以下这段想写进sub子程序
           d1 = .Cells(k, 46) + d1
           por = .Cells(k, 47) + por
           So = .Cells(k, 48) + So
           WF = .Cells(k, 16) + WF
           WD = .Cells(k, 17) + WD
           YF = .Cells(k, 18) + YF
           RRWF = .Cells(k, 21) + RRWF
           RRWD = .Cells(k, 22) + RRWD
           RRYF = .Cells(k, 23) + RRYF
           JJWF = .Cells(k, 24) + JJWF
           JJWD = .Cells(k, 25) + JJWD
           JJYF = .Cells(k, 26) + JJYF
           LCWF = .Cells(k, 30) + LCWF
           LCWD = .Cells(k, 31) + LCWD
           LCYF = .Cells(k, 32) + LCYF
            .Cells(m1, 9) = a1
            If a1 <> 0 Then .Cells(m1, 10) = d1 / a1
            If d1 <> 0 Then .Cells(m1, 11) = por / d1
            If por <> 0 Then .Cells(m1, 12) = So / por
            If So <> 0 And YF <> 0 Then .Cells(m1, 13) = 1 / (WF * 100 / So)
            If WF <> 0 Then .Cells(m1, 14) = WD / WF
            If WF <> 0 Then .Cells(m1, 15) = YF * 10000 / WF
            a1 = 0
            d1 = 0
            por = 0
            '以上这段想写进sub子程序
         End If ',5
      Next ',4
 下面代码无关省略
搜索更多相关主题的帖子: Sub Set And If Then 
2018-12-10 00:41
start1901
Rank: 1
等 级:新手上路
帖 子:25
专家分:4
注 册:2018-2-26
得分:0 
回复 3楼 wds1
谢谢啊,这也是个办法,但我还是想知道,当必须在excel内计算,怎么写子程序,正如我例子中那段代码怎么写到子程序中
2018-12-10 18:58
start1901
Rank: 1
等 级:新手上路
帖 子:25
专家分:4
注 册:2018-2-26
得分:0 
回复 2楼 风吹过b
我的定义是
Dim xlapp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
我的子过程按你说的写了:
sub xxx(abc as Excel.Worksheet )
  with xlsheet
  ...
  end with
end sub
但是调用的时候提示"对象不支持该属性或方法",调用语句如下:
xxx(xlsheet)

帮忙看看错误处在哪里,谢谢啊
2018-12-10 19:22
start1901
Rank: 1
等 级:新手上路
帖 子:25
专家分:4
注 册:2018-2-26
得分:0 
回复 6楼 风吹过b
不好意思,给您回复的时候写错了,代码里我写的是形参的名字,更正一下:
 
Dim xlSheet As Excel.Worksheet
子过程:
sub xxx(abc as Excel.Worksheet )
  with abc  
  ...
  end with
end sub
调用语句如下:
xxx(xlsheet)

调用的时候提示"对象不支持该属性或方法",能否帮忙再看一下,谢谢了
2018-12-10 21:39
start1901
Rank: 1
等 级:新手上路
帖 子:25
专家分:4
注 册:2018-2-26
得分:0 
回复 7楼 wds1
谢谢啊,例子很有用,我在子程序里加了一个形参就能运行了,现在是sub xxx(abc as Excel.Worksheet , m1),原来这里不能只有一个abc as Excel.Worksheet
想问下你的例子是哪里找的啊,我还是学习阶段,想每次有问题了能有个实例参照,有专门的VB6操作excel的书么,还是其他什么?
2018-12-10 22:38
start1901
Rank: 1
等 级:新手上路
帖 子:25
专家分:4
注 册:2018-2-26
得分:0 
回复 10楼 wds1
谢谢啊,学习了新知识,
这种数值传递的问题、还有一些操作文件的问题常常碰到,但录制宏没办法录,只能来请教别人,
谢谢答疑,再次感谢
2018-12-11 12:15



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




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

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