一些WORD VBA代码(替换页眉页脚、批量设置格式、图片插入等)

一些WORD VBA代码(替换页眉页脚、批量设置格式、图片插入等)

hdzgx

2017-12-01

关注

转自:http://www.cnblogs.com/Ellen/archive/2011/6/6.html

替换页眉页脚[word]

Sub 替换页眉页脚()
If ActiveWindow.View.SplitSpecial <>wdPaneNone Then ActiveWindow.Panes(2).Close
With ActiveWindow.ActivePane.View
  .Type = wdPrintView
  .SeekView = wdSeekCurrentPageHeader
  Selection.WholeStory
  Selection.Delete Unit:=wdCharacter,Count:=1
  Selection.TypeText Text:="这是替换后的页眉"
  .SeekView = wdSeekMainDocument
End With

WordBasic.ViewFooterOnly
Selection.WholeStory
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.TypeText Text:="这是替换后的页脚"
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End Sub

posted @ 2011-06-06 21:23 半点忧伤 阅读(95) 评论(1)编辑

批量格式设置word

请参考:(请确保所需的文档在同一文件夹下)
Sub批量格式设置()  '此代码为指定文件夹中所有选取的WORD文件的进行格式设置
Dim MyDialog As FileDialog, vrtSelectedItem As Variant, Doc AsDocument
' On Error Resume Next '忽略错误
'定义一个文件夹选取对话框
Set MyDialog =Application.FileDialog(msoFileDialogFilePicker)
With MyDialog
.Filters.Clear '清除所有文件筛选器中的项目
.Filters.Add "所有 WORD 文件", "*.doc", 1 '增加筛选器的项目为所有WORD文件
.AllowMultiSelect = True '允许多项选择
If .Show = -1 Then '确定
Application.ScreenUpdating = False
For Each vrtSelectedItem In .SelectedItems '在所有选取项目中循环
Set Doc = Documents.Open(FileName:=vrtSelectedItem,Visible:=False)
With Doc
With .PageSetup '进行页面设置
.Orientation = wdOrientPortrait '页面方向为纵向
.TopMargin = CentimetersToPoints(4.1) '上边距为4.1cm
.BottomMargin = CentimetersToPoints(4.1) '下边距为4.1cm
.LeftMargin = CentimetersToPoints(3.05) '左边距为3.05cm
.RightMargin = CentimetersToPoints(3.05) '右边距为3.05com
.Gutter = CentimetersToPoints(0) '装订线0cm
.HeaderDistance =CentimetersToPoints(1.5)  '页眉1.5cm
.FooterDistance = CentimetersToPoints(1.75) '页脚1.75cm
.PageWidth = CentimetersToPoints(21) '纸张宽21cm
.PageHeight = CentimetersToPoints(29.7) '纸张高29.7cm
.SectionStart = wdSectionNewPage '节的起始位置:新建页
.OddAndEvenPagesHeaderFooter = False '不勾选“奇偶页不同”
.DifferentFirstPageHeaderFooter = False '不勾选“首页不同”
.VerticalAlignment = wdAlignVerticalTop '页面垂直对齐方式为“顶端对齐”
.SuppressEndnotes = False '不隐藏尾注
.MirrorMargins = False '不设置首页的内外边距
.BookFoldRevPrinting = False '不设置手动双面打印
.BookFoldPrintingSheets = 1 '默认打印份数为1
.GutterPos = wdGutterPosLeft '装订线位于左侧
.LayoutMode = wdLayoutModeLineGrid '版式模式为“只指定行网格”
End With
.Close True
End With
          Next
         Application.ScreenUpdating = True
       End If
    End With
    MsgBox "格式化文档操作设置完毕!",vbInformation
End Sub

posted @ 2011-06-06 21:20 半点忧伤 阅读(89) 评论(0)编辑

VBA实现批量修改Word文档的页脚内容

VBA实现批量修改Word文档的页脚内容

功能示例:

有很多个doc文档,页脚的电话变了,如原电话是4007339339,现在变成4007168339了,要实现批量替换,可使用此程序。

使用说明:

1、复制下面程序代码到VBA里后,点“工具”-“宏”-“宏”-“change”-“运行”

2、 输入目录(不要输入根目录,要不速度会很慢)

3、 输入要查找的内容

4、 输入的替换成你要的内容

--------------------------------------------

'下面是程序代码,复制到Word的VBA里

'此子程序放在Word对象里
Option Explicit
Sub change()

Dim s As String
Dim wb As Object
Dim i As Long
Dim load As String
Dim find As String
Dim change As String

load =InputBox("输入要修改页脚的文件夹路径,自动扫描子文件夹-------------垃圾桶丁2009-3-8")  '要变更的目录
find = InputBox("输入要查找的页脚内容")  '查找的内容
change = InputBox("请问要替换成什么内容?") '替换的内容

Set wb = Application.FileSearch
    Withwb
       .NewSearch
       .LookIn = load
       .SearchSubFolders = True
       .FileName = "*.doc"
       .FileType = msoFileTypeExcelWorkbooks
       If .Execute() > 0 Then
           For i = 1 To .FoundFiles.Count
               On Error Resume Next
           s = .FoundFiles(i)

Call Macro1(s, find, change)
            Next i
       End If
    End With
End Sub

'此子程序放在模块里

Option Explicit
Sub Macro1(s As String, find As String, change As String)

Documents.Open FileName:=s, ConfirmConversions:=False, _
       ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="",_
       PasswordTemplate:="", Revert:=False, WritePasswordDocument:="",_
       WritePasswordTemplate:="", Format:=wdOpenFormatAuto,XMLTransform:=""
    IfActiveWindow.View.SplitSpecial <>wdPaneNone Then
       ActiveWindow.Panes(2).Close
    End If
    IfActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow._
       ActivePane.View.Type = wdOutlineView Then
       ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
   ActiveWindow.ActivePane.View.SeekView =wdSeekCurrentPageHeader
    IfSelection.HeaderFooter.IsHeader = True Then
       ActiveWindow.ActivePane.View.SeekView =wdSeekCurrentPageFooter
    Else
       ActiveWindow.ActivePane.View.SeekView =wdSeekCurrentPageHeader
    End If
   Selection.find.ClearFormatting
   Selection.find.Replacement.ClearFormatting
    WithSelection.find
       .Text = find '查找的内容
       .Replacement.Text = change '替换的内容
       .Forward = True
       .Wrap = wdFindContinue
       .Format = False
       .MatchCase = False
       .MatchWholeWord = False
       .MatchByte = True
       .MatchWildcards = False
       .MatchSoundsLike = False
       .MatchAllWordForms = False
    EndWith
   Selection.find.Execute Replace:=wdReplaceAll
   ActiveWindow.Close (wdSaveChanges)

End Sub

posted @ 2011-06-06 21:18 半点忧伤 阅读(98) 评论(2)编辑

插入图片,制成图册

为了赶编一个图册,我们定了一个图片格式,图片全部存在硬盘上,每个图片均有一定的编号,如果手工实现,至少要24小时以上,中间还会出现DOC文件澎湃死机,想起来头就大.根据工作的流程,定了个索引文件格式,写了个VBA脚本,实现了(1)在WORD中插入表格(关键是单元格合并);(2)在WORD中插入文本框(浮于表格与图片上);(3)定义索引文件的格式(编号\图片\说明);(4)在WORD中读取索引文件格式.

结果,完成一个图册文件的制作,只用了不到20分钟,真是轻松.在工作有好的帮手真的非常重要,thankQCJ.下面是它的VBA代码,等到有时间时,用VC把它实现打包,让更多的人更简单地用吧.

==================================

Subtest()
'
' test Macro
' 宏在 2007-7-16 由 FtpDown 录制

'插入表格
   Dim filename As String, str1() As String, tmp As String, i AsInteger
   Dim photoimg As String, gisimg As String
   
   filename = "c:\set.txt" '这里是文本文件所在路径位置
   Open filename For Input As 1
   Do Until EOF(1)
   Line Input #1, tmp
   str1 = Split(tmp, ",")
   photoimg = str1(2) & "\1.jpg"
   gisimg = str1(2) & "\2.jpg"
   
   Selection.Collapse Direction:=wdCollapseStart
   Set myTable = ActiveDocument.Tables.Add(Range:=Selection.Range,_
   NumRows:=2, NumColumns:=3,DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:=_
   wdAutoFitFixed)
       
   '修改表格的高宽
   myTable.Rows(1).HeightRule = wdRowHeightAtLeast
   myTable.Rows(1).Height = CentimetersToPoints(8.62)
   
   myTable.Columns(1).PreferredWidthType =wdPreferredWidthPoints
   myTable.Columns(1).PreferredWidth = CentimetersToPoints(12)
   myTable.Columns(2).PreferredWidthType =wdPreferredWidthPoints
   myTable.Columns(2).PreferredWidth = CentimetersToPoints(0.42)
   myTable.Columns(3).PreferredWidthType =wdPreferredWidthPoints
   myTable.Columns(3).PreferredWidth =CentimetersToPoints(12.32)
   
   myTable.Rows(2).HeightRule = wdRowHeightAtLeast
   myTable.Rows(2).Height = CentimetersToPoints(8.62)
   
   '合并表格
   myTable.Cell(Row:=1, Column:=2).Merge _
           MergeTo:=myTable.Cell(Row:=2, Column:=2)

myTable.Cell(Row:=1, Column:=3).Merge _
           MergeTo:=myTable.Cell(Row:=2, Column:=3)

'插入图片
   myTable.Cell(Row:=1, Column:=1).Range.InlineShapes.AddPicturefilename:= _
       photoimg, LinkToFile:=False, _
        SaveWithDocument:=True
        
   myTable.Cell(Row:=1, Column:=1).Range.InlineShapes(1).Height =244.35
   myTable.Cell(Row:=1, Column:=1).Range.InlineShapes(1).Width =344.25
   
   
   myTable.Cell(Row:=2, Column:=1).Range.InlineShapes.AddPicturefilename:= _
       photoimg, LinkToFile:=False, _
        SaveWithDocument:=True
        
   myTable.Cell(Row:=2, Column:=1).Range.InlineShapes(1).Height =244.35
   myTable.Cell(Row:=2, Column:=1).Range.InlineShapes(1).Width =344.25
   
   myTable.Cell(Row:=1, Column:=3).Range.InlineShapes.AddPicturefilename:= _
       gisimg, LinkToFile:=False, _
        SaveWithDocument:=True
        
   myTable.Cell(Row:=1, Column:=3).Range.InlineShapes(1).Height =498.7
   myTable.Cell(Row:=1, Column:=3).Range.InlineShapes(1).Width =344.25
   
   
   '插入文本框
   Set myTB1 =ActiveDocument.Shapes.AddTextbox(msoTextOrientationHorizontal,71, 35, 172, 36)
   myTB1.TextFrame.TextRange = str1(1) & Chr(13)& "部件编码:" & str1(0)
   
   Set myTB2 =ActiveDocument.Shapes.AddTextbox(msoTextOrientationHorizontal,609, 509, 165, 22)
   myTB2.TextFrame.TextRange ="XXXXXXXXX  2007年7月"
   
   'Set arrPic = ActiveDocument.Shapes.AddPicture("D:\我的文档\MyPictures\88888\arrow.gif", False, True, 50, 300)
   
   Selection.MoveDown Unit:=wdLine, Count:=2
   Selection.TypeParagraph
Loop
Close
End Sub
Sub sx()
'
' sx Macro
' 宏在 2007-7-18 由 zwx 创建
'
Dim tmp As String, FileNumber As Integer

Set fs =CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\Errmeilan.txt", True)
Set b = fs.CreateTextFile("c:\OKmeilan.txt", True)
filename = "c:\meilan.txt" '这里是文本文件所在路径位置
FileNumber = FreeFile
Open filename For Input As FileNumber
Do Until EOF(FileNumber)
   Line Input #FileNumber, tmp
   str1 = Split(tmp, ",")
   photoimg = str1(2) & "\001.jpg"
   gisimg = str1(2) & "\002.jpg"
   
   If fs.FileExists(photoimg) = True And fs.FileExists(gisimg) = TrueThen
      b.writeLine (tmp)
   Else
      a.writeLine (tmp)
   End If
Loop
a.Close
b.Close
Set fs = Nothing
Set a = Nothing
Set b = Nothing
End Sub

posted @ 2011-06-06 21:16 半点忧伤 阅读(27) 评论(0)编辑

word插入图片222

我写论文时经常要把所有的图调整成一样大小,使用的都是以下的代码,供参考。至于批量插入图片等功能,因为写论文时从来用不上,也不知道应该弄成什么样子,所以无法回答你。

Sub 一次性调整公式以外的图片大小及格式()
      '功能 1 :把全文的图片调整成同样大小,公式除外
      '功能 2 :如果图片不是 jpg 格式的,统一调整成 jpg格式并居中,以减小文档体积
      '========================
      Mywidth = 7 '需要的图片宽度(厘米)
      Myheigth = 5 '需要的图片高度(厘米)
      '========================
      Dim myPic As InlineShape
   For Each myPic InActiveDocument.InlineShapes
      With myPic
           .Select
            Select Case.Type
            CasewdInlineShapePicture
                 .Height =28.345 * Myheigth
                 .Width =28.345 * Mywidth
                 Selection.ParagraphFormat.Alignment=
wdAlignParagraphCenter
                             Selection.Cut
                 Selection.PasteSpecialLink:=False,
DataType:=15, Placement:=wdInLine, DisplayAsIcon:=False
            EndSelect
      End With
   Next
End Sub

posted @ 2011-06-06 21:15 半点忧伤 阅读(49) 评论(1)编辑

word插入图片,调整大小

Sub Macro1()
   ActiveDocument.Tables(1).Cell(3, 1).Select
   Selection.InlineShapes.AddPicture FileName:="C:\a.jpg",LinkToFile:=True, SaveWithDocument:=True
End Sub
HF

Private   Sub  Command1_Click()
       Dim   xApp  As   New   Word.Application
       Dim   xDoc  As   Document
       Dim   xShape  As   InlineShape
      
       Set   xApp   =  New   Word.Application
      
       '添加文档并返回文档对象
       Set   xDoc   =  xApp.Documents.Add
      
       '插入一个图形Shape并返回其对象引用
       Set   xShape  =   xDoc.InlineShapes.AddPicture( "D:\2003  document\My  Pictures\1_151_115.jpg ")
      
       '设置Shape的大小
       xShape.Width   =  200
       xShape.Height   =  200
      
       Set   xShape  =   Nothing
      
       '保存
       xDoc.SaveAs   "c:\dfgh.doc"
      
       xDoc.Close
       xApp.Quit
      
       Set   xDoc   =  Nothing
       Set   xApp   =  Nothing
End   Sub

这是上面代码的注释,可能对你的理解有一些帮助。如果需要多次插入图片,重复调用
       '插入一个图形Shape并返回其对象引用
       Set   xShape  =   xDoc.InlineShapes.AddPicture( "D:\2003  document\My  Pictures\1_151_115.jpg ")
      
       '设置Shape的大小
       xShape.Width   =  200
       xShape.Height   =  200
      
       Set   xShape  =   Nothing
就可以了。

'*****************************

哈哈~终于可以了 O YEAH~ 感谢wangz的耐心介绍!另外我找到了另外一种方式,互联网的资源~分享如下:

word批量修改图片大小——固定长宽篇
这部分要说的是把word中的所有图片修改成固定的并且相同的长和宽!
1、打开word,工具-宏-宏(或者直接按Alt+F8)进入宏的界面,如下面所示,输入一个宏名,宏名自己起,能记住就行!
2、宏名起好了,单击“创建”进入Visual Basic 编辑器,输入如下代码并保存
Sub setpicsize() '设置图片大小
Dim n'图片个数
On Error Resume Next'忽略错误
For n = 1ToActiveDocument.InlineShapes.Count 'InlineShapes类型图片
ActiveDocument.InlineShapes(n).Height= 400 '设置图片高度为400px
ActiveDocument.InlineShapes(n).Width = 300 '设置图片宽度 300px
Nextn
For n = 1 To ActiveDocument.Shapes.Count'Shapes类型图片
ActiveDocument.Shapes(n).Height = 400 '设置图片高度为 400px
ActiveDocument.Shapes(n).Width = 300 '设置图片宽度 300px
Next n
EndSub
3、返回word,工具-宏-宏(或者直接按Alt+F8),再次进入宏的界面,选择刚才编辑好的宏,并单击“运行”按钮,就可以了!(图片多时,可能会花一些时间)word批量修改图片大小——按比例缩放篇
这部分要说的是把word中的所有图片按比例缩放!
具体操作同上,只是代码部分稍做修改,代码如下:
Sub setpicsize() '设置图片大小
Dim n'图片个数
Dim picwidth
Dimpicheight
On Error Resume Next'忽略错误
For n = 1 To ActiveDocument.InlineShapes.Count'InlineShapes类型图片
picheight = ActiveDocument.InlineShapes(n).Height
picwidth = ActiveDocument.InlineShapes(n).Width
ActiveDocument.InlineShapes(n).Height = picheight * 1.1'设置高度为1.1倍
ActiveDocument.InlineShapes(n).Width= picwidth * 1.1 '设置宽度为1.1倍
Next n
For n = 1 To
ActiveDocument.Shapes.Count 'Shapes类型图片
picheight = ActiveDocument.Shapes(n).Height
picwidth = ActiveDocument.Shapes(n).Width
ActiveDocument.Shapes(n).Height = picheight * 1.1 '设置高度为1.1倍
ActiveDocument.Shapes(n).Width = picwidth * 1.1 '设置宽度为1.1倍
Next n
End Sub
'********************************

今天收获很大,又找到了批量给图片加边框的方法,分享一下:

Dim i As Integer

For i = 1 To ActiveDocument.InlineShapes.Count

With ActiveDocument.InlineShapes(i)
With .Borders(wdBorderLeft)
.LineStyle = wdLineStyleSingle
.LineWidth = wdLineWidth100pt
.Color = wdColorAutomatic
End With
With .Borders(wdBorderRight)
.LineStyle = wdLineStyleSingle
.LineWidth = wdLineWidth100pt
.Color = wdColorAutomatic
End With
With .Borders(wdBorderTop)
.LineStyle = wdLineStyleSingle
.LineWidth = wdLineWidth100pt
.Color = wdColorAutomatic
End With
With .Borders(wdBorderBottom)
.LineStyle = wdLineStyleSingle
.LineWidth = wdLineWidth100pt
.Color = wdColorAutomatic
End With
.Borders.Shadow = False
End With
With Options
.DefaultBorderLineStyle = wdLineStyleSingle
.DefaultBorderLineWidth = wdLineWidth100pt
.DefaultBorderColor = wdColorAutomatic
End With
Next i

End sub

'****************************

posted @ 2011-06-06 21:07 半点忧伤 阅读(1669) 评论(1)编辑

使用vb调用vba在word中插入图片的代码

过程名:wdout

作用:使用定义好的模板,自动将其中的形如{????}的字符以字段中的内容替换,并将{照片}替换成照片。如果没有照片,则删除相应的替换字符。

参数:photofile——照片文件的路径字符串,为完整绝对路径。不判断文件是否存在,如果不存在将出错。

插入图片其实只有一句
wdApp.Selection.InlineShapes.AddPicture FileName:= _
           PhotoFile, LinkToFile:=False, SaveWithDocument:= _
           True
可以用word的宏记录取得相应的代码。

Private Function WdOut(ByVal PhotoFile As String)
''{单位}{费用名称}{费用名细}{大写金额}{金额}{鉴定单位}{经办人}{日期}

Dim wdApp As Object, wdDoc As Object
Dim i As Integer

If CheckWord = False Then
    MsgBox"没有安装Word软件或软件安装错误!", vbExclamation
    ExitFunction
End If

If DotName = "" Or Not FileExist(DotName) Then
       MsgBox "没有找到打印模板,无法打印!!", vbExclamation
       Exit Function
End If

MsgWinShow "正在从模板生成文档..."

''If Not wdDoc Is Nothing Then
''    On ErrorResume Next
''   wdDoc.Close wdDoNotSaveChanges
''    Set wdDoc= Nothing
''   wdApp.Quit
''    Set wdApp= Nothing
''    On ErrorGoTo 0
''End If
''

Set wdApp = CreateObject("Word.Application")
With wdApp
'    .Visible =True
    Set wdDoc =.Documents.Add(DotName, False, 0,True)        ''wdNewBlankDocument=0
End With

For i = 0 To adoRS.Fields.Count - 1
    'With.Content.Find
   
    Select CaseadoRS.Fields(i).Name
    Case"照片"
       wdApp.Selection.Find.ClearFormatting
       With wdApp.Selection.Find
           .Text = "{照片}"
           .Replacement.Text = "A"
           .Forward = True
           .Wrap = wdFindContinue
           .Format = False
           .MatchCase = False
           .MatchWholeWord = False
           .MatchByte = True
           .MatchWildcards = False
           .MatchSoundsLike = False
           .MatchAllWordForms = False
       End With
       
       wdApp.Selection.Find.Execute
       wdApp.Selection.Delete Unit:=1,Count:=1           ''删除       1=wdCharacter
       
    If PhotoFile> "" Then
       wdApp.Selection.InlineShapes.AddPicture FileName:= _
           PhotoFile, LinkToFile:=False, SaveWithDocument:= _
           True
       wdApp.Selection.MoveLeft Unit:=wdCharacter, Count:=1
       wdApp.Selection.MoveRight Unit:=wdCharacter, Count:=1,Extend:=wdExtend
       wdApp.Selection.InlineShapes(1).Fill.Visible =0       ''0= msoFalse
       wdApp.Selection.InlineShapes(1).LockAspectRatio =-1    ''-1=msoTrue
       wdApp.Selection.InlineShapes(1).Height = 28 * 4.1
       wdApp.Selection.InlineShapes(1).Width = 28 * 2.8
    End If
    CaseElse
   
    WithwdApp.Selection.Find
       .ClearFormatting
       .Replacement.ClearFormatting
       
       .Text = "{" & adoRS.Fields(i).Name& "}"
       .Replacement.Text = adoRS.Fields(i).Value &""
       .Forward = True
       .Wrap =1      ''1=wdFindContinue
       .Format = False
       .MatchCase = False
       .MatchWholeWord = False
       .MatchByte = True
       .MatchWildcards = False
       .MatchSoundsLike = False
       .MatchAllWordForms = False
       .ExecuteReplace:=2    ''2=wdReplaceAll
    EndWith
   
    EndSelect
Next
   wdApp.Visible = True
   
Set wdDoc = Nothing
Set wdApp = Nothing

MsgWinHide

End Function

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lanman/archive/2008/04/09/2265650.aspx

(0)

相关推荐