Vba word открыть папку

0 / 0 / 0

Регистрация: 11.08.2016

Сообщений: 55

1

11.08.2016, 22:07. Показов 14818. Ответов 16


Студворк — интернет-сервис помощи студентам

Всем привет!Окажите содействие плиз: имеется папка с файлами .тхт необходим макрос который открывает все файлы из этой папки в Ворде(если возможно была признательна если можно было реализовать вывод диалогового окна выбора папки в котором сразу открывалась папка из которой нужно открыть файлы), затем нужно изменить на альбомную ориентацию , сделать 8 шрифт распечатать файл и сохранить в формате .doc .docx или .RTF тут не важно главное чтоб читался вордом и форматирование не слетало.Пробовала рекордером но получилось только изменение форматирования записать и печать. При сохранении он сохраняет одним и тем же именем т.е. в макрос записывается имя первого сохраняемого файла и все последующие пытается сохранить под тем же именем.такое реально реализовать ? Хелп ми))), около ста отчетов приходится лопатить вручную((((
З.Ы, если это упростит задачу все файлы имеют идентичные названия , например, report1, report2,report3 и т.д.



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

12.08.2016, 10:18

2

Попробуйте так (только тестировать, разумеется, нужно на нескольких файлах)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Private Sub Test()
    Dim iPath$, iFileName$
    iPath = "C:Мои отчёты"
    
    With Application.FileDialog(msoFileDialogFolderPicker)
         .Title = "Выберите папку с .txt файлами"
         .InitialFileName = iPath
         If .Show = -1 Then
            iPath = .SelectedItems(1) & ""
         Else
            MsgBox "Отказ от выбора папки", vbCritical: Exit Sub
         End If
    End With
    
    iFileName = Dir(iPath & "Report*.txt")
    If Len(iFileName) > 0 Then
       Application.ScreenUpdating = False
       Do
            With Documents.Open(iPath & iFileName, Encoding:=1251)
                 .Content.Font.Size = 8
                 .PrintOut
                 .SaveAs iPath & Replace(iFileName, _
                 ".txt", ".doc", , , vbTextCompare), wdFormatDocument
                 .Close
            End With
            'Kill iPath & iFileName
            iFileName = Dir
       Loop Until Len(iFileName) = 0
       Application.ScreenUpdating = True
    Else
       MsgBox "В выбранной папке нет наших файлов", vbCritical
    End If
End Sub

~ Тоже самое, но без сообщений

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Test2()
    Dim iPath$, iFileName$
    iPath = "C:Мои отчёты"
    
    With Application.FileDialog(msoFileDialogFolderPicker)
         .Title = "Выберите папку с .txt файлами"
         .InitialFileName = iPath
         If .Show = 0 Then Exit Sub
         iPath = .SelectedItems(1) & ""
    End With
    
    iFileName = Dir(iPath & "Report*.txt")
    Do Until Len(iFileName) = 0
       With Documents.Open(iPath & iFileName, , , , , , , , , wdOpenFormatText, 1251, False)
            .Content.Font.Size = 8
            .PrintOut
            .SaveAs iPath & Replace(iFileName, ".txt", ".doc", , , vbTextCompare), wdFormatDocument
            .Close
       End With
       'Kill iPath & iFileName
       iFileName = Dir
    Loop
End Sub



0



roneta90

0 / 0 / 0

Регистрация: 11.08.2016

Сообщений: 55

14.08.2016, 16:44

 [ТС]

3

Добавлено через 31 минуту
не получается! не находит файлы. пишет что в папке не найдены файлы.прилагаю скрины. и почему то не появился сам макрос в списке макросов. Наткнулась на такой макрос(см. ниже) Он работает но открывает Вордовские документы и меняет их(в данном случает стирается все содержимое) может его как то адаптировать под мою задачу:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Option Explicit
Dim WordObj As Object
Dim WordDoc As Object
Dim MyPath As String
Dim iFileName As String
Sub Макрос1 ()
Set WordObj = CreateObject("Word.Application")
MyPath = "C:Report" 'указать пут к папке'
iFileName = Dir(MyPath) 'имя первого файла в папке Не менять!'
Do While iFileName <> ""
Set WordDoc = WordObj.Documents.Open(MyPath + iFileName) 'открываем первый файл в папке'
WordObj.Visible = True 'можно отображать можно не отображать'
iFileName = Dir 'получение следующего имени в папке Не менять!!!'
Loop
MsgBox "файлы обработаны", vbOKOnly + vbInformation, "оработка файлов"
End Sub

Миниатюры

Открыть файлы в Word VBA с помощью макроса
 

Открыть файлы в Word VBA с помощью макроса
 

Открыть файлы в Word VBA с помощью макроса



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

14.08.2016, 16:55

4

и правильно пишет, что не находит

ибо должен быть слэш, но форум его автоматически убирает. приходится вводить два слэша, но стоит забыть об этом правиле и …

Visual Basic
1
2
3
iPath = "C:Мои отчёты"
 
iPath = .SelectedItems(1) & ""



0



0 / 0 / 0

Регистрация: 11.08.2016

Сообщений: 55

16.08.2016, 21:17

 [ТС]

5

Не получается(( . Тоже самое. Может тогда оставим только чтобы менялся шрифт ориентация страницы и сохранение с именем исходного файла

Миниатюры

Открыть файлы в Word VBA с помощью макроса
 

Открыть файлы в Word VBA с помощью макроса
 



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

16.08.2016, 21:47

6

Смотрите пример, где для чистоты эксперимента, необходимо выбрать папку «Test_for_Roneta90»



0



0 / 0 / 0

Регистрация: 11.08.2016

Сообщений: 55

28.08.2016, 17:20

 [ТС]

7

тоже самое)))Ладно , впринципе открою файлы с помощью cntrl+0 . тогда макрос прописать чтобы менял ориентацию шрифт и сохранял с текущим именем файла и в формате док или докх или ртф вообщем чтоб форматиование сохранялось



0



1 / 1 / 0

Регистрация: 12.06.2015

Сообщений: 93

07.09.2016, 21:10

8

а этот код подойдет для екселя, а не для ворда?
чтобы именно через ексель отркывался пусть к тхт файлам?



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

07.09.2016, 21:41

9

Выбор папки и перебор .txt файлов можно использовать и в Excel



0



1 / 1 / 0

Регистрация: 12.06.2015

Сообщений: 93

07.09.2016, 21:45

10

проблема в вышеперложенных вариантах в том, что открывается путь, но! нет возможности выбрать в ручном режиме подходящий файл по даному пути



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

07.09.2016, 21:50

11

Проблема в людях, которые пытаются использовать диалог выбора папки, для указания файла, хотя для последнего есть свои варианты.



0



1 / 1 / 0

Регистрация: 12.06.2015

Сообщений: 93

07.09.2016, 21:57

12

какие варианты есть?



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

07.09.2016, 22:07

13

Visual Basic
1
Application.GetOpenFileName

Причём в справке есть готовый пример — для выбора .txt файла

или

Visual Basic
1
Application.FileDialog(msoFileDialogFilePicker)



0



1 / 1 / 0

Регистрация: 12.06.2015

Сообщений: 93

07.09.2016, 22:13

14

спасибо, а можно чтобы автоматически при этом открывалась определенная папка?



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

07.09.2016, 22:30

15

Для первого варианта ChDrive + ChDir, но если не прокатит, то во втором варианте есть свойство InitialFileName

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
With Application.FileDialog(msoFileDialogFilePicker)
     .AllowMultiSelect = False
     .Title = "Выберите .txt файл"
     .Filters.Add "Text Files", "*.txt", 1
     .InitialFileName = Application.Path 'Укажите свою папку
     If .Show = -1 Then
         MsgBox .SelectedItems(1)
     Else
         MsgBox "Отказ от выбора файла", vbCritical
     End If
End With



0



Heroes

1 / 1 / 0

Регистрация: 12.06.2015

Сообщений: 93

07.09.2016, 22:47

16

у меня получилось так:

PureBasic
1
2
3
4
5
6
7
8
9
Sub Test()
 
 ChDir "C:Documents and SettingsuserМои документыTest"  ' путь какой-нужно
   Dim iFileName As Variant
   iFileName = Application.GetOpenFilename(" (*.txt),*.txt")
   
Workbooks.OpenText Filename:=iFileName  
  
 End Sub



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

07.09.2016, 23:09

17

Это прокатит только если в момент выполнения макроса текущим будет диск «C» и Вы не откажетесь от выбора файла. Т.е. более универсальным является следующий вариант (хотя и здесь, не помешало бы, проверить указанную папку на наличие)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Test()
     Dim iPath$, iFileName As Variant
     iPath = "C:Documents and SettingsUserМои документыTest"
     ChDrive Left(iPath, 2): ChDir iPath 'Можно просто ChDrive iPath
     
     iFileName = Application.GetOpenFilename("Text Files (*.txt),*.txt")
     If iFileName <> False Then
        Workbooks.OpenText FileName:=iFileName
     Else
        MsgBox "Зачем всё это нужно было ...", vbCritical
     End If
 End Sub



0



Here is some more cool knowledge to go with this:

I had a situation where I needed to be able to find folders based on a bit of criteria in the record and then open the folder(s) that were found. While doing work on finding a solution I created a small database that asks for a search starting folder gives a place for 4 pieces of criteria and then allows the user to do criteria matching that opens the 4 (or more) possible folders that match the entered criteria.

Here is the whole code on the form:

Option Compare Database
Option Explicit

Private Sub cmdChooseFolder_Click()

    Dim inputFileDialog As FileDialog
    Dim folderChosenPath As Variant

    If MsgBox("Clear List?", vbYesNo, "Clear List") = vbYes Then DoCmd.RunSQL "DELETE * FROM tblFileList"
    Me.sfrmFolderList.Requery

    Set inputFileDialog = Application.FileDialog(msoFileDialogFolderPicker)

    With inputFileDialog
        .Title = "Select Folder to Start with"
        .AllowMultiSelect = False
        If .Show = False Then Exit Sub
        folderChosenPath = .SelectedItems(1)
    End With

    Me.txtStartPath = folderChosenPath

    Call subListFolders(Me.txtStartPath, 1)

End Sub
Private Sub cmdFindFolderPiece_Click()

    Dim strCriteria As String
    Dim varCriteria As Variant
    Dim varIndex As Variant
    Dim intIndex As Integer

    varCriteria = Array(Nz(Me.txtSerial, "Null"), Nz(Me.txtCustomerOrder, "Null"), Nz(Me.txtAXProject, "Null"), Nz(Me.txtWorkOrder, "Null"))
    intIndex = 0

    For Each varIndex In varCriteria
        strCriteria = varCriteria(intIndex)
        If strCriteria <> "Null" Then
            Call fnFindFoldersWithCriteria(TrailingSlash(Me.txtStartPath), strCriteria, 1)
        End If
        intIndex = intIndex + 1
    Next varIndex

    Set varIndex = Nothing
    Set varCriteria = Nothing
    strCriteria = ""

End Sub
Private Function fnFindFoldersWithCriteria(ByVal strStartPath As String, ByVal strCriteria As String, intCounter As Integer)

    Dim fso As New FileSystemObject
    Dim fldrStartFolder As Folder
    Dim subfldrInStart As Folder
    Dim subfldrInSubFolder As Folder
    Dim subfldrInSubSubFolder As String
    Dim strActionLog As String

    Set fldrStartFolder = fso.GetFolder(strStartPath)

'    Debug.Print "Criteria: " & Replace(strCriteria, " ", "", 1, , vbTextCompare) & " and Folder Name is " & Replace(fldrStartFolder.Name, " ", "", 1, , vbTextCompare) & " and Path is: " & fldrStartFolder.Path

    If fnCompareCriteriaWithFolderName(fldrStartFolder.Name, strCriteria) Then
'        Debug.Print "Found and Opening: " & fldrStartFolder.Name & "Because of: " & strCriteria
        Shell "EXPLORER.EXE" & " " & Chr(34) & fldrStartFolder.Path & Chr(34), vbNormalFocus
    Else
        For Each subfldrInStart In fldrStartFolder.SubFolders

            intCounter = intCounter + 1

            Debug.Print "Criteria: " & Replace(strCriteria, " ", "", 1, , vbTextCompare) & " and Folder Name is " & Replace(subfldrInStart.Name, " ", "", 1, , vbTextCompare) & " and Path is: " & fldrStartFolder.Path

            If fnCompareCriteriaWithFolderName(subfldrInStart.Name, strCriteria) Then
'                Debug.Print "Found and Opening: " & subfldrInStart.Name & "Because of: " & strCriteria
                Shell "EXPLORER.EXE" & " " & Chr(34) & subfldrInStart.Path & Chr(34), vbNormalFocus
            Else
                Call fnFindFoldersWithCriteria(subfldrInStart, strCriteria, intCounter)
            End If
            Me.txtProcessed = intCounter
            Me.txtProcessed.Requery
        Next
    End If

    Set fldrStartFolder = Nothing
    Set subfldrInStart = Nothing
    Set subfldrInSubFolder = Nothing
    Set fso = Nothing

End Function
Private Function fnCompareCriteriaWithFolderName(strFolderName As String, strCriteria As String) As Boolean

    fnCompareCriteriaWithFolderName = False

    fnCompareCriteriaWithFolderName = InStr(1, Replace(strFolderName, " ", "", 1, , vbTextCompare), Replace(strCriteria, " ", "", 1, , vbTextCompare), vbTextCompare) > 0

End Function

Private Sub subListFolders(ByVal strFolders As String, intCounter As Integer)
    Dim dbs As Database
    Dim fso As New FileSystemObject
    Dim fldFolders As Folder
    Dim fldr As Folder
    Dim subfldr As Folder
    Dim sfldFolders As String
    Dim strSQL As String

    Set fldFolders = fso.GetFolder(TrailingSlash(strFolders))
    Set dbs = CurrentDb

    strSQL = "INSERT INTO tblFileList (FilePath, FileName, FolderSize) VALUES (" & Chr(34) & fldFolders.Path & Chr(34) & ", " & Chr(34) & fldFolders.Name & Chr(34) & ", '" & fldFolders.Size & "')"
    dbs.Execute strSQL

    For Each fldr In fldFolders.SubFolders
        intCounter = intCounter + 1
        strSQL = "INSERT INTO tblFileList (FilePath, FileName, FolderSize) VALUES (" & Chr(34) & fldr.Path & Chr(34) & ", " & Chr(34) & fldr.Name & Chr(34) & ", '" & fldr.Size & "')"
        dbs.Execute strSQL
        For Each subfldr In fldr.SubFolders
            intCounter = intCounter + 1
            sfldFolders = subfldr.Path
            Call subListFolders(sfldFolders, intCounter)
            Me.sfrmFolderList.Requery
        Next
        Me.txtListed = intCounter
        Me.txtListed.Requery
    Next

    Set fldFolders = Nothing
    Set fldr = Nothing
    Set subfldr = Nothing
    Set dbs = Nothing

End Sub

Private Function TrailingSlash(varIn As Variant) As String
    If Len(varIn) > 0& Then
        If Right(varIn, 1&) = "" Then
            TrailingSlash = varIn
        Else
            TrailingSlash = varIn & ""
        End If
    End If
End Function

The form has a subform based on the table, the form has 4 text boxes for the criteria, 2 buttons leading to the click procedures and 1 other text box to store the string for the start folder. There are 2 text boxes that are used to show the number of folders listed and the number processed when searching them for the criteria.

If I had the Rep I would post a picture… :/

I have some other things I wanted to add to this code but haven’t had the chance yet. I want to have a way to store the ones that worked in another table or get the user to mark them as good to store.

I can not claim full credit for all the code, I cobbled some of it together from stuff I found all around, even in other posts on stackoverflow.

I really like the idea of posting questions here and then answering them yourself because as the linked article says, it makes it easy to find the answer for later reference.

When I finish the other parts I want to add I will post the code for that too. :)

Here is some more cool knowledge to go with this:

I had a situation where I needed to be able to find folders based on a bit of criteria in the record and then open the folder(s) that were found. While doing work on finding a solution I created a small database that asks for a search starting folder gives a place for 4 pieces of criteria and then allows the user to do criteria matching that opens the 4 (or more) possible folders that match the entered criteria.

Here is the whole code on the form:

Option Compare Database
Option Explicit

Private Sub cmdChooseFolder_Click()

    Dim inputFileDialog As FileDialog
    Dim folderChosenPath As Variant

    If MsgBox("Clear List?", vbYesNo, "Clear List") = vbYes Then DoCmd.RunSQL "DELETE * FROM tblFileList"
    Me.sfrmFolderList.Requery

    Set inputFileDialog = Application.FileDialog(msoFileDialogFolderPicker)

    With inputFileDialog
        .Title = "Select Folder to Start with"
        .AllowMultiSelect = False
        If .Show = False Then Exit Sub
        folderChosenPath = .SelectedItems(1)
    End With

    Me.txtStartPath = folderChosenPath

    Call subListFolders(Me.txtStartPath, 1)

End Sub
Private Sub cmdFindFolderPiece_Click()

    Dim strCriteria As String
    Dim varCriteria As Variant
    Dim varIndex As Variant
    Dim intIndex As Integer

    varCriteria = Array(Nz(Me.txtSerial, "Null"), Nz(Me.txtCustomerOrder, "Null"), Nz(Me.txtAXProject, "Null"), Nz(Me.txtWorkOrder, "Null"))
    intIndex = 0

    For Each varIndex In varCriteria
        strCriteria = varCriteria(intIndex)
        If strCriteria <> "Null" Then
            Call fnFindFoldersWithCriteria(TrailingSlash(Me.txtStartPath), strCriteria, 1)
        End If
        intIndex = intIndex + 1
    Next varIndex

    Set varIndex = Nothing
    Set varCriteria = Nothing
    strCriteria = ""

End Sub
Private Function fnFindFoldersWithCriteria(ByVal strStartPath As String, ByVal strCriteria As String, intCounter As Integer)

    Dim fso As New FileSystemObject
    Dim fldrStartFolder As Folder
    Dim subfldrInStart As Folder
    Dim subfldrInSubFolder As Folder
    Dim subfldrInSubSubFolder As String
    Dim strActionLog As String

    Set fldrStartFolder = fso.GetFolder(strStartPath)

'    Debug.Print "Criteria: " & Replace(strCriteria, " ", "", 1, , vbTextCompare) & " and Folder Name is " & Replace(fldrStartFolder.Name, " ", "", 1, , vbTextCompare) & " and Path is: " & fldrStartFolder.Path

    If fnCompareCriteriaWithFolderName(fldrStartFolder.Name, strCriteria) Then
'        Debug.Print "Found and Opening: " & fldrStartFolder.Name & "Because of: " & strCriteria
        Shell "EXPLORER.EXE" & " " & Chr(34) & fldrStartFolder.Path & Chr(34), vbNormalFocus
    Else
        For Each subfldrInStart In fldrStartFolder.SubFolders

            intCounter = intCounter + 1

            Debug.Print "Criteria: " & Replace(strCriteria, " ", "", 1, , vbTextCompare) & " and Folder Name is " & Replace(subfldrInStart.Name, " ", "", 1, , vbTextCompare) & " and Path is: " & fldrStartFolder.Path

            If fnCompareCriteriaWithFolderName(subfldrInStart.Name, strCriteria) Then
'                Debug.Print "Found and Opening: " & subfldrInStart.Name & "Because of: " & strCriteria
                Shell "EXPLORER.EXE" & " " & Chr(34) & subfldrInStart.Path & Chr(34), vbNormalFocus
            Else
                Call fnFindFoldersWithCriteria(subfldrInStart, strCriteria, intCounter)
            End If
            Me.txtProcessed = intCounter
            Me.txtProcessed.Requery
        Next
    End If

    Set fldrStartFolder = Nothing
    Set subfldrInStart = Nothing
    Set subfldrInSubFolder = Nothing
    Set fso = Nothing

End Function
Private Function fnCompareCriteriaWithFolderName(strFolderName As String, strCriteria As String) As Boolean

    fnCompareCriteriaWithFolderName = False

    fnCompareCriteriaWithFolderName = InStr(1, Replace(strFolderName, " ", "", 1, , vbTextCompare), Replace(strCriteria, " ", "", 1, , vbTextCompare), vbTextCompare) > 0

End Function

Private Sub subListFolders(ByVal strFolders As String, intCounter As Integer)
    Dim dbs As Database
    Dim fso As New FileSystemObject
    Dim fldFolders As Folder
    Dim fldr As Folder
    Dim subfldr As Folder
    Dim sfldFolders As String
    Dim strSQL As String

    Set fldFolders = fso.GetFolder(TrailingSlash(strFolders))
    Set dbs = CurrentDb

    strSQL = "INSERT INTO tblFileList (FilePath, FileName, FolderSize) VALUES (" & Chr(34) & fldFolders.Path & Chr(34) & ", " & Chr(34) & fldFolders.Name & Chr(34) & ", '" & fldFolders.Size & "')"
    dbs.Execute strSQL

    For Each fldr In fldFolders.SubFolders
        intCounter = intCounter + 1
        strSQL = "INSERT INTO tblFileList (FilePath, FileName, FolderSize) VALUES (" & Chr(34) & fldr.Path & Chr(34) & ", " & Chr(34) & fldr.Name & Chr(34) & ", '" & fldr.Size & "')"
        dbs.Execute strSQL
        For Each subfldr In fldr.SubFolders
            intCounter = intCounter + 1
            sfldFolders = subfldr.Path
            Call subListFolders(sfldFolders, intCounter)
            Me.sfrmFolderList.Requery
        Next
        Me.txtListed = intCounter
        Me.txtListed.Requery
    Next

    Set fldFolders = Nothing
    Set fldr = Nothing
    Set subfldr = Nothing
    Set dbs = Nothing

End Sub

Private Function TrailingSlash(varIn As Variant) As String
    If Len(varIn) > 0& Then
        If Right(varIn, 1&) = "" Then
            TrailingSlash = varIn
        Else
            TrailingSlash = varIn & ""
        End If
    End If
End Function

The form has a subform based on the table, the form has 4 text boxes for the criteria, 2 buttons leading to the click procedures and 1 other text box to store the string for the start folder. There are 2 text boxes that are used to show the number of folders listed and the number processed when searching them for the criteria.

If I had the Rep I would post a picture… :/

I have some other things I wanted to add to this code but haven’t had the chance yet. I want to have a way to store the ones that worked in another table or get the user to mark them as good to store.

I can not claim full credit for all the code, I cobbled some of it together from stuff I found all around, even in other posts on stackoverflow.

I really like the idea of posting questions here and then answering them yourself because as the linked article says, it makes it easy to find the answer for later reference.

When I finish the other parts I want to add I will post the code for that too. :)

Open Word Document

This Word VBA Macro will open a word document from the specified directory:

Sub OpenDoc()
    Dim strFile As String

    strFile = "c:UsersNenadDesktopTest PM.docm"    'change to path of your file
    If Dir(strFile) <> "" Then    'First we check if document exists at all at given location
        Documents.Open strFile
    End If
End Sub

Now you can interact with the newly opened document with the ActiveDocument Object. This code will add some text to the document.

ActiveDocument.Range(0, 0).Text = "Add Some Text"

Open Document to Variable

You can also open a Word document, immediately assigning it to a variable:

Sub OpenDoc()
    Dim strFile As String
    Dim oDoc as Document

    strFile = "c:UsersNenadDesktopTest PM.docm"    'change to path of your file
    If Dir(strFile) <> "" Then    'First we check if document exists at all at given location
        Set oDoc = Documents.Open strFile
    End If
End Sub

Allowing you to interact with the document via the variable oDoc.:

oDoc.Range(0, 0).Text = "Add Some Text"

Generally it’s best practice to open to a variable, giving you the ability to easily reference the document at any point.

Open Word Document From Excel

This VBA procedure will open a Word Document from another MS Office program (ex. Excel):

Sub OpenDocFromExcel()
    Dim wordapp
    Dim strFile As String


    strFile = "c:UsersNenadDesktopTest PM.docm"
    Set wordapp = CreateObject("word.Application")
    wordapp.Documents.Open strFile
    wordapp.Visible = True
End Sub

Открыть папку (каталог) в проводнике Windows для просмотра из кода VBA Excel с помощью функции Shell и ключевых слов explorer и cmd. Передача фокуса открытой папке.

Открытие папки в проводнике

Открытие папки (каталога) в проводнике Windows для просмотра с помощью функции Shell и ключевого слова explorer:

Shell «explorer C:UsersPublicТекущая папка», vbNormalFocus

vbNormalFocus означает, что окно Windows Explorer получает фокус и восстанавливает свое исходное положение и размер.

Преимущество способа: имя папки может содержать пробелы.

Недостаток способа: если открываемая папка уже открыта, открывается второй экземпляр, затем третий и т.д.

То же преимущество и тот же недостаток у следующего способа:

ThisWorkbook.FollowHyperlink «C:UsersPublicТекущая папка»

Открытие или передача фокуса

Открытие папки (каталога) в проводнике Windows для просмотра или передача папке фокуса, если она уже открыта, с помощью функции Shell и ключевого слова cmd:

Shell «cmd /C start C:UsersPublic», vbNormalFocus

При реализации этого способа происходит кратковременное отображение на экране окна командной строки (cmd.exe). Если убрать параметр vbNormalFocus, окно командной строки мелькать не будет, но и окно проводника, при повторном его вызове, не получит фокус.

Преимущество способа: если открываемая папка уже открыта, ей передается фокус, а второй экземпляр этой папки не открывается.

Недостаток способа: имя папки не должно содержать пробелы.

От недостатка этого способа можно избавиться с помощью экранирующих кавычек:

Shell «cmd /C start ««»» ««C:UsersPublicТекущая папка»«», vbNormalFocus

Для себя на заметку, какие кавычки что экранируют:

«[cmd /C start ««[неиспользуемый параметр]»» ««[C:UsersPublicТекущая папка]»«]»

Смотрите как открывать из кода VBA Excel файлы других приложений и интернет-сайты.


Открыть папку макросом

DEAD_MaRoZ

Дата: Суббота, 09.04.2016, 18:55 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 20


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Добрый вечер! Столкнулся с проблемой.
В конце выполнения модуля у меня стоит уведомление
[vba]

Код

MsgBox «Все созданные документы сохранены!», 64, «Отчет»

[/vba]
После нажатия ОК, нужно, чтоб открылась в проводнике папка, адрес которой забит в переменной путь
[vba]

Код

kontr = ActiveSheet.[b3]
путь = «D:ДокументыОтчеты» & kontr

[/vba]
пробую так
[vba]

Код

Set oShell = CreateObject(«Wscript.Shell»)
  oShell.Run (путь)

[/vba]
не получается, пробую уже бред вводить
[vba]

Код

CreateObject(«Wscript.Shell»).Run «cmd путь exit», 0

[/vba]
Толку 0
Помогите, пожалуйста

 

Ответить

DEAD_MaRoZ

Дата: Суббота, 09.04.2016, 19:00 |
Сообщение № 2

Группа: Пользователи

Ранг: Новичок

Сообщений: 20


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

На всякий случай, только что проверил — переменная «путь» отображается корректно
D:ДокументыОтчетыИванов И.И.

 

Ответить

МВТ

Дата: Суббота, 09.04.2016, 20:23 |
Сообщение № 3

Группа: Проверенные

Ранг: Обитатель

Сообщений: 476


Репутация:

137

±

Замечаний:
0% ±


Excel 2007

Как-то так[vba]

Код

    Dim oShell As Object
    Set oShell = CreateObject(«Shell.Application»)
    oShell.Explore («C:temp»)

[/vba]

 

Ответить

Karataev

Дата: Суббота, 09.04.2016, 20:24 |
Сообщение № 4

Группа: Проверенные

Ранг: Старожил

Сообщений: 1330


Репутация:

528

±

Замечаний:
0% ±


Excel

[vba]

Код

Sub jjj()
    Dim objShellApp As Object
    Set objShellApp = CreateObject(«Shell.Application»)
    objShellApp.Explore («D:ДокументыОтчетыИванов И.И.»)
End Sub

[/vba]


Киви-кошелек: 9166309108

 

Ответить

DEAD_MaRoZ

Дата: Суббота, 09.04.2016, 20:49 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 20


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Karataev, МВТ, спасибо. Все работает.
Удачи

Сообщение отредактировал DEAD_MaRoZСуббота, 09.04.2016, 20:50

 

Ответить

krosav4ig

Дата: Воскресенье, 10.04.2016, 22:14 |
Сообщение № 6

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

а можно проще ;) [vba]

Код

CreateObject(«Wscript.Shell»).Run «explorer » & путь

[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

 

Ответить

KuklP

Дата: Понедельник, 11.04.2016, 02:51 |
Сообщение № 7

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Не так уж и проще %) :D
[vba]

Код

CreateObject(«Shell.Application»).Explore «c:temp»

[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

krosav4ig

Дата: Понедельник, 11.04.2016, 03:39 |
Сообщение № 8

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

а так :p [vba]

Код

Shell «explorer » & путь, 1

[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

 

Ответить

Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.

Просмотр папки с файлами

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщений [ 10 ]

1 19.12.2010 18:51:21

  • Ципихович Эндрю
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 506
  • Поблагодарили: 23

Тема: Просмотр папки с файлами

DIM myWord AS Word.Application
Set myWord = New Word.Application 'объявляем объект с именем ...
CALL SHELL("explorer D:Рабочая папкаПользователь", vbNormalFocus) 'открыть папку с именем ...
Set myWord = Nothing

По этому скрипту открыли папку и если в ней напимер 50 файлов то как сделать Вид > Таблица, как???

Там ещё могут быть в Вид:
Эскизы страниц
Плитка
Значки
Список
Таблица

Как сделать Упорядочить значки > Изменён??

Там ещё могут быть в Упорядочить значки:
Имя
Размер
Тип
Изменён

2 Ответ от VBA-addict 20.12.2010 13:11:03

  • VBA-addict
  • майор
  • Неактивен
  • Зарегистрирован: 12.10.2010
  • Сообщений: 66

Re: Просмотр папки с файлами

Вкратце, напрямую — Никак
эти настройки хранятся в реестре винды — помните преснопамятные настройки для каждой папки…
обходной путь — подстроить их для папки, которую вы собираетесь открыть…
начало пути:

внешняя ссылка
внешняя ссылка
внешняя ссылка

Если удастся докопаться — просьба дописать топик

Отредактировано VBA-addict (20.12.2010 13:48:33)

Делай, что можешь, и будь, что будет!

3 Ответ от VBA-addict 20.12.2010 16:57:03

  • VBA-addict
  • майор
  • Неактивен
  • Зарегистрирован: 12.10.2010
  • Сообщений: 66

Re: Просмотр папки с файлами

Кстати, Эндрю, ваша реализация наводит на мысль, что вы, возможно движетесь не в том направлении…
зачем вам открытие в проводнике?

Гораздо удобнее использовать программно окно Открыть офиса, в котором вы можете задать массу параметров, недоступных вам через проводник…

Делай, что можешь, и будь, что будет!

4 Ответ от Ципихович Эндрю 20.12.2010 17:39:13

  • Ципихович Эндрю
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 506
  • Поблагодарили: 23

Re: Просмотр папки с файлами

Dim myWord As Word.Application
Set myWord = New Word.Application 'объявляем объект с именем ...
Call Shell("explorer D:Рабочая папкаПользователь", vbNormalFocus) 'открыть папку с именем ...
Set myWord = Nothing

    Dim winShell As Object
    Dim w As Object
    
    Set winShell = CreateObject("Shell.Application").Windows
    For Each w In winShell
        If w.LocationURL Like "file:///D:/Рабочая*" Then CallByName w.Document, "CurrentViewMode", VbLet, 3: Exit For
   Next
   
'FVM_ICON = 1
'FVM_SMALLICON = 2
'FVM_LIST = 3
'FVM_DETAILS = 4
'FVM_THUMBNAIL = 5
'FVM_TILE = 6
'FVM_THUMBSTRIP = 7
'FVM_CONTENT = 8

осталось два вопроса
1.
как чтобы отказаться от Like с
‘»file:///D:/Рабочая%20папка/Пользователь»
переделать в
«D:Рабочая папкаПользователь»
2.
сделать Вид > Таблица сделали!!!!!!
Как сделать Упорядочить значки > Изменён??
Там ещё могут быть в Упорядочить значки:
Имя
Размер
Тип
Изменён

5 Ответ от Ципихович Эндрю 20.12.2010 17:41:55

  • Ципихович Эндрю
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 506
  • Поблагодарили: 23

Re: Просмотр папки с файлами

Гораздо удобнее использовать программно окно Открыть офиса, в котором вы можете задать массу параметров, недоступных вам через проводник…

Это окно же маленькое 14 экрана, а речь о например 50 файлах, неудобно смотреть, ОК??

6 Ответ от Ципихович Эндрю 20.12.2010 22:22:00

  • Ципихович Эндрю
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 506
  • Поблагодарили: 23

Re: Просмотр папки с файлами

вот это поворот, я то думал, что
в строке
Then CallByName w.Document, «CurrentViewMode», VbLet, 8: Exit For

Например, 8 это будет показ FVM_CONTENT, но проверил, от 1 до 8 всё время показывает списком????????????
‘FVM_ICON = 1
‘FVM_SMALLICON = 2
‘FVM_LIST = 3
‘FVM_DETAILS = 4
‘FVM_THUMBNAIL = 5
‘FVM_TILE = 6
‘FVM_THUMBSTRIP = 7
‘FVM_CONTENT = 8

Что не так???????

7 Ответ от Ципихович Эндрю 21.12.2010 19:53:16

  • Ципихович Эндрю
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 506
  • Поблагодарили: 23

Re: Просмотр папки с файлами

вот скрипт

Dim myWord As Word.Application
Set myWord = New Word.Application 'объявляем объект с именем ...
Папка = "D:Рабочая папкаПользователь" 'открываем папку с именем ...
Call Shell("explorer " & Папка, vbNormalFocus)  'открыть папку с именем ...
Set myWord = Nothing

И = Replace$("D:Рабочая папкаПользователь", "", "/")
И1 = Replace$(И, " ", "%20")
Папка = "file:///" & Left$(И1, (Len(И1) - 1))

Dim winShell As Object
Dim w As Object
    
    Set winShell = CreateObject("Shell.Application").Windows
    For Each w In winShell
        Обрабатываемое_окно = w.LocationURL
        If w.LocationURL = Папка Then MsgBox "Зашло в условие": CallByName w.Document, "CurrentViewMode", VbLet, 2: Exit For
   Next

Проверял, когда VbLet, 1 и VbLet, 2
на строке
If w.LocationURL = Папка Then MsgBox «Зашло в условие»: CallByName w.Document, «CurrentViewMode», VbLet, 1: Exit For

ошибка
Рун Тайм Эррор -2147417848(80010108)
Automation error
Вызванный объект был отключён от клиентов
И самое главное эта ошибка бывает не всегда, иногда её нет и иногда не заходит в последнее условие, так как не показывает
MsgBox «Зашло в условие», специально его поставил!!!!!

8 Ответ от Ципихович Эндрю 22.12.2010 18:38:16

  • Ципихович Эндрю
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 506
  • Поблагодарили: 23

Re: Просмотр папки с файлами

Убрал МсгБокс, всё хорошо
Я понимаю, что Вам это не интересно проверять, но я 4 раза проверил лично, каждый раз менял
в строке CallByName w.Document, «CurrentViewMode», VbLet, 2
последнюю цифру и записывал на лист, какая константа как открывает папку, один раз записал так:
‘FVM_ICON = 1 значки
‘FVM_SMALLICON = 2 значки
‘FVM_LIST = 3 список
‘FVM_DETAILS = 4 таблица
‘FVM_THUMBNAIL = 5 таблица
‘FVM_TILE = 6 таблица
‘FVM_THUMBSTRIP = 7 таблица
‘FVM_CONTENT = 8 таблица
Без задней мысли второй раз проверил, всё уже по другому в том числе и появились
Эскизы страниц, Плитка, Просмотр диафильмов
А потом рискнул написать 9 и 10, ошибок не было, каждый раз открывало в каком то из режимов, где можно точно узнать об этом всём??
Можно ли и как папку сначала открывать невидимой, узнать открыв папку в каком она режиме просмотра открыта, изменить её до нужного и затем сделать видимой????

9 Ответ от Ципихович Эндрю 24.12.2010 15:23:15

  • Ципихович Эндрю
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 506
  • Поблагодарили: 23

Re: Просмотр папки с файлами

сделал всё, кроме как ещё по усмотрению программировать опцию Упорядочить значки при просмотре папки, имеется ввиду например по Размеру?????
Даже не знаю с чего начинать????

по ссылке внешняя ссылка
Там Вордовский файл с кнопкой будет открывать папку С. В нутро кнопки если залезть можно менять Виды просмотра и размеры окна, но удовлетворения нет, глючное оно всё же, как и IE.
То ли дело строки программировать, вычесть, добавить без ошибок всегда

10 Ответ от Ципихович Эндрю 26.12.2010 09:37:41

  • Ципихович Эндрю
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 04.02.2010
  • Сообщений: 506
  • Поблагодарили: 23

Re: Просмотр папки с файлами

Решил:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Const SW_SHOWNORMAL = 1 'сделать окно в режиме нормальный
Const SW_SHOWMINIMIZED = 2 'свернуть окно
Const SW_MAXIMIZE = 3 'сделать окно во весь экран
'___________________________________________________________________________
Private Sub CommandButton1_Click()
 
  Dim Папка As String
  Set objShell = CreateObject("Shell.Application")
  Папка = "D:Рабочая папкаНужное" 'не нужно в конце места нахождения папки ставить наклонную
  objShell.ShellExecute Папка & "", , , , 0 'последняя цифра означает: 0 - скрытое окно
  Sleep 50 'нужна задержка, так как окно не успевает создаться
  For Each w In objShell.Windows
      If InStr(TypeName(w.Document), "ShellFolderView") > 0 Then
         If w.Document.Folder.self.Path = Папка Then
            w.Document.CurrentViewMode = 4
'последняя цифра означает:
'Значки 1
'Значки 2
'Список 3
'Таблица 4
'Эскизы страниц 5
'Плитка 6
'Просмотр диафильмов 7
'Значки 8
         ShowWindow w.hwnd, 3
'SW_SHOWNORMAL = 1 'сделать окно в режиме нормальный
'SW_SHOWMINIMIZED = 2 'свернуть окно
'SW_MAXIMIZE = 3 'сделать окно во весь экран
              Exit For
          End If
      End If
  Next
  Set objShell = Nothing
 
End Sub

Чтобы уже счастье было полным, помогите в этой частисделал всё, кроме того как ещё по усмотрению программировать опцию Упорядочить значки при просмотре папки, имеется ввиду например по Размеру?????
Всего там можно сортироать, по крайней мере в ХР по
Имя
Размер
Тип
Изменён
Даже не знаю с чего начинать????
Заранее спасибо

Сообщений [ 10 ]

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Похожие темы

  • Проблема с файлами WORD.
  • Макрос для изменения связи с файлами
  • Защищенный просмотр
  • Предварительный просмотр в word 2010
  • Просмотр переходов на следующую страницу
  • Создание папки макросом
  • Составление списка файлов из папки
  • Ошибка при удалении файла или папки

Просмотр папки с файлами

Если говорить о приложениях из офисного пакета, то самая популярная, разумеется, Microsoft Word. Вряд ли в ближайшее время  у нее вдруг возникнет серьезный конкурент, который сможет сместить с лидерских позиций. На портале о Microsoft Office Word вы узнаете про: отступ первой строки ко всему документу.
Хотя текстовых редакторов много, но,  у нас в стране, по крайней мере, Ворд значительно опережает другие. На портале о Microsoft Office Word вы узнаете про: убрать непечатуемые знаки в тексте.

На сайте, посвященном  Microsoft Word, вы найдете множество необходимых сведений, а какие-то проблемы, детали и нюансы можно обсудить на форуме Ворд Эксперт. Наш сайт о Microsoft Office Word даст ответ про: как заполнить бланк в ворде.
  Довольно простая и удобная  пользователю регистрационная система, которая досконально объяснена в основном разделе, доступный и понятный всем язык общения, хорошая модерация, исключающая спам и флуд, это так сказать общечеловеческие достоинства форума. Наш сайт о Microsoft Office Word даст ответ про: как из word сделать doc.

С точки зрения предмета обсуждения все так же устроено очень разумно. Вопросы, которые приходят на ум большому количеству пользователей, вынесены в главный раздел, а остальным можно обсудить в разделах, посвященных настройкам, редактированию и форматированию текста, шаблонам, а так же автоматизации процесса. На портале о Microsoft Office Word вы узнаете про: изменить шрифт в outlook 2010.

Участникам предложено самим научиться создавать макросы, использовать готовые или оставить заказ. По такому же принципу решаются все остальные вопросы. Наш сайт о Microsoft Office Word даст ответ про: создание макросов в excel 2007.
Есть и общие темы, не вошедшие в главные разделы и подфорум, где можно высказать свои пожелания.

Понравилась статья? Поделить с друзьями:
  • Vba word открытых документов
  • Vba word отключить сообщения
  • Vba word отключить обновление экрана
  • Vba word определить абзац
  • Vba word объектная модель