这段时间的工作都被一堆一堆的文档湮没了...
CMMI涉及到的文档,额滴个神,跟一座山一样压得人喘不过气来..... CMMI造假比真干要难得多啊~~我顿时对做假账的会计们肃然起敬,他们太不容易了,把明明不存在的事情说得很真的一样,还要拟制一堆的证据证明那是真的,这是多么高难度且有技术含量的一件事情!而我们现在呢,起码项目是实实在在经历过的,只是把开发过程小小地“美化”一下,就已经让大家死去活来了...
好吧,我承认我改不了话痨本色。停止碎碎念,把这段时间写的VBA脚本整理如下:
- 选择
选择单元格:Range("H5").Select 选择列:Columns("C:C").Select
选择Sheet:Sheets("Sheet1").Select 选择区域:Range("C1:C8").Select
- 读取指定目录下的文件名列表
Dim filelist As String
MyExcelFileName = Dir("E:\temp\") '------指定文件目录
Do While Len(MyExcelFileName) > 0
If (Len(filelist) <> 0) Then
filelist = filelist + "," + MyExcelFileName
Else
filelist = filelist + MyExcelFileName
End If
MyExcelFileName = Dir
Loop
用msgbox语句查看filelist。若E:\temp下存在1.xls和2.xls两个文件,那么filelist的值为:1.xls,2.xls
若要对目录中的文件进行批量操作,则
f = Split(filelist, ",")
For Each i In f()
Workbooks.Open Filename:="E:\temp\" & i '自己修改路径
'----添加操作-----
'--------------------
ActiveWorkbook.Save '保存修改
ActiveWindow.Close '关闭文件
Next
- 修改Excel中所有Sheet页某个单元格的内容
For j = 1 To Sheets.Count
Sheets(j).Select
Range("H3") = "myValue"
Next
- 修改某些单元格的公式
Range("K10").Formula = "=if(J10=0,0,sum(D10/J10))"
Range("K10").AutoFill Destination:=Range("K10:K25"), Type:=xlFillDefault
上两行代码的作用是,为单元格K10设置公式"=if(J10=0,0,sum(D10/J10))",并将公式自动向下填充到K25。即,K11设置的公式是"=if(J11=0,0,sum(D11/J11))";......K25设置的公式是"=if(J25=0,0,sum(D25/J25))"
- 文本替换
Columns("C").Replace what:="oldText", Replacement:="newText"
- 将“文本格式”的数字改为“数字格式”
Range("D10:H25").Select
For Each rng In Selection
'遍历当前选中区的所有单元格
For Each cell In rng.Cells
If (cell.PrefixCharacter = "'") Then
cell.Value = "" & cell.Value
End If
Next
Next
- 字符串处理
比如,获得文件名列表:“XXXXX_20100304.xls”,“XXXXXXXXXXX_20100320.xls”,“XX_20100401.xls”……我需要将文件名中的时间,与文件内容里的时间进行统一。所以,我们需要一个字符串处理的方法,能自动获得文件名中的时间;再把它赋值给Excel文件的某个单元格。
Dim s, t
s = "地方很少看见饭后就开_20100304.xls"
t = Mid(s, 12, 8) '在[字符串]中[从第几个开始]取出[长度个字符串]
yearNum = Left(t, 4)
monthNum = Mid(t, 5, 2)
dayNum = Right(t, 2)
myTime = yearNum + "-" + monthNum + "-" & dayNum
MsgBox myTime '输出的myTime为:2010-03-04
PS. 对于VBA的函数,我们根本不需要记忆。对于某些基本操作(选择、赋值一类的),我们可以录制宏,再通过Alt+F11进入代码编辑器,来了解VBA的实现。