注册 登录
编程论坛 VB6论坛

各位大神可以帮我看下,我的问题出在哪里吗?可以帮我修改下吗感谢。

zxh48911805 发布于 2023-01-16 10:55, 2818 次点击
只有本站会员才能查看附件,请 登录
   以前是用VBA做的,现在想用VB6。只能输出开头的部分,各位大神可以帮我看下,我的问题出在哪里吗?
27 回复
#2
阳光上的桥2023-01-16 11:43
VB6里面不要使用无头的Cells(1,42)访问单元格,至少应该xlsheet.Cells(1,42,应该考虑使用arr(1,42)才是最佳,前提是A1非空才正确。

另外,VBA.Format也不对吧。

强烈建立Option Explicit,这样这些语句就会编译报错,不会导致无法理解的逻辑问题。

程序代码:

        oExcel.Workbooks.Open File_Selected    '打开文件
        nm = Split(File_Selected, "\")(UBound(Split(File_Selected, "\")))    '获取工作簿名称
        Set xlBook = oExcel.Workbooks(nm)
        Set xlsheet = xlBook.Worksheets("数据")    '表名注意切换#######
        arr = xlsheet.UsedRange    '获取到数组
        a = UBound(arr)    '获取数量
        Form_Activate

     Open "D:\原始资料\" & Cells(1, 42) & "-CJ-" & myDate & ".txt" For Output As #1
    Text1.Text = "D:\原始资料\CS-1-WY-" & VBA.Format(Now(), "yyyymmdd") & ".dat,输出完成"
     Print #1, Cells(1, 1).Value & " "
#3
zxh489118052023-01-16 11:46
回复 2楼 阳光上的桥
我修改过也不行,可以帮我改下嘛
#4
zxh489118052023-01-16 11:52
回复 3楼 zxh48911805
代码我已修改了还是只能出来一点



Open "D:\原始资料\" & arr(1, 42) & "-CJ-" & myDate & ".txt" For Output As #1
    Text1.Text = "D:\原始资料\CS-1-WY-" & VBA.Format(Now(), "yyyymmdd") & ".dat,输出完成"
     Print #1, arr(1, 1) & " "
     If arr(2, 2) < 0 Then
      Print #1, arr(2, 1) & VBA.Format(arr(2, 2), "00000000") & " "
     Else
      Print #1, arr(2, 1) & "+" & VBA.Format(arr(2, 2), "00000000") & " "
     End If
   For b = 1 To C
     If arr(b * 3, 2) < 0 Then
      Print #1, arr(b * 3, 1) & VBA.Format(arr(b * 3, 2), "00000000") & " " & arr(b * 3, 3) & VBA.Format(arr(b * 3, 4), "00000000") & " "
     Else
      Print #1, arr(b * 3, 1) & "+" & VBA.Format(arr(b * 3, 2), "00000000") & " " & arr(b * 3, 3) & VBA.Format(arr(b * 3, 4), "00000000") & " "
     End If
     
     If arr(1 + b * 3, 2) < 0 Then
      Print #1, arr(1 + b * 3, 1) & VBA.Format(arr(1 + b * 3, 2), "00000000") & " " & arr(1 + b * 3, 3) & VBA.Format(arr(1 + b * 3, 4), "00000000") & " "
     Else
      Print #1, arr(1 + b * 3, 1) & "+" & VBA.Format(arr(1 + b * 3, 2), "00000000") & " " & arr(1 + b * 3, 3) & VBA.Format(arr(1 + b * 3, 4), "00000000") & " "
     End If
     
    If arr(2 + b * 3, 2) < 0 Then
     If arr(2 + b * 3, 6) < 0 Then
      Print #1, arr(2 + b * 3, 1) & VBA.Format(arr(2 + b * 3, 2), "00000000") & " " & arr(2 + b * 3, 3) & VBA.Format(Left(arr(2 + b * 3, 4), 8), "00000000") & " " & arr(2 + b * 3, 5) & VBA.Format(arr(2 + b * 3, 6), "00000000") & " "
     Else
      Print #1, arr(2 + b * 3, 1) & VBA.Format(arr(2 + b * 3, 2), "00000000") & " " & arr(2 + b * 3, 3) & VBA.Format(Left(arr(2 + b * 3, 4), 8), "00000000") & " " & arr(2 + b * 3, 5) & "+" & VBA.Format(arr(2 + b * 3, 6), "00000000") & " "
     End If
    Else
     If arr(2 + b * 3, 6) < 0 Then
      Print #1, arr(2 + b * 3, 1) & "+" & VBA.Format(arr(2 + b * 3, 2), "00000000") & " " & arr(2 + b * 3, 3) & VBA.Format(Left(arr(2 + b * 3, 4), 8), "00000000") & " " & arr(2 + b * 3, 5) & VBA.Format(arr(2 + b * 3, 6), "00000000") & " "
     Else
      Print #1, arr(2 + b * 3, 1) & "+" & VBA.Format(arr(2 + b * 3, 2), "00000000") & " " & arr(2 + b * 3, 3) & VBA.Format(Left(arr(2 + b * 3, 4), 8), "00000000") & " " & arr(2 + b * 3, 5) & "+" & VBA.Format(arr(2 + b * 3, 6), "00000000") & " "
     End If
    End If
   Next
      Print #1, ""
      Close #1
line1:
        xlBook.Close False    '关闭工作簿,结束进程
        Set xlBook = Nothing
        oExcel.Quit
        Set xlExcel = Nothing
    End If
End Sub


#5
zxh489118052023-01-16 11:53
回复 2楼 阳光上的桥
代码我已修改了还是只能出来一点



Open "D:\原始资料\" & arr(1, 42) & "-CJ-" & myDate & ".txt" For Output As #1
    Text1.Text = "D:\原始资料\CS-1-WY-" & VBA.Format(Now(), "yyyymmdd") & ".dat,输出完成"
     Print #1, arr(1, 1) & " "
     If arr(2, 2) < 0 Then
      Print #1, arr(2, 1) & VBA.Format(arr(2, 2), "00000000") & " "
     Else
      Print #1, arr(2, 1) & "+" & VBA.Format(arr(2, 2), "00000000") & " "
     End If
   For b = 1 To C
     If arr(b * 3, 2) < 0 Then
      Print #1, arr(b * 3, 1) & VBA.Format(arr(b * 3, 2), "00000000") & " " & arr(b * 3, 3) & VBA.Format(arr(b * 3, 4), "00000000") & " "
     Else
      Print #1, arr(b * 3, 1) & "+" & VBA.Format(arr(b * 3, 2), "00000000") & " " & arr(b * 3, 3) & VBA.Format(arr(b * 3, 4), "00000000") & " "
     End If
     
     If arr(1 + b * 3, 2) < 0 Then
      Print #1, arr(1 + b * 3, 1) & VBA.Format(arr(1 + b * 3, 2), "00000000") & " " & arr(1 + b * 3, 3) & VBA.Format(arr(1 + b * 3, 4), "00000000") & " "
     Else
      Print #1, arr(1 + b * 3, 1) & "+" & VBA.Format(arr(1 + b * 3, 2), "00000000") & " " & arr(1 + b * 3, 3) & VBA.Format(arr(1 + b * 3, 4), "00000000") & " "
     End If
     
    If arr(2 + b * 3, 2) < 0 Then
     If arr(2 + b * 3, 6) < 0 Then
      Print #1, arr(2 + b * 3, 1) & VBA.Format(arr(2 + b * 3, 2), "00000000") & " " & arr(2 + b * 3, 3) & VBA.Format(Left(arr(2 + b * 3, 4), 8), "00000000") & " " & arr(2 + b * 3, 5) & VBA.Format(arr(2 + b * 3, 6), "00000000") & " "
     Else
      Print #1, arr(2 + b * 3, 1) & VBA.Format(arr(2 + b * 3, 2), "00000000") & " " & arr(2 + b * 3, 3) & VBA.Format(Left(arr(2 + b * 3, 4), 8), "00000000") & " " & arr(2 + b * 3, 5) & "+" & VBA.Format(arr(2 + b * 3, 6), "00000000") & " "
     End If
    Else
     If arr(2 + b * 3, 6) < 0 Then
      Print #1, arr(2 + b * 3, 1) & "+" & VBA.Format(arr(2 + b * 3, 2), "00000000") & " " & arr(2 + b * 3, 3) & VBA.Format(Left(arr(2 + b * 3, 4), 8), "00000000") & " " & arr(2 + b * 3, 5) & VBA.Format(arr(2 + b * 3, 6), "00000000") & " "
     Else
      Print #1, arr(2 + b * 3, 1) & "+" & VBA.Format(arr(2 + b * 3, 2), "00000000") & " " & arr(2 + b * 3, 3) & VBA.Format(Left(arr(2 + b * 3, 4), 8), "00000000") & " " & arr(2 + b * 3, 5) & "+" & VBA.Format(arr(2 + b * 3, 6), "00000000") & " "
     End If
    End If
   Next
      Print #1, ""
      Close #1
line1:
        xlBook.Close False    '关闭工作簿,结束进程
        Set xlBook = Nothing
        oExcel.Quit
        Set xlExcel = Nothing
    End If
End Sub
#6
阳光上的桥2023-01-16 12:19
你好像只看了第一句,我看你代码里面还有大量的VBA.Format呀,为什么不加Option Explicit呢
#7
zxh489118052023-01-16 13:27
回复 6楼 阳光上的桥
Option Explicit怎么加?
#8
yuma2023-01-16 13:49
不就是导出xlsx里的内容到txt文件吗?是吧?
#9
zxh489118052023-01-16 13:58
回复 8楼 yuma
txt dat都可以
#10
yuma2023-01-16 14:19
很奇怪,我的代码只能处理我的xls xlsx文件,无法处理你的xlsm文件。转换格式也不行。
#11
牛掰2023-01-16 14:40
回复 楼主 zxh48911805
你这个C循环是干什么的?没有值,应该是改成“a”才对吧。
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2023-1-16 14:50编辑过]

#12
牛掰2023-01-16 14:49
回复 楼主 zxh48911805
还有你这个“myDate”是干什么的?也是空值。
只有本站会员才能查看附件,请 登录
#13
yuma2023-01-16 15:20
导出成功了。转换成xlsx格式,写程序导出为txt.
只有本站会员才能查看附件,请 登录


经测试,数据.xlsm里的数据类型有:未定义类型、单精度浮点类型、字符串类型、range类型。

由于你是xlsm格式,包含的有range类型数据(就是文档里的那个大按钮)是无法导出来txt的,只能跳过它。
#14
zxh489118052023-01-16 15:44
只有本站会员才能查看附件,请 登录
  试试这个我转换了下格式
#15
zxh489118052023-01-16 15:45
回复 12楼 牛掰
那是时间,还有只是改个a就可以吗?


[此贴子已经被作者于2023-1-16 15:49编辑过]

#16
zxh489118052023-01-16 15:47
回复 13楼 yuma
我新传了一个转换格式的,还有你传出来的数据和我压缩包里的1.txt不对吧
#17
牛掰2023-01-16 15:51
回复 15楼 zxh48911805
楼主试一下这个附件。
只有本站会员才能查看附件,请 登录
#18
zxh489118052023-01-16 15:55
回复 17楼 牛掰
厉害,不过最下面有很多多余的怎么办了
#19
牛掰2023-01-16 15:56
回复 18楼 zxh48911805
多余的?没懂您什么意思
#20
zxh489118052023-01-16 16:06
只有本站会员才能查看附件,请 登录
,最后面多了很多
#21
zxh489118052023-01-16 16:07
回复 19楼 牛掰
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
,最后面多了很多+ + + + + + +
#22
牛掰2023-01-16 16:13
回复 20楼 zxh48911805
这不都是小问题吗,你一步步调试不就可以知道什么问题了?除了伸手以外你要多学习提升自己的制作能力。还有就是看下你Excel表里面的源数据是不是下面多了很多不可见的空白数据,你把Excel表里面的空白数据向下删除一遍保存后再试一下。

[此贴子已经被作者于2023-1-16 16:15编辑过]

#23
zxh489118052023-01-16 16:18
回复 22楼 牛掰
谢谢
#24
yuma2023-01-16 16:55
只有本站会员才能查看附件,请 登录


以VBTab作为分割符
#25
zxh489118052023-01-17 09:40
回复 24楼 yuma
可以把代码发给我嘛谢谢
#26
牛掰2023-01-17 11:50
回复 25楼 zxh48911805
试一下。
只有本站会员才能查看附件,请 登录
#27
独木星空2023-01-17 22:14
我最开始学的是vb6,但是,只是一个初步认识。学会的却是vfp编程,这个板块太冷清,所以,矬子里拔将军,也当选过几次版主。
你的问题我还解决不了。
#28
zxh489118052023-01-18 09:47
回复 26楼 牛掰
可以发下代码给我嘛
1