关于脚本:VBA中的“Dim fso,MyFile,FileName,TextLine”是什么?

What is “Dim fso, MyFile, FileName, TextLine” in VBA?

我从这里一个愿意花费时间和精力与Noobs分享知识的好人那里收到了这段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub ReadLinesFromAFileOneAfterAnother ()
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, MyFile, FileName, TextLine

Set fso = CreateObject("Scripting.FileSystemObject")

FileName ="c:\testfile.txt"

Set MyFile = fso.OpenTextFile(FileName, ForReading)

'' Read from the file
Do While MyFile.AtEndOfStream <> True
    TextLine = MyFile.ReadLine

    '' Do stuff to TextLine

Loop
MyFile.Close
End Sub

虽然我知道这段代码执行什么任务,但我仍然想知道它的每个元素的含义和作用。请任何人向我解释一下这段代码的第三行是关于什么的:

1
Dim fso, MyFile, FileName, TextLine

首先,"FSO"是什么?我知道它代表"文件系统对象",但它几乎不能向我解释它到底是什么以及它完成了什么。下面这三个词是什么意思("myfile"、"filename"、"textline")?它们是某种参数吗?

我读过这个:http://msdn.microsoft.com/en-us/library/h7se9d4f(vs.85).aspx

以下是:http://msdn.microsoft.com/en-us/library/ebkhfaaz(vs.85).aspx

但我觉得这些材料是为那些自己能写的人而写的——我几乎什么都不懂。当然,有些事情或多或少是清楚的,但是还有很多其他的术语和单词我不知道!最终,没有一个完整清晰的画面。

所以,我放弃了,决定回到这里。这个网站可能是互联网上为数不多的(事实上我还没有见过其他网站)在其规则中声明:"没有问题是太琐碎或太"新手"。这给了我一种提出这个问题的理由。

所以,任何人,请用简单的术语向我解释"fso"是什么。准确地说,上面代码的第三行是关于什么的。

提前谢谢大家。


代码行:

1
Dim fso, MyFile, FileName, TextLine

声明称为variant类型的"variables"的内容。

变量是内存中带有名称和类型的一点空间。您可以使用它们让程序知道您稍后将在代码中使用它们。

通常情况下,你会给变量一个类型(比如整数或字符串),但是编码人员没有,所以它默认为variant,它可以接受任何类型(本质上)。

完成后:

1
Set fso = CreateObject("Scripting.FileSystemObject")

然后,fso包含一些代码,可以对文件系统做一些事情。

1
Set MyFile = fso.OpenTextFile(FileName, ForReading)

意味着您正在使用fso功能打开在"filename"变量中指定的文件名,并在"myfile"变量中对其进行引用。

因此,您可以使用myfile变量对该文件进行进一步的处理。

"do while"循环一次读取一行文件(myfile.readline),并将结果放入"text line"变量中,每次循环时,该变量保存文件中不同的文本行,直到文件完成。

这段代码的思想是一行一行地读取文件,当您遇到每一行的内容时,对其进行一些处理。你可以打印它,记录它,显示给用户,等等,如子标题所示!

老实说,关于VB的基本知识对于你能够解释这些代码是至关重要的,所以我建议你找一个在线教程或一本书。


这一行所要做的就是将这些变量定义为代码中要进一步使用的变量。

另请参阅StackOverflow上的这篇文章:在VisualBasic和Basic中,dim代表什么?


1
Dim fso, MyFile, FileName, TextLine

这一行定义变量。这样做的目的是帮助捕获打字错误,因为变量在整个脚本中都被引用。这通常与e option explicit(通常位于脚本顶部)一起使用。

默认情况下,VBA不需要定义该变量。可以通过使用选项Option Explicit来覆盖这种[愚蠢的]默认行为,以便在未定义特定变量时生成"未定义变量"异常。如果没有这个设置,在问题的代码片段中,例如,在第4行,我们错误地输入了名称filenam,省略了e,vba将继续,有效地有两个变量filename和filenam;稍后在程序中,正确地使用变量filename时,将使用空值,从而导致细微和难以发现错误。


第三行简单地定义了它们,以便稍后使用。fso、文件名等只是在代码后面使用的占位符变量。fso被声明并设置为新的文件系统对象。这可以是任何类型的文件系统-NTFS、FAT等,但这意味着您将要使用系统上的文件。然后使用它来打开指定的只读文件,并去掉其余代码。您需要指定fso,以便程序知道从何处读取-无论是文件、输入流还是单独的附加文件系统。

希望能有所帮助!