【分享成果,随喜正能量】过你自己想要的生活。不违法、不害人,自食其力、自得其乐,就挺好。 拒绝任何人控制你的生活,当然包括父母。他们有他们的人生,你有你的。 。
《VBA经典应用69例》,是我推出的第九套教程,教程是专门针对初级、中级学员在学习VBA过程中可能遇到的案例展开,这套教程案例众多,紧贴“实战”,并做“战术总结”,以便大家能很好的应用。教程的目的是要求大家在实际工作中要利用好VBA。本套教程共三册六十九个专题,今日内容是教程的应用10:以阅读模式打开工作簿
应用10 如何利用VBA打开文件
打开文件是我们日常工作的一项重基本的操作,打开文件的目的一般情况下有两种,一是阅读、提取数据,二是追加保存数据。这些过程利用VBA都是可以实现的。我们这讲的学习任务就是掌握如何利用VBA打开文件。
3 以"仅阅读"模式打开 Excel 工作簿,并尝试写入实例2:以"仅阅读"模式打开文件,以避免误操作
我们看下面的实例,这个实例中我们将打开上面的文件“打开文件.xlsx",但是,打开的模式是“仅阅读”模式。我们看下面的代码:
Sub mynzB()
'声明变量
Dim pathname
Dim wb As Workbook
'赋值
pathname = ThisWorkbook.Path & "\打开文件.xlsx"
'使用open语句打开文件并将其分配给wb对象,以便在代码中进一步使用它。
Set wb = Workbooks.Open(Filename:=pathname, ReadOnly:=True)
'在“只读模式”下打开文件后尝试写入。
wb.Sheets(1).Cells(1, 1).Value = "VBA"
End Sub
代码截图:
代码的解读:在上述代码中,我们打开文件的模式是:ReadOnly:=True 此时文件虽然被打开,但是却是只读的,如果写入内容后,无法保存原文件,只能以副本的模式保存,从而保护了原文件。
代码的运行结果:
我们看到由于文件的“只读”的,虽然也写入了内容,但无法保存。
4 打开文本文件,使用打开功能和文件编号读取其内容实例3:打开文本文件,读取其内容
这个实例中,我们会看到打开一个文本文件,然后将其内容输出到的当前工作表中。下面看代码:
Sub mynzC()
'声明变量
Dim int_txtfile As Integer
Dim str_file_Path As String
Dim str_File_Content As string
'赋值
str_file_Path = ThisWorkbook.Path & "\打开文件.txt"
' 查找FreeFile函数要使用的下一个可用文件号
int_txtfile = FreeFile
'打开文件
Open str_file_Path For Input As int_txtfile
'文件的内容存储在变量中
FileLength = LOF(int_txtfile)
str_File_Content = InputB(FileLength, int_txtfile)
'转换编码后放到工作表中
Sheets(1).Cells(1, 1).Value = StrConv(str_File_Content, vbUnicode)
' 关闭文件
Close int_txtfile
End Sub
代码截图:
代码解读:1)Open str_file_Path For Input As int_txtfile
这句代码的意义是以Input方式打开str_file_Path,打开文件的编号是int_txtfile。
2)FileLength = LOF(int_txtfile)
这句代码是获得文件的长度。这里要特别注意LOF 函数,这个函数返回一个Long , 表示使用Open语句打开的文件的大小,特别注意,这个大小是以字节为单位的。
3)str_File_Content = InputB(FileLength, int_txtfile)
这句代码是获得整个文件的内容,注意这里使用的是InputB(FileLength, int_txtfile)
Input 函数:从以Input或Binary模式打开的文件中返回包含字符的String。
语法:Input(number, [#]filenumber)
参数:
① number必需。 指定要返回字符个数的任意有效的数值表达式。
② filenumber 必需。 任何有效的文件编号。
- 对于文本文件内包含的字节数据请使用InputB 函数。使用InputB时,number指定的是要返回的字节个数,而非要返回的字符个数。
由于我们在代码中FileLength数值是以字节为单位的文件大小,所以在提取整个文件内容时我们用了InputB函数而非Input函数。
4) Sheets(1).Cells(1, 1).Value = StrConv(str_File_Content, vbUnicode)
以上代码将提取到的文件内容放到工作表中,这里利用了 StrConv()函数将非Unicode字符(包括汉字)转换为Unicode字符。关于这个函数,我在此详细地说明一下。
- StrConv 函数:返回按指定转换的变量(字符串)
语法:StrConv(string, conversion, [ LCID ])
参数:
① string 必需。 要转换的字符串表达式。
② conversion 必需。 Integer。 指定要执行的转换的类型的值的总和。
③ LCID 可选。 LocaleID(如果与系统 LocaleID 不同)。(系统 LocaleID 是默认设置)
Conversion参数可以有以下的值:
1) vbUpperCase 1 将字符串转换为大写字符。
2) vbLowerCase 2 将字符串转换为小写字符。
3) vbProperCase 3 将字符串中每个单词的第一个字母转换为大写。
4) vbWide 4 将字符串中的窄 (单字节) 字符转换为宽 (双字节) 字符。
5) vbNarrow 8 将字符串中的宽 (双字节) 字符转换为窄 (单字节) 字符。
6) vbKatakana 16 将字符串中的平假名字符转换为片假名字符。
7) vbHiragana 32 将字符串中的片假名字符转换为平假名字符。
8) vbUnicode 64 使用系统的默认代码页将字符串转换为Unicode。(在 Macintosh 上不可用)。
9) vbFromUnicode 128将字符串从Unicode转换为系统的默认代码页。(在 Macintosh 上不可用)
代码的运行结果:
[待续]
本讲内容参考程序文件:应用010.xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中:
【分享成果,随喜正能量】如果有人因为你拒绝被他控制而受到冒犯、伤害,那是他的事,与你无关。既成事实,无法改变,就不去计较。 。
,