《神奇的VBA》编程:批量设置指定列格式

------ 本篇前言------ 

日常办公中,经常需要使用VBA编程来批量为报表中某些列设置格式,比如水平/垂直对齐,设置字体颜色, 背景色, 字体名称,字号,显示或者隐藏。 这点需求在我本人开发基于WPS和Ms Office的商用ERP系统插件时也经常遇到的操作。偶尔遇到该操作,直接逐一设置列格式即可。但如果经常这样操作,那么就可以思考下去封装一个常用格式化代码, 便于快速复用。

本篇《神奇的VBA》编程将分享一些常见的VBA编码思路,纯属抛砖引玉。

------ 需求案例------ 

需求1:批量对下图示例报表中名称为"序号","项目名称","订单号","数量" 的列设置水平居中。 

注意本示例报表纯属简单的报表,实际职场的工作报表中可能有十几个或者二三十列有效数据。

思路1: 根据需求遍历报表列逐一设置。

Sub demo()Dim arr As Variantarr = Array("序号", "项目名称", "订单号", "数量")Dim c As IntegerFor Each e In arr For c = 1 To ActiveSheet.UsedRange.Columns.Count If Cells(1, c) = e Then Columns(c).HorizontalAlignment = xlCenter End If NextNextEnd Sub

上面代码是很常见的代码书写方式。 运用了常见的数组和遍历循环。如果对其不了解的,可以查阅《神奇的VBA》插件参考学习。

思路2:善用“《神奇的VBA》编程:快速定位报表列”文章中提供的自定义函数,批量设置。

自定义函数见下面

Function GetColumn(biao As Worksheet, fieldRowNumber As Byte, fieldname As String) As IntegerDim c As LongGetColumn = 0For c = 1 To biao.UsedRange.Columns.Count If Cells(fieldRowNumber, c) = fieldname Then GetColumn = c: Exit For End IfNextEnd Function

根据上面代码, 重新实现上面需求。代码如下

Sub demo2()Dim arr As Variantarr = Array("序号", "项目名称", "订单号", "数量")Dim c As Integer
For Each e In arr c = GetColumn(ActiveSheet, 1, CStr(e)) If c > 0 Then Columns(c).HorizontalAlignment = xlCenterNextEnd Sub

通过运行,也很好地实现了案例需求。

在此需求的基础上,进行更多的设置,比如加粗或者设置字体为红色。

Sub demo3()Dim arr As Variantarr = Array("序号", "项目名称", "订单号", "数量")Dim c As Integer
For Each e In arr c = GetColumn(ActiveSheet, 1, CStr(e)) If c > 0 Then Columns(c).Font.Color = vbRed Columns(c).Font.Bold = True End IfNextEnd Sub

运用了上面的编码思路实现需求后, 您肯定会想,对报表列的选择是不确定的, 怎么样实现呢?其实可以设置ParamArray参数数组。 《神奇的VBA》插件中在Fuction过程中介绍了ParamArray参数数组的使用方法。 下面分享几个写好的设置列格式的函数。有需求的职场朋友们可以直接拿来复用。

函数示例1: 批量删除指定名称列

Sub 删除某些列(ParamArray arr())For x = LBound(arr) To UBound(arr) ColumnID = GetColumn(ActiveSheet, 1, CStr(arr(x))) If ColumnID > 0 Then ActiveSheet.Columns(ColumnID).Delete End IfNextEnd Sub'此处务必注意:ParamArray是Variant类型,所以arr(x)也是Variant类型。 '不转换的话会产生类型不匹配错误

函数示例2: 批量隐藏指定名称列

Sub 隐藏某些列(ParamArray arr())For x = LBound(arr) To UBound(arr) ColumnID = GetColumn(ActiveSheet, 1, CStr(arr(x))) If ColumnID > 0 Then ActiveSheet.Columns(ColumnID).Hidden = True End IfNextEnd Sub

函数示例4: 批量居中指定名称列

Sub 显示某些列(ParamArray arr())For x = LBound(arr) To UBound(arr) ColumnID = GetColumn(ActiveSheet, 1, CStr(arr(x))) If ColumnID > 0 Then ActiveSheet.Columns(ColumnID).Hidden = False End IfNextEnd Sub

函数示例4: 批量居中指定名称列

Sub 居中某些列(ParamArray drr())For x = LBound(drr) To UBound(drr) ColumnID = GetColumn(ActiveSheet, 1, CStr(drr(x))) If ColumnID > 0 Then ActiveSheet.Columns(ColumnID).HorizontalAlignment = xlCenter End IfNextEnd Sub

根据上面分享的函数示例,实战下批量显示和隐藏报表中名称为"序号","项目名称","订单号","数量" 的列。 

Sub demo4()隐藏某些列 "序号", "项目名称", "订单号", "数量"End Sub
Sub demo5()显示某些列 "序号", "项目名称", "订单号", "数量"End Sub
Sub 隐藏某些列(ParamArray arr())For x = LBound(arr) To UBound(arr) ColumnID = GetColumn(ActiveSheet, 1, CStr(arr(x))) If ColumnID > 0 Then ActiveSheet.Columns(ColumnID).Hidden = True End IfNextEnd Sub
Sub 显示某些列(ParamArray arr())For x = LBound(arr) To UBound(arr) ColumnID = GetColumn(ActiveSheet, 1, CStr(arr(x))) If ColumnID > 0 Then ActiveSheet.Columns(ColumnID).Hidden = False End IfNextEnd Sub

本篇分享的思路和代码抛砖引玉!

原创码字不易

欢迎"点赞","转发" 或点击""


(0)

相关推荐