cherrycdh 发表于 2021-4-28 16:11

恩还是vba的,反正我就是天天有问题 T_T,关于文本文件导入与输出

就是在文本文件的导入导出过程中,有这么一段代码(当然我其实之前有做过导入功能,也做过导出功能了)但是还是不懂里面的一个
作用呢,是以下这个

然后呢,代码呢,我跟着老师学的之后自己也编了
Sub 合并两个文本文件()
    Dim i As Long, s As String, j As Long
    '打开两个需要合并的文本文件,并且赋予他们唯一的编号,只要文件打开就必须是编号唯一
    Open "E:\Excel VBA入门及应用\vba提高篇\13、第十二回的文本文件\文本1.txt" For Input As #1
    Open "E:\Excel VBA入门及应用\vba提高篇\13、第十二回的文本文件\文本2.txt" For Input As #2
    '行号从22号开始循环
    i = 22
    '循环操作代号1和代号2文件,循环到末尾为止
    Do While Not EOF(1) Or Not EOF(2)
      '假如文件1没到末尾,那么对文件1做数据行读取并且输入
      '循环是从第一行开始,以后循环一次就是+1的循环,因此不需要额外再做操作
      If Not EOF(1) Then
            Line Input #1, s
            '这里是将s写入到之前i行的2号单元格,然后写入后i+1
            Cells(i, 2) = s: i = i + 1
      End If
      '这里是读取的2号文件,这里因为前面的if中i+1了,因此这里其实是后面一行了
      If Not EOF(2) Then
            Line Input #2, s
            Cells(i, 2) = s: i = i + 1
      End If
    Loop
    Close #1: Close #2
    '当到了excel中后再进入到合并文件中去,这里写了编号#1是因为,原来的文件已经关闭了
    '内存中已经释放了#1,所以才使用的
    Open "E:\Excel VBA入门及应用\vba提高篇\13、第十二回的文本文件\合并.txt" For Output As #1
    i = 22
    Do While Cells(i, 2) <> ""
      Print #1, Trim(Cells(i, 2))
      i = i + 1
    Loop
    Close #1
End Sub
其他的呢,我都能懂,什么打开啊,关闭啊,打印啊,都能明白了
就是在读取每一行并定义成变量s的时候,为什么line input #1后面是","加上s,而不是line input #1=s,我知道如果是=s程序会报错,但是我不知道在这里vba为啥是,而不是=,不理解就钻牛角尖了:'(weeqw

马云爱逛京东 发表于 2021-4-28 16:21

你这样子写感觉更麻烦
读文件时,用的line input可以读一整行的数据,直接输出到新的文件里面就够了,再读取到单元格内就画蛇添足了

Takitooru 发表于 2021-4-28 16:42

本帖最后由 Takitooru 于 2021-4-28 16:44 编辑

就是在读取每一行并定义成变量s的时候,为什么line input #1后面是","加上s,而不是line input #1=s,我知道如果是=s程序会报错,但是我不知道在这里vba为啥是,而不是=,不理解就钻牛角尖了
【但是我不知道在这里vba为啥是,而不是=】
解释:
因为line input# 语法就是这样解析:
line input #filenumber,varname
filenumber必要。任何有效的文件号
      varname   必要。有效的variant(变体数据)值或string(字符串)变量名

以你的代码举例:
Line Input #1, s
意思就是从 #1 这个文件里读取一行,并赋值给 s 这个定义的变量
分拆解释就是:
line input = 函数
#1 = #filenumber
s = varname

所以现在你应该懂了,为什么是, 而不是=

列明 发表于 2021-4-28 17:08

別問,
問就是規定!
這是VBA語法,
讀入一行文本的命令就是這樣,
不這麽寫就實現不了功能。
你若想按照你的方法來,
就利用這個命令封裝一個你自己起的名字的讀文本行的方法。
那就可以了。
比如:
s=讀入一行(文本文件名,第幾行)

Yjzhong0755 发表于 2021-4-28 17:09

逻辑错误吧,

cherrycdh 发表于 2021-4-30 09:22

马云爱逛京东 发表于 2021-4-28 16:21
你这样子写感觉更麻烦
读文件时,用的line input可以读一整行的数据,直接输出到新的文件里面就够了,再读 ...

恩恩,因为只学到这,所以多了一个步骤

cherrycdh 发表于 2021-4-30 15:04

Takitooru 发表于 2021-4-28 16:42
【但是我不知道在这里vba为啥是,而不是=】
解释:
因为line input# 语法就是这样解析:


明白了,谢谢,

cherrycdh 发表于 2021-4-30 15:05

Yjzhong0755 发表于 2021-4-28 17:09
逻辑错误吧,

两个文件,所以没有用elseif,如果要用的话估计也可以,嘿嘿,我有的时候就先跟着老师照本宣科,然后再想有没有其他的方法去做,然后么有的时候就会钻点牛角尖
页: [1]
查看完整版本: 恩还是vba的,反正我就是天天有问题 T_T,关于文本文件导入与输出