ps:程序略有简化,公共变量和数组声明没写
Private Sub Command1_Click()
Dim path As String
Dim FileType As String
Dim excelcj As Excel.Application
Dim exbook1 As Excel.Workbook
Dim exsheet1 As Excel.Sheets
Dim Fname As String '定义文件名
On Error Resume Next
m = 0
i = 1
path = Combo1.Text
FileType = "*"
FileName = "d:\1.xls"
10
SearchFiles path, FileType '调用子程序,返回查找清单。
If a <= 62000 Then GoTo 30 '如果数据量超过62000条就一次性写入excel
If Dir(FileName) = "" Then '看文件是否存在,有则打开,没有则建一个
Set excelcj = CreateObject("excel.application")
excelcj.SheetsInNewWorkbook = 1
Set exbook1 = excelcj.Workbooks().Add
Set exsheet1 = exbook1.activesheets("sheet1")
Else
Set excelcj = GetObject("excel.application")
Set exbook1 = excelcj.Workbooks.Open("d:\1.xls")
Set exsheet1 = exbook1.activesheets
End If
If m = 0 Then
GoTo 20
Else
End If
Do Until exsheet1.Application.Cells(m + 1, 1) = ""
'
m = m + 1
Loop
20
If a <= 62100 Then
Do Until i = a
exsheet1.Application.Cells(i, 1) = Files(i)
i = i + 1
Loop
Else
For i = i To 62100
exsheet1.Application.Cells(i, 1) = Files(i)
Next i
i = 1
exbook1.Worksheets.Add
Set exsheet1 = exbook1.ActiveSheet
For i = i To a - 62100
exsheet1.Application.Cells(i, 1) = Files(i + 62100)
Next i
End If
excelcj.DisplayAlerts = False
exbook1.SaveAs ("d:\1.xls")
excelcj.DisplayAlerts = True
exbook1.Close
excelcj.Quit
a = 1
30
MsgBox "OK"
Unload Me
End Sub
11 个解决方案
#2
教科书能包治百病还要论坛做什么。
#3
On Error Resume Next去掉,慢慢调试.excel和程序都是可见的,你觉得应该有输出的地方,看看有没有输出.
你的程序太混乱了,
现在什么年月了还用On Error Resume Next和goto呀,
用if块可以操作的,要用goto.
查找xls里面有多少数据行的有现成的属性,你要一行一行的判断.
xls赋值也可以直接用数组赋值.
教科书不能治百病,缺能提高水平.
你的程序太混乱了,
现在什么年月了还用On Error Resume Next和goto呀,
用if块可以操作的,要用goto.
查找xls里面有多少数据行的有现成的属性,你要一行一行的判断.
xls赋值也可以直接用数组赋值.
教科书不能治百病,缺能提高水平.
#4
我是刚学用VB,这些语法都是教程和网上搜来的,不知道现在都有什么更高效的方法。
其实我的问题很简单,就是同一条语句为什么第一可以获得对象,第二次就无法获得。所有把代码都贴出来就是因为自己不知道哪里有问题导致的。我想高手应该看到上下几个关键语句就能分析出来吧。
教科书的作用是解释基础技能,不可能把所有问题都告诉我。别告诉我你是MSDN都搞明白了才开始写代码的。
#5
虽然我的问题可能很初级,但是也请指出来是哪里有问题。想表现自己很有水平请拿出实力来,那种见问题就丢本教程出来唬人的未必真有多少料。
#6
Set exsheet1 = exbook1.activesheets("sheet1")
Set exsheet1 = exbook1.activesheets("sheet2")
Set exsheet1 = exbook1.activesheets("sheet3")
就这原理就是了
Set exsheet1 = exbook1.activesheets("sheet2")
Set exsheet1 = exbook1.activesheets("sheet3")
就这原理就是了
#7
问题没有表述清楚,你想用这程序干什么的? 出现了什么错误。
第一次可以 第二次不可以是不是指主程序没关的情况,如果是主要是定义好的对象没有释放或重新定义
Set excelcj = CreateObject("excel.application")
excelcj.SheetsInNewWorkbook = 1
Set exbook1 = excelcj.Workbooks().Add
Set exsheet1 = exbook1.activesheets("sheet1")
我们不是是MSDN都搞明白了才开始写代码的,而是在不断错误中修改中成长的
On Error Resume Next会把错误都忽略掉,你怎么调试啊,把它去掉,你就知道问题所在了
#8
高手都是从错误中成长的
#9
无法获取第二个工作薄对象?是sheet2表吗?
#10
你说的是一种可能,不过这个程序是单独运行的,没有上层的程序。我自己也猜想可能是定义的对象没有得到完全释放的原因,不过找不出错误来所以才贴出代码。至于说到On Error Resume Next这条语句是我特意设置来防止某些excel单元格内容不规范导致程序中断才设置的。调试的时候自然是一句一句看着运行的。
我上面说的话可能有些重,不过绝对是事实,因为我这段代码其实并不长,有点乱但是语法很简单。被我喷的人一看到多一点代码就眼晕,既不想认真看又要显示自己二把刀的水平才那么说。
学程序每个人都是边看资料边摸索这么过来的,大家都一样。VB现在用的人越来越少了,想请教点问题很难找到真正有用的帮助,新手一上来就被这样的人忽悠一下以后谁还来这里啊。
#11
最后也感谢上面各位的帮助,这个问题已经解决了。但是问题的原因我还是不知道,解决的方法很简单:我换了一台电脑,用另一个同事的电脑调试,代码没变,调试通过。。。。。我看了一下我们两台电脑唯一的区别是他的XPSP2,我的是WIN2003SP2,其他环境都一样。
#1
#2
教科书能包治百病还要论坛做什么。
#3
On Error Resume Next去掉,慢慢调试.excel和程序都是可见的,你觉得应该有输出的地方,看看有没有输出.
你的程序太混乱了,
现在什么年月了还用On Error Resume Next和goto呀,
用if块可以操作的,要用goto.
查找xls里面有多少数据行的有现成的属性,你要一行一行的判断.
xls赋值也可以直接用数组赋值.
教科书不能治百病,缺能提高水平.
你的程序太混乱了,
现在什么年月了还用On Error Resume Next和goto呀,
用if块可以操作的,要用goto.
查找xls里面有多少数据行的有现成的属性,你要一行一行的判断.
xls赋值也可以直接用数组赋值.
教科书不能治百病,缺能提高水平.
#4
我是刚学用VB,这些语法都是教程和网上搜来的,不知道现在都有什么更高效的方法。
其实我的问题很简单,就是同一条语句为什么第一可以获得对象,第二次就无法获得。所有把代码都贴出来就是因为自己不知道哪里有问题导致的。我想高手应该看到上下几个关键语句就能分析出来吧。
教科书的作用是解释基础技能,不可能把所有问题都告诉我。别告诉我你是MSDN都搞明白了才开始写代码的。
#5
虽然我的问题可能很初级,但是也请指出来是哪里有问题。想表现自己很有水平请拿出实力来,那种见问题就丢本教程出来唬人的未必真有多少料。
#6
Set exsheet1 = exbook1.activesheets("sheet1")
Set exsheet1 = exbook1.activesheets("sheet2")
Set exsheet1 = exbook1.activesheets("sheet3")
就这原理就是了
Set exsheet1 = exbook1.activesheets("sheet2")
Set exsheet1 = exbook1.activesheets("sheet3")
就这原理就是了
#7
问题没有表述清楚,你想用这程序干什么的? 出现了什么错误。
第一次可以 第二次不可以是不是指主程序没关的情况,如果是主要是定义好的对象没有释放或重新定义
Set excelcj = CreateObject("excel.application")
excelcj.SheetsInNewWorkbook = 1
Set exbook1 = excelcj.Workbooks().Add
Set exsheet1 = exbook1.activesheets("sheet1")
我们不是是MSDN都搞明白了才开始写代码的,而是在不断错误中修改中成长的
On Error Resume Next会把错误都忽略掉,你怎么调试啊,把它去掉,你就知道问题所在了
#8
高手都是从错误中成长的
#9
无法获取第二个工作薄对象?是sheet2表吗?
#10
你说的是一种可能,不过这个程序是单独运行的,没有上层的程序。我自己也猜想可能是定义的对象没有得到完全释放的原因,不过找不出错误来所以才贴出代码。至于说到On Error Resume Next这条语句是我特意设置来防止某些excel单元格内容不规范导致程序中断才设置的。调试的时候自然是一句一句看着运行的。
我上面说的话可能有些重,不过绝对是事实,因为我这段代码其实并不长,有点乱但是语法很简单。被我喷的人一看到多一点代码就眼晕,既不想认真看又要显示自己二把刀的水平才那么说。
学程序每个人都是边看资料边摸索这么过来的,大家都一样。VB现在用的人越来越少了,想请教点问题很难找到真正有用的帮助,新手一上来就被这样的人忽悠一下以后谁还来这里啊。
#11
最后也感谢上面各位的帮助,这个问题已经解决了。但是问题的原因我还是不知道,解决的方法很简单:我换了一台电脑,用另一个同事的电脑调试,代码没变,调试通过。。。。。我看了一下我们两台电脑唯一的区别是他的XPSP2,我的是WIN2003SP2,其他环境都一样。