最近使用VBA自动处理EXCEL的数据,用着用着觉得很方便,于是写了一些小脚本,不过水平有限,代码很冗余。
个人使用的脚本一般都是符合个人使用的特定场景,不像高手写的有很强的复用性。
不过既然写了,方便了个人的同时,我还是抛砖引玉分享一下,万一能帮到人呢!同时自己也留个备忘。
这里主要是:传播一种使用脚本解决重复性、简单、单调工作时,主动去寻找使用脚本解决的思想。
本案例需求是将图2中的数据按照图四的样式展开,同时生成一个目录页,所以写了这个脚本用来一键生成。
附上脚本的一部分:
Sub lianjie() '在首页生成每个sheet页的超链接
Dim x As Long
x = 0
For x = 5 To Sheets.Count
Sheets(3).Select '我的首页设在第三页,所以选中第三页
Sheets(3).Hyperlinks.Add Anchor:=Cells(9 + x, 4), Address:=ActiveWorkbook.Name, SubAddress:=Sheets(x).Name & "!A1", TextToDisplay:=Sheets(x).Name
Next
End Sub
'写入表名,这里说一下使用场景,我需要从另个工作薄中获取每个sheet页(sheet页模板在我的<span style="font-size:12px;"><span class="link_title"><a target=_blank href="http://blog.csdn.net/zutsoft/article/details/45441343">EXCEL通过VBA生成SQL,自动生成创建表结构SQL</a></span></span> 博文里给出了)
'存在指定位置的数据库表名,每次手工一页一页复制很累,所以写个脚本同步过来
Sub Write_Tablename()
Dim x As Long '声明变量x,用来循环
str_source = ""
x = 0
For x = 5 To Sheets.Count
str_source = Trim(Sheets(3).Cells(9 + x, 5)) '获取源表名,源表名位于从第9行开始的第五列。
If str_source <> "" Then '如果源标记不为空
'截取前四位和元标记+‘_’对比
If Left(str_source, 4) = Trim(Sheets(3).Cells(11, 2)) & "_" Then '从左边截取4位
str_temp = Mid(str_source, 5) '截取第5位到字符串尾
Else
str_temp = str_source
End If
str_target = "TS_" & Trim(Sheets(3).Cells(11, 2)) & "_" & str_temp '去除空格,生成“TS_源标记_表名”格式的ts层表名
str_mapping = LCase("m_" & Trim(Sheets(3).Cells(11, 2)) & "_ts_" & str_temp) '生成 “m_源标记_ts_表名” 格式的infamatica使用的mapping 名
Sheets(3).Cells(9 + x, 6) = str_target
Sheets(3).Cells(9 + x, 7) = str_mapping
Sheets(x).Cells(7, 3) = str_source
Sheets(x).Cells(7, 10) = str_target
End If
Next
End Sub
'生成序号,图三中的序号
Sub crea