您的位置:首页 > 编程语言 > VB

VBA——word中书签与VS的完美搭配

2016-05-18 08:47 756 查看

【VBA简介】

         VBA(Visual  Basic for Applications)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)(Object Linking and Embedding)任务的编程语言。他是一种自动化语言可以使常用的程序自动化。在敲机房收费系统的时候我们就接触过了导出到Excel,在VS引用的时候还看到了PPT,想想微软真是厉害,这次的实战主要是word中的书签和VS的结合,使界面更美了。

【需求】

        下图是最终需要做出来的效果。在验收完之后回来的路上,我们猜测既然VS可以和Excel结合,那么应该也可以和Word结合,经过百度证实确实是可以。而且这种技术叫做VBA,自己也借助这次机会初步了解了一下什么是VBA。

                   


【过程】

       百度的过程中无意间看到VB应用word的书签。正所谓知识都是相通的嘛,既然VB可以,那么VS有什么理由不可以呢?经过一番尝试,在一个Word中通过VS写入想要的数据成功了。考虑到实际情况就在debug目录下放了一个模板,在打印的时候程序先将模板拷贝到用户选择的地方,然后我们在该路径下的word中写入想要的数据。

【代码】

    

Dim wordApp As New Word.Application   '定义一个word
Dim wordDoc As New Word.Document
Dim opara1 As Word.Paragraph       '写入word变量
Dim opara2 As Word.Paragraph
Dim opara3 As Word.Paragraph
Dim opara4 As Word.Paragraph
Dim TargetFileName As String     '目标文件名
Dim spath As String
Dim ssource As String         '获取debug的路径,从而可以将该路径下的模板拷贝到桌面
Dim se As DialogResult
Dim strPattern As String = String.Empty
se = Me.FolderBrowserDialog1.ShowDialog()

If se = DialogResult.OK Then
'获取选中的路径
TargetFileName = FolderBrowserDialog1.SelectedPath & "/信息打印.doc"
If Microsoft.VisualBasic.Right(Application.StartupPath, 1) <> "/" Then
spath = Application.StartupPath & "/"
ssource = spath & "信息打印.doc"

If Dir$(TargetFileName) <> "" Then
If MsgBox("文件已存在,确认替换它!", vbYesNo + vbQuestion) = vbNo Then Exit Sub
'判断文件是否已经打开
If isopen(TargetFileName) = True Then
MsgBox("路径为:" + TargetFileName + "的文件已打开,请先将其关闭", vbInformation, "提示")
Exit Sub
Else
Kill(TargetFileName)     '删除文件
End If

FileCopy(ssource, TargetFileName)    '复制文件
wordDoc = wordApp.Documents.Open(TargetFileName)
' 横向
wordDoc.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape
wordApp.Visible = True
wordApp.ShowMe()
'其中的company是word中的一个书签,之下的unitID等等类似
opara1 = wordDoc.Content.Paragraphs.Add(wordDoc.Bookmarks.Item("company").Range)
opara1.Range.Text = txtCompanyName.Text.Trim()
opara2 = wordDoc.Content.Paragraphs.Add(wordDoc.Bookmarks.Item("unitID").Range)
opara2.Range.Text = _userId
opara3 = wordDoc.Content.Paragraphs.Add(wordDoc.Bookmarks.Item("userName").Range)
opara3.Range.Text = txtPersonalName.Text.Trim()
opara4 = wordDoc.Content.Paragraphs.Add(wordDoc.Bookmarks.Item("phone").Range)
opara4.Range.Text = txtPhoneNumber.Text.Trim()

'wordDoc.Close() '关闭文档实例
'wordApp.Quit()
wordDoc = Nothing
wordApp = Nothing
'MsgBox("信息表已保存在您选择的路径下!!", vbInformation, "提示")
Me.WindowState = System.Windows.Forms.FormWindowState.Minimized
Else
FileCopy(ssource, TargetFileName)    '复制文件
wordDoc = wordApp.Documents.Open(TargetFileName)
' 横向
wordDoc.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape
wordApp.Visible = True
wordApp.ShowMe()
'信息写入wrod
opara1 = wordDoc.Content.Paragraphs.Add(wordDoc.Bookmarks.Item("company").Range)
opara1.Range.Text = txtCompanyName.Text.Trim()
opara2 = wordDoc.Content.Paragraphs.Add(wordDoc.Bookmarks.Item("unitID").Range)
opara2.Range.Text = _userId
opara3 = wordDoc.Content.Paragraphs.Add(wordDoc.Bookmarks.Item("userName").Range)
opara3.Range.Text = txtPersonalName.Text.Trim()
opara4 = wordDoc.Content.Paragraphs.Add(wordDoc.Bookmarks.Item("phone").Range)
opara4.Range.Text = txtPhoneNumber.Text.Trim()
'wordDoc.SaveAs2(TargetFileName)
'wordDoc.Close() '关闭文档实例
'wordApp.Quit()
wordDoc = Nothing
wordApp = Nothing
Me.WindowState = System.Windows.Forms.FormWindowState.Minimized
' MsgBox("信息表已保存在您选择的路径下!", vbInformation, "提示")
End If
End If
End If


   其中我们要求是默认横向打印,万万没想到一行代码就让word信服了。

' 横向
wordDoc.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape
    期间做测试,由于好奇心就将拷贝到指定路径下的word打开了,边打开着边用VS执行,这样就出错了,因为word已经打开,就相当于一个程序正在调用该进程,用户也是相当的多,猜想应该不会只有我一个人这样做吧。经过测试,证明是文件被打开的原因,那么如何判断该文件已被打开呢?如果已打开,就给出提示。

Private Function isopen(ByVal path_string As String) As Boolean
Try
Dim fs As New IO.FileStream(path_string, IO.FileMode.OpenOrCreate, IO.FileAccess.Read)
fs.Dispose()
Return False
Catch ex As Exception
Return True
End Try
End Function
    在需要判断的地方调用即可:
'判断文件是否已经打开
If isopen(TargetFileName) = True Then
MsgBox("路径为:" + TargetFileName + "的文件已打开,请先将其关闭", vbInformation, "提示")
Exit Sub
End if


【创建书签】

1.打开word

2.在相应想要从程序中输出值的地方插入书签。

3.第一步



4.第二步

                                                   


5.第三步

            


【总结】

          VBA的思想就是让简单的东西更加简单了,通过代码将桌面应用程序和我们自己做的程序很好的结合起来,通过单击一个按钮就可以完成在桌面应用程序中的一系列操作。借助已有的东西来让自己的程序更加的方便美观——站在巨人的肩膀上,让自己看的更远。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: