ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 12730|回复: 30

[分享] 一点vba自学资料及别人帮助的资料整理(有些比较常用的)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-11-18 16:44 | 显示全部楼层 |阅读模式
本帖最后由 liulang0808 于 2013-11-22 14:40 编辑

QQ:1302084032,可以加我或者QQ群:281250721


感觉平时先对比较常用,但是不容易记住的内容整理了一小部分,以后会有针对性的整理,希望与大家分享
一.自动搜索文件夹下的文件名并保存
1.搜索当前文件夹下的文件名
Sub test() '读取当前文件夹下的文件名,并保存在表格内
    a = 1
    Set fso = CreateObject("scripting.filesystemobject")
    Set ff = fso.getfolder(ThisWorkbook.Path)
    For Each f In ff.Files
        If f.Name <> ThisWorkbook.Name Then
            'Workbooks.Open f '打开搜索到的文件
            Sheets(1).Cells(a, 1) = f.Name
            a = a + 1
        End If
    Next f
End Sub
2.搜索当前文件夹的下级文件夹里的文件名
Sub bbb() '修改之后的,读取下一级文件夹下的文件名
    a = 1
    Dim arr, MyPath$, MyName$, Fol
    MyPath = ThisWorkbook.Path
    For Each Fol In CreateObject("scripting.filesystemobject").getfolder(MyPath).subfolders
        For Each f In Fol.Files
            Sheets(2).Cells(a, 1) = f.Name
            a = a + 1
        Next f
    Next Fol
End Sub
二.选择对应区域的行或者列
1、选择对应区域的行
    Range("a1:a10").EntireRow.Select
    Cells(11, 1).EntireRow.Select
2、选择对应区域的列
    Range("a1:a10").EntireColumn.Select
    Cells(11, 1).EntireColumn.Select
三.返回非空行的最大行号和返回最大非空列的列号
1.返回非空行的最大行号
Cells(Rows.Count, 1).End(3).Row
Cells(Rows.Count, 1).End(xlUp).Row
2. 返回非空列的最大列号
Cells(1, Columns.Count).End(1).Column
Cells(1, Columns.Count).End(xlToLeft).Column
四.Checkboxes的返回对应的单元格地址,使用频率不是很大,但是关于checkboxes用处还是比较多的
Checkboxesvalue属性是返回是否被选中,text属性是指checkboxes的名称。以下代码是返回被选中的checkboxes对应的单元格地址。
Sub Macro1()
    Dim i As Byte
    With ActiveSheet
        For i = 1 To 4
            If .CheckBoxes(i).Value = 1 Then MsgBox .CheckBoxes(i).TopLeftCell.Address
        Next
    End With
End Sub

五.文本文件的一些操作

近期在论坛里看帖比较频繁,在能力范围之内辅助解决了个别问题,发现不少童鞋提出文本处理的需求,所以做了以下总结。
由于本人也是初学者,靠着个人的使用习惯及感觉来总结的,难免有些疏漏,希望各位给批评指正。
使用的office版本为2003.
(一)、个人感觉比较通用的文本操作方法
1、打开文本文件的几种模式
对文件文件在进行读或写操作之前,需要使用Open语句打开该文件。
open filename for input\output\append As  #number
filename 是完整文件名,为字符串格式(注意:必须是完整文件名,即路径+文件名)。
number 是需要打开的文件对应的文件号。是一个介于1 511 之间的整数(类型为整形Integer)。如果已经有多个文件号被使用,需要查找一个可用的文件号时可以使用FreeFile函数可以返回一个可用的文件号。例如: a = FreeFile
以下的文件号均以1为例进行说明
Input:读取文件。目前大家咨询问题使用比较多的就是打开一个文件读取其内容,执行相关的操作。
Output:写文件,目前使用比较少的,使用该模式,会清空已有的文件内容。
Append:写入现有文件的末尾。不同于output的清空文件内容,会在当前文件最后接着累加新内容
2、对文本文件进行写操作
Write语句产生一行由逗号分隔的值,并在日期的周围放上(#),在字符串的周围放上(")。
写入格式:Write #1str1str2
Print能写入任何格式的文本文件。
写入格式:Print #1str1str2
Printwrite实例:
Sub test11()
    Open ThisWorkbook.Path & "\output.txt" For Output As #1
    str1 = "123"
    str2 = "你好吗"
    str3 = "hello"
    Print #1, str1, str2, str3, Date
    Write #1, str1, str2, str3, Date
    Close #1
End Sub
output.txt文件内生成两列内容如下:
123           你好吗           hello         2013-11-22
"123","你好吗","hello",#2013-11-22#
说明:ThisWorkbook.Path表示相对路径,是指当前vba对应宏文件所在的文件夹,当前的output.txtvba对应的宏文件是同文件夹。
3、对文本文件进行读取操作
Input语句有如Write语句产生的那样并读取数据到变量列表中。
读取格式:Input #1str1str2
例如:用write写入文件如下:
    str1 = "123"
    str2 = "你好吗"
    str3 = "hello"
    Write #1, str1, str2, str3, Date
将以上内容写入文件结果为:
"123","你好吗","hello",#2013-11-22#
再使用input读取的时候使用如下语句:
Input #1, str5, str6, str7,str8,会发现str5="123",str6= "你好吗",str7="hello",str8=2013-11-22
个人感觉input不是很常用,但是在使用中一定要注意后面的变量个数,要不然会报错,比如本例中有四个变量分别对应写入的四个,如果再增加变量就会报错。
Line Input方式将读取整行字符串。
读取格式:Line Input # 1strLine
这个比较常用,一般是结合While Not EOF(1) 。。。Wend来进行正行读取,在读取正行数据后,可以用split函数进行拆分成数组,或者用instr函数对正行数据进行查找是否有需要的字符串。
4、关闭文本文件
Close #1,如果有多个文件就分别在相应的位置使用close #number进行关闭。最好不用一个close来关闭,避免引起误关闭。
(二)、文本打开的其他方法
excel文件里打开文本文件
Workbooks.OpenText Filename:=strfile, Origin:=936, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(1, 2), _
TrailingMinusNumbers:=True
或者直接用Workbooks.OpenText strfile
其中strfile是文本文件名的全路径。
本人用过几次,也是对应处理txt文件,主要是先用excel打开文本文件,然后在对应的excel里对该文本文件内容进行操作。
在对文本文件内容想excel表内拷贝的时候,个人感觉此操作方法效率比较高,但是在使用的时候需要注意打开的多个excel文件怎么去激活操作。
三、还有其他打开方法,但是由于本人能力有限,还不曾熟悉使用,没有介绍,请各位继续补充



补充内容 (2014-2-13 10:44):
在表格里使用公式TEXT(A1,"[DBNum1]")可以将A1单元格里的整数数字改变为汉字的数字

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-11-18 18:44 | 显示全部楼层
广告字体好大

TA的精华主题

TA的得分主题

发表于 2013-11-18 18:53 | 显示全部楼层
liucqa 发表于 2013-11-18 18:44
广告字体好大

不大不显目吧,是在突出主要的发贴目的!

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-18 20:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lujkhua 发表于 2013-11-18 18:53
不大不显目吧,是在突出主要的发贴目的!

有用就好啊。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-19 07:48 | 显示全部楼层
liucqa 发表于 2013-11-18 18:44
广告字体好大

那个有用就好啊

TA的精华主题

TA的得分主题

发表于 2013-11-21 15:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-11-21 15:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
当然那,做广告就没有意义了

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-21 16:09 | 显示全部楼层
yangjia1980 发表于 2013-11-21 15:39
当然那,做广告就没有意义了

方便大家交流了

TA的精华主题

TA的得分主题

发表于 2013-11-22 10:32 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-22 10:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lbay 发表于 2013-11-22 10:32
继续整理啊,呵呵

又开了一个文本操作的帖子,
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 14:48 , Processed in 0.044154 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表