也玩一下excel文档的VBA编程

原创 2005年04月30日 15:01:00

一直没有接触过VBA编程,最近工作中遇到一个问题迫使我研究了一下简单的VBA编程。原来效果还是不错,通过一段VBA代码的确帮我做了大量对excel文档的重复的拷贝、粘贴工作。

简单的理解VBA脚本就是一种可以在excel中运行的宏脚本,他在VB语法的基础上提供了很多针对excel操作的对象模型API,简单看一下他的帮助文档就可以大概了解他是如何来操作excel的。其实如果简单的操作,你直接在excel菜单里录制一下宏,excel会自动为你生成一段VBA脚本的。打开visual basic editer就可以编辑他。如果你从来没有写过VBA脚本,可以录制一下手工操作来参考他生成的代码,按照自己的要求修改。

下面是我遇到的问题:我有若干的文档中,有很多下面这样格式的表格数据

1-1-1-1

1-1-1-1-1

1-1-1-1-2

1-1-1-1-3

1-1-1-1-4

上级变态要求改成下面的样子的格式:

4

1

1

 

 

4

1

2

 

 

4

1

2

1

 

4

1

2

2

 

完成这个工作如果不写脚本来完成,那就只有手工的完成,十多个文档不知道会做多久这样无聊重复的工作。最后经过简单的研究写了vba脚本完成了这个工作。脚本的工作应该先把上面的一个格子辟分成5个,然后把1-1-1-1-3依短线分开分别填到辟分出来的五个格子里。

下面是的脚本代码,不要被这么长的代码吓倒,其实很多代码都是用录制宏的办法生成的,不会写某个操作的代码,最好的办法就是录制一段宏生成代码然后再来看。比如选择几个格子然后拷贝,粘贴到另一个地方。看看生成的代码基本就可以看懂了。如果你的工作中遇到了这样需要大量修改excel文档的工作,可以考虑一下写一段vba脚本来完成繁琐重复的劳动。

 

Sub splitCell(beginRowId, endRowId)

 

 

    Dim begRange, endRange, endRange2

       

    begRange = "A" & beginRowId

    endRange = "A" & endRowId

    endRange2 = "E" & endRowId

   

    Range(begRange & ":" & endRange).Select

    Selection.ClearFormats

   

    Range(begRange & ":" & endRange2).Select

   

    Selection.Borders(xlDiagonalDown).LineStyle = xlNone

    Selection.Borders(xlDiagonalUp).LineStyle = xlNone

    With Selection.Borders(xlEdgeLeft)

        .LineStyle = xlContinuous

        .Weight = xlThin

        .ColorIndex = xlAutomatic

    End With

    With Selection.Borders(xlEdgeTop)

        .LineStyle = xlContinuous

        .Weight = xlThin

        .ColorIndex = xlAutomatic

    End With

    With Selection.Borders(xlEdgeBottom)

        .LineStyle = xlContinuous

        .Weight = xlThin

        .ColorIndex = xlAutomatic

    End With

    With Selection.Borders(xlEdgeRight)

        .LineStyle = xlContinuous

        .Weight = xlThin

        .ColorIndex = xlAutomatic

    End With

    With Selection.Borders(xlInsideVertical)

        .LineStyle = xlDash

        .Weight = xlThin

        .ColorIndex = xlAutomatic

    End With

    With Selection.Borders(xlInsideHorizontal)

        .LineStyle = xlContinuous

        .Weight = xlThin

        .ColorIndex = xlAutomatic

    End With

   

    With Selection

        .HorizontalAlignment = xlLeft

        .VerticalAlignment = xlTop

        .WrapText = False

        .Orientation = 0

        .AddIndent = False

        .IndentLevel = 0

        .ShrinkToFit = False

        .MergeCells = False

    End With

   

    Selection.NumberFormatLocal = "@"

End Sub

 

 

Sub ParseSplitTestId(cellRowId)

'parse id String use "-"

 

Dim tmpStr, myArr

 

tmpStr = Cells(cellRowId, 1).Value

 

myArr = Split(tmpStr, "-", 5)

 

    For intI = 0 To UBound(myArr)

       'MsgBox "--" & myArr(intI)

       'Range("A" & (cellRowId + intI)).Value = myArr(intI)

       Cells(cellRowId, 1 + intI).Value = CStr(myArr(intI))

    Next

 

End Sub

 

Sub ParseSplitStr(beginRowId, maxRowId)

Dim count, tmpId, tmpStr

 

count = maxRowId - beginRowId + 1

For intI = 0 To count

   

    tmpId = beginRowId + intI

   

    'tmpStr = Cells(tmpId, 1).Value

    'MsgBox (tmpStr = "")

    'If tmpStr = "" Then

      

    '   Exit For

    'End If

    ParseSplitTestId (tmpId)

Next

End Sub

 

Sub ProcessOneFile(filename, maxRowId)

 

Dim beginRowId

 

beginRowId = 8

 

Windows(filename).Activate

Worksheets(2).Select

 

Call splitCell(beginRowId, maxRowId)

 

Call ParseSplitStr(beginRowId, maxRowId)

Windows(filename).ActivateNext

 

MsgBox filename & " - process sucess!"

End Sub


<script type="text/javascript"> &lt;!-- google_ad_client = "pub-4465827781731051"; google_ad_width = 234; google_ad_height = 60; google_ad_format = "234x60_as"; google_ad_type = "text_image"; google_ad_channel =""; //--&gt; </script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script><iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-4465827781731051&amp;dt=1126781722875&amp;format=234x60_as&amp;output=html&amp;ad_type=text_image&amp;nloc=http://blog.csdn.net/fckeditor/editor/fckeditor.html?InstanceName=Editor_Edit_FCKEditor&amp;Toolbar=Default&amp;u_h=768&amp;u_w=1024&amp;u_ah=740&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=15&amp;u_java=true" frameborder="0" width="234" scrolling="no" height="60" allowtransparency="65535"></iframe>

Excel vba 写的一个宏,很久没用了,备份一下,备查

Sub 水电费统计() AllTest Dim roomNum As String '宿舍号 Dim name As String '姓名 ...
  • wssiqi
  • wssiqi
  • 2013年07月28日 09:04
  • 1683

导出批注工具--用VBA脚本导出Excel评审文档的所有批注

1、先给出原始excel文件,例如    2、本文工具将针对上述的评审文档,导出所有批注,且将批注生成一个新的sheet页,该sheet页跟评审文档在同一个文档中,如下格式: 3、生成如上...

通过VBA将excel数据导入至word文档

通过VBA将excel数据导入至word文档

写了一段VBA代码后, Excel每次保存时都弹出警告:”此文档中包含宏、Activex控件、XML扩展包信息“(office 2007)

前言:今天在写一段VBA代码之后,遇到一个问题,             Excel每次保存时就报一个警告(使用的是office 2007):                          此...
  • sxzlc
  • sxzlc
  • 2011年12月27日 16:29
  • 8732

EXCEL VBA编程的一些小结

最近单位内部的项目里要用到些报表EXCEL的生成,虽说JAVA 的POI可以有这能力,但觉得还是可能比较麻烦,因此还是转用.net来搞,用visual studio 2003配合office 2003...

vba excel编程三日谈(2)

表格基本操作 由于表格操作内容繁多, 本文将以例子为主演示一些常用的操作. 下面的例子将演示怎么遍历worksheet,选中worksheet,添加worksheet,删除workshee...
  • nodeman
  • nodeman
  • 2015年07月31日 13:40
  • 380

vba excel编程三日谈(1)

最近由于要修改一个excel report,见识了vba的强大。 这个report是一个大牛3年前写的,每天只需打开该文件, 就会自动连接oracle的dev和uat数据库读取最新的市场数据, 生成6...
  • nodeman
  • nodeman
  • 2015年07月31日 13:38
  • 445

Excel中的VBA编程

目的:有时我们需要对Excel文件中大量的数据进行整理,此时如果使用手动整理会非常繁琐而且容易出错。而如果采用VBA语言,在Excel中根据需求编写一段简单的代码就能自动完成大量数据的整理工作。 ...

Excel-如何用VBA编程操作Pivot Table

Excel的Pivot Table在现实的工作中经常使用到,也常常需要用VBA来自动操作Pivot Table。 最近发现不错的代码样例,特摘抄供大家参考学习。 Create A Pivot...

Excel VBA编程的常用代码(备用待查)

使用Dim语句 Dim a as integer ‘声明a为整型变量 Dim a ‘声明a为变体变量 Dim a as string ‘声明a为字符串变量 Dim a as currency ...
  • nodeman
  • nodeman
  • 2015年08月25日 17:01
  • 285
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:也玩一下excel文档的VBA编程
举报原因:
原因补充:

(最多只允许输入30个字)