.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
office 办公软件中利用VBA(Visual Basic for Application)宏

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

 
office 办公软件中利用VBA(Visual Basic for Application)宏

唐铁鑫

  谈到宏,很多人想到的是宏病毒,其实如果有正版杀毒软件,打开了实时防护,设置好宏安全性,可以利用宏来完成许多办公自动化功能。

  打开word软件,从文件主菜单中“工具”->“宏”->“安全性”,设置安全性为中,这样就可以选择执行宏。安装office的时候,应该定制安装,在“office 工具”里选上“Visual Basic帮助”,这样就能获得非常完善的关于VBA编程环境、VBA语言参考、VBA对象等的帮助文档。从“工具”->“宏”->“Visual Basic 编辑器”可以打开VBA编程环境——“Microsoft Visual Basic”。在编程环境中打开“帮助”->“Microsoft Visual Basic帮助”,就可以看到帮助了。



 

  很多人觉得学习Visual Basic没有用,事实上,Visual Basic系列的编程语言包括VB、VBA、VBScript等,可以写网页、办公自动化编程、应用编程。在一些其他公司的应用软件中也是可以用VBA的,例如Corel Draw。这里举几个例子来说明VBA的使用。

  如果有数十个文档需要合并为一个文档,逐个打开、拷贝是件麻烦事,可以用宏来完成。

例一:合并文档。新建一个窗体,窗体上放一个按钮。工具箱可以从“视图”->“工具箱”打开。

'按钮事件
Private Sub CommandButton1_Click()
Dim sPath As String 'sPath用来保存路径
Dim tem As String '中间变量

Set newDoc = Documents.Add  '用Documents.Add增加一个新文档
With newDoc
    .SaveAs FileName:="D:/txtal.doc"   '新文档保存的完整路径
End With
ActiveDocument.close                    '关闭新建的文档

With Dialogs(wdDialogFileFind)   '设置文本查找对话框
    .SortBy = 2                  '文件按名称排列
    .SearchName = "*.txt"        '只列出文本文件
    .Update                      '更新
End With

If Dialogs(wdDialogFileFind).Show = -1 Then             '如果按下打开,就执行
  sPath = Dialogs(wdDialogFileFind).SearchPath         '将查找对话框打开的路径附值给SPath
  Dialogs(wdDialogFileFind).Execute
Else
  Exit Sub            '如果取消或者关闭,就退出
End If

With Application.FileSearch      '设置应用程序的查找
    .NewSearch                   '新查找
    .LookIn = sPath              '将新查找的路径设置为文件对话框的路径(sPath)
    .SearchSubFolders = True     '查找子目录
    .FileType = msoFileTypeAllFiles  '查找所有文件类型,这里可以设置其他类型,具体见FileSearch对象的FileType属性
    .FileName = "*.txt"          '查找后缀为txt的文件
    .Execute                     '执行文件查找

  Documents.Open ("D:/txtal.doc")  '打开"D:/txtal.doc"
  Set Range2 = ActiveDocument.Content  '设置Range2对象为活动文档的内容
For i = 1 To .FoundFiles.Count   '把找到的文件打开,拷贝文件内容,加到新建的D:/txtal.doc文件中
  Documents.Open (.FoundFiles(i))  '打开第i个找到的文件
  ActiveDocument.Content.Select    '全选活动文件的内容
  Selection.Copy                   '拷贝选中的内容
  ActiveDocument.Close             '关闭活动文档
  Range2.Collapse Direction:=wdCollapseEnd '设置粘贴位置为Range2的最后
  Range2.Paste                             '将拷贝的内容粘贴到Range2
Next i
  ActiveDocument.Save                      '保存活动文档
  ActiveDocument.Close                     '关闭活动文档

End With

End Sub

  如果有大量的word文档需要修改某个术语或者什么固定的语句,逐一打开是件麻烦事,利用宏可以很很快完成这项任务,而且不会错漏。对例一修改一下就可以完成这个任务。

例二:全文查找替换。

Private Sub CommandButton1_Click()
Dim sPath As String

With Dialogs(wdDialogFileFind)   '设置文本查找对话框
    .SortBy = 2                  '文件按名称排列
    .SearchName = "*.doc"        '只列出*.doc文件
    .Update                      '更新
End With

If Dialogs(wdDialogFileFind).Show = -1 Then             '如果按下打开,就执行
  sPath = Dialogs(wdDialogFileFind).SearchPath         '将查找对话框打开的路径附值给SPath
  Dialogs(wdDialogFileFind).Execute
Else
  Exit Sub            '如果取消或者关闭,就退出
End If

With Application.FileSearch
    .NewSearch
    .LookIn = sPath
    .SearchSubFolders = True
    .FileType = msoFileTypeWordDocuments             '查找文件类型为word文档
    .Execute
For i = 1 To .FoundFiles.Count
  Documents.Open (.FoundFiles(i))
  ActiveDocument.Select
  With Dialogs(wdDialogEditReplace)
  On Error GoTo Err
    .Find = TextBox1.Text
    .Replace = TextBox2.Text
    .ReplaceAll = True
    .Execute
  End With
  ActiveDocument.Save
  ActiveDocument.Close
Next i

End With
Err:
If TextBox1.Text = "" Then
  ActiveDocument.Save
  ActiveDocument.Close
End If
MsgBox "请输入替换查找的字串"

End Sub

  Exel中我没找到将行变列、列变行的功能,于是写了个宏。

例三:在Exel中将行变成列。在Exel中从“工具”->“宏”->“Visual Basic 编辑器”打开编程环境,通过“插入”->“模块”,建立宏。

Sub change()           'change宏
  Dim row(0 To 20, 0 To 20) As String        '定义一个21*21的二维数组
  Range("A1").Select                         '选定A1单元格
For i = 0 To 20
    For j = 0 To 20
        row(i, j) = ActiveCell.Offset(i, j).Value   '把A1位移(i,j)个单元格的单元格的内容依次附值给数组row(i,j)
    Next j
Next i

Range("A1").Select
On Error GoTo err
For i = 0 To 20
    For j = 0 To 20
        ActiveCell.Offset(i, j).Value = row(j, i)  ''把数组row(j,i)的内容依次附值给A1位移(i,j)个单元格的单元格
    Next j
Next i
Exit Sub
err:
MsgBox Error

End Sub

[email protected]




相关文章

相关软件