如何用vba代码打开文件夹内的word文档?

如何用vba代码打开文件夹内的word文档?,第1张

Sub Read_Word()\x0d\x0aDim worDoc As object\x0d\x0aDim wordappl As object\x0d\x0aDim mydoc As String\x0d\x0aDim myappl As String\x0d\x0amydoc = thisworkbook.path &"\" &"文件名.doc" \x0d\x0a'本文档目录下的doc文件,这里可以直接改成路径+文件名的形式\x0d\x0aSet wordappl = CreateObject("Word.application")'设置wordappl对象\x0d\x0aSet worDoc = wordappl.Documents.Open(mydoc) \x0d\x0a'打开word文档,mydoc变量指定路径和文件名\x0d\x0aworDoc.Activate'激活打开的文档\x0d\x0awordappl.Selection.WholeStory '全选文档\x0d\x0awordappl.Selection.Copy'复制选择内容到剪贴板\x0d\x0aworDoc.Application.Quit'关闭word文档\x0d\x0aSet WordApp = Nothing'释放对象变量的内存\x0d\x0aWorkbooks(1).Sheets(2).Activate '激活excel第一个工作簿的第二个工作表\x0d\x0aActiveSheet.UsedRange.Clear '把当前工作表清空,如果有重要数据,这条删除\x0d\x0aCells(1, 1).Select'选择A1单元格\x0d\x0aActiveSheet.Paste'粘贴复制的内容\x0d\x0awordappl.quit\x0d\x0aset wordappl =nothing\x0d\x0aEnd Sub

'------------------------------------------------------------------------------

'

' Form Code

'

'------------------------------------------------------------------------------

Option Explicit

Private row As Integer, col As Integer

Private Sub CloseWindows_Click()

If TextStartRow.Text = "" Then TextStartRow = 0

If TextStartCol = "" Then TextStartCol = 0

If TextPath = "" Then TextPath = "D:\"

CloseMyDialog TextStartRow, TextStartCol

End Sub

Private Sub GetDir_Click()

If TextStartRow.Text = "" Then TextStartRow = 0

If TextStartCol = "" Then TextStartCol = 0

If TextPath = "" Then

TextPath = "D:\"

ElseIf Right(TextPath, 1) <> "\" Then

TextPath = TextPath & "\"

End If

doGetDir TextPath, Val(TextStartRow), Val(TextStartCol)

End Sub

Private Sub ShowWindows_Click()

If TextStartRow.Text = "" Then TextStartRow = 0

If TextStartCol = "" Then TextStartCol = 0

If TextPath = "" Then TextPath = "D:\"

ShowMyDialog Application.hWnd, TextStartRow, TextStartCol

End Sub

上面是Form上面的

Option Explicit

Dim MyFile, Mypath, MyName

Dim i%, j%

Dim DirPath() As String

Sub GetDir(ByVal Mypath As String, row As Integer, col As Integer)

' 显示 C:\ 目录下的名称。

'    MyPath = "d:\电大\"    ' 指定路径。

MyName = Dir(Mypath, vbDirectory)    ' 找寻第一项。

Do While MyName <> ""    ' 开始循环。

' 跳过当前的目录及上层目录。

If MyName <> "." And MyName <> ".." Then

' 使用位比较来确定 MyName 代表一目录。

If (GetAttr(Mypath & MyName) And vbDirectory) = vbDirectory Then

Cells(row + i, col) = Mypath & MyName ' 如果它是一个目录,将其名称显示出来。

ReDim Preserve DirPath(i)

DirPath(i) = Mypath & MyName & "\"

i = i + 1

End If

End If

MyName = Dir    ' 查找下一个目录。

Loop

End Sub

Public Sub doGetDir(ByVal TextPath$, ByVal TextStartRow%, ByVal TextStartCol%)

j = 1

i = 1

Mypath = TextPath

GetDir Mypath, TextStartRow, TextStartCol

For j = 1 To i - 1

GetDir DirPath(j), TextStartRow, TextStartCol

Next

End Sub

'end code---------------------------------------------------

Option Explicit

Public Const OFN_ALLOWMULTISELECT As Long = &H200

Public Const OFN_CREATEPROMPT As Long = &H2000

Public Const OFN_ENABLEHOOK As Long = &H20

Public Const OFN_ENABLETEMPLATE As Long = &H40

Public Const OFN_ENABLETEMPLATEHANDLE As Long = &H80

Public Const OFN_EXPLORER As Long = &H80000

Public Const OFN_EXTENSIONDIFFERENT As Long = &H400

Public Const OFN_FILEMUSTEXIST As Long = &H1000

Public Const OFN_HIDEREADONLY As Long = &H4

Public Const OFN_LONGNAMES As Long = &H200000

Public Const OFN_NOCHANGEDIR As Long = &H8

Public Const OFN_NODEREFERENCELINKS As Long = &H100000

Public Const OFN_NOLONGNAMES As Long = &H40000

Public Const OFN_NONETWORKBUTTON As Long = &H20000

Public Const OFN_NOREADONLYRETURN As Long = &H8000& '*see comments

Public Const OFN_NOTESTFILECREATE As Long = &H10000

Public Const OFN_NOVALIDATE As Long = &H100

Public Const OFN_OVERWRITEPROMPT As Long = &H2

Public Const OFN_PATHMUSTEXIST As Long = &H800

Public Const OFN_READONLY As Long = &H1

Public Const OFN_SHAREAWARE As Long = &H4000

Public Const OFN_SHAREFALLTHROUGH As Long = 2

Public Const OFN_SHAREWARN As Long = 0

Public Const OFN_SHARENOWARN As Long = 1

Public Const OFN_SHOWHELP As Long = &H10

Public Const OFS_MAXPATHNAME As Long = 260

Public Const OFS_FILE_OPEN_FLAGS = OFN_EXPLORER _

Or OFN_LONGNAMES _

Or OFN_CREATEPROMPT _

Or OFN_NODEREFERENCELINKS

Public Const OFS_FILE_SAVE_FLAGS = OFN_EXPLORER _

Or OFN_LONGNAMES _

Or OFN_OVERWRITEPROMPT _

Or OFN_HIDEREADONLY

Public Type OPENFILENAME

nStructSize       As Long

hWndOwner         As Long

hInstance         As Long

sFilter           As String

sCustomFilter     As String

nMaxCustFilter    As Long

nFilterIndex      As Long

sFile             As String

nMaxFile          As Long

sFileTitle        As String

nMaxTitle         As Long

sInitialDir       As String

sDialogTitle      As String

flags             As Long

nFileOffset       As Integer

nFileExtension    As Integer

sDefFileExt       As String

nCustData         As Long

fnHook            As Long

sTemplateName     As String

End Type

Public OFN As OPENFILENAME

Public Const WM_CLOSE = &H10

Public Declare Function GetOpenFileName Lib "comdlg32" _

Alias "GetOpenFileNameA" _

(pOpenfilename As OPENFILENAME) As Long

Public Declare Function GetSaveFileName Lib "comdlg32" _

Alias "GetSaveFileNameA" _

(pOpenfilename As OPENFILENAME) As Long

Public Declare Function GetShortPathName Lib "kernel32" _

Alias "GetShortPathNameA" _

(ByVal lpszLongPath As String, _

ByVal lpszShortPath As String, _

ByVal cchBuffer As Long) As Long

Public Const WM_INITDIALOG = &H110

Private Const SW_SHOWNORMAL = 1

Public Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long

End Type

Public Declare Function GetParent Lib "user32" _

(ByVal hWnd As Long) As Long

Public Declare Function SetWindowText Lib "user32" _

Alias "SetWindowTextA" _

(ByVal hWnd As Long, _

ByVal lpString As String) As Long

Public Declare Function MoveWindow Lib "user32" _

(ByVal hWnd As Long, _

ByVal x As Long, _

ByVal y As Long, _

ByVal nWidth As Long, _

ByVal nHeight As Long, _

ByVal bRepaint As Long) As Long

Public Declare Function GetWindowRect Lib "user32" _

(ByVal hWnd As Long, _

lpRect As RECT) As Long

Public Declare Function SendMessage Lib "user32" _

Alias "SendMessageA" _

(ByVal hWnd As Long, _

ByVal wMsg As Long, _

ByVal wParam As Long, _

lParam As Any) As Long

Public Declare Function FindWindow Lib "user32" _

Alias "FindWindowA" _

(ByVal lpClassName As Long, _

ByVal lpWindowName As String) As Long

Public Function FARPROC(ByVal pfn As Long) As Long

FARPROC = pfn

End Function

Public Function OFNHookProc(ByVal hWnd As Long, _

ByVal uMsg As Long, _

ByVal wParam As Long, _

ByVal lParam As Long) As Long

Dim hwndParent As Long

Dim rc As RECT

Dim newLeft As Long

Dim newTop As Long

Dim dlgWidth As Long

Dim dlgHeight As Long

Dim scrWidth As Long

Dim scrHeight As Long

Select Case uMsg

Case WM_INITDIALOG

hwndParent = GetParent(hWnd)

If hwndParent <> 0 Then

Call GetWindowRect(hwndParent, rc)

dlgWidth = rc.Right - rc.Left

dlgHeight = rc.Bottom - rc.Top

Call MoveWindow(hwndParent, newLeft, newTop, dlgWidth, dlgHeight, True)

OFNHookProc = 1

End If

Case Else:

End Select

End Function

Public Sub ShowFolder(hWnd As Long, Mypath$)

Dim sFilters As String

Dim pos As Long

Dim buff As String

Dim sLongname As String

Dim sShortname As String

With OFN

.nStructSize = Len(OFN)

.hWndOwner = hWnd

.sFilter = sFilters

.nFilterIndex = 2

.sFile = Space$(1024) & vbNullChar & vbNullChar

.nMaxFile = Len(.sFile)

.sDefFileExt = "bas" & vbNullChar & vbNullChar

.sFileTitle = vbNullChar & Space$(512) & vbNullChar & vbNullChar

.nMaxTitle = Len(OFN.sFileTitle)

.sInitialDir = Mypath & vbNullChar & vbNullChar

.sDialogTitle = Mypath & vbNullChar & vbNullChar

.flags = OFS_FILE_OPEN_FLAGS Or _

OFN_ALLOWMULTISELECT Or _

OFN_EXPLORER Or _

OFN_ENABLEHOOK

.fnHook = FARPROC(AddressOf OFNHookProc)

End With

GetOpenFileName OFN

End Sub

Public Sub CloseFolder(Mypath As String)

Dim hWnd As Long

hWnd = FindWindow(0, Mypath)

Call SendMessage(hWnd, WM_CLOSE, 0&, ByVal 0&)

End Sub

Public Sub ShowMyDialog(MyhWnd As Long, TextStartRow As Integer, TextStartCol As Integer)

Dim row, col

Dim i

Dim hWnd As Long

hWnd = MyhWnd

i = 1: row = TextStartRow: col = TextStartCol

Do While Cells(i + row, col) <> ""

Shell "C:\Windows\explorer.exe " & Cells(i + row, col)

'        ShowFolder hWnd, Cells(i + row, col)

'        hWnd = FindWindow(0, Cells(i + row, col))

i = i + 1

Loop

End Sub

Public Sub CloseMyDialog(TextStartRow As Integer, TextStartCol As Integer)

Dim row, col

Dim i

i = 1: row = TextStartRow: col = TextStartCol

Do While Cells(i + row, col) <> ""

CloseFolder pathToName(Cells(i + row, col))

i = i + 1

Loop

End Sub

Private Function pathToName(Mypath$) As String

Dim str() As String

str = Split(Mypath, "\")

pathToName = str(UBound(str))

End Function


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12112133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存