Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Как с помощью vba открыть файл


VBA Excel. Открыть файл другой программы

Открытие файла другой программы из кода VBA Excel с помощью функции ShellExecute и метода Run объекта Wscript.Shell по ассоциации с расширением файла.


Функция ShellExecute и метод Run объекта Wscript.Shell позволяют открывать файлы других приложений из кода VBA Excel по ассоциации с их расширениями. Если файл не имеет расширения, или оно ассоциируется с «Неизвестным приложением», будет отображено диалоговое окно для ручного выбора программы, с помощью которой можно открыть этот файл:

Функция ShellExecute

Чтобы открыть файл другой программы с помощью функции ShellExecute, ее необходимо объявить в разделе Declarations того модуля, в котором она будет использоваться.

Разместите следующий код в раздел Declarations программного модуля:

Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Открывайте файлы сторонних приложений из кода VBA Excel с помощью следующей строки:

ShellExecute 0, vbNullString, "C:\Тестовая\Справка VBA Excel.doc", vbNullString, vbNullString, vbNormalFocus

Замените адрес файла «C:\Тестовая\Справка VBA Excel.doc» на адрес своего файла, который необходимо открыть по ассоциации с его расширением.

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

Минус способа – в необходимости объявлять функцию ShellExecute в разделе Declarations каждого модуля, где планируется ее использование.

Метод Run объекта Wscript.Shell

Используйте следующий код VBA Excel, чтобы открыть файл другой программы по его расширению с помощью метода Run объекта Wscript.Shell:

Sub Primer()

Dim ws As Object

  Set ws = CreateObject("WScript.Shell")

    ws.Run "C:\Тестовая\123.png"

  Set ws = Nothing

End Sub

Замените адрес файла «C:\Тестовая\123.png» на адрес своего файла, который необходимо открыть по ассоциации с его расширением.

Минус этого способа заключается в его способности открывать файлы только с адресом, не содержащим пробелы. Если адрес будет содержать пробелы, произойдет следующая ошибка:

VBA Excel. Рабочая книга (открыть, создать новую, закрыть)

Открытие книги Excel из кода VBA. Создание новой книги, присвоение ей имени. Обращение к открытой книге и закрытие. Методы Open, Add и Close объекта Workbooks.

Открытие существующей книги

Существующая книга открывается из кода VBA Excel с помощью метода Open:

Workbooks.Open Filename:="D:\test1.xls"

или

Workbooks.Open ("D:\test1.xls")

В кавычках указывается полный путь к открываемому файлу Excel. Если такой файл не существует, произойдет ошибка.
Проверить существование файла можно с помощью функции Dir:

If Dir("D:\test1.xls") = "" Then

    MsgBox "Файл не существует"

Else

    MsgBox "Файл существует"

End If

Или, если файл существует, можно сразу его открыть:

If Dir("D:\test1.xls") = "" Then

    MsgBox "Файл не существует"

Else

    Workbooks.Open Filename:="D:\test1.xls"

End If

Создание новой книги

Новая рабочая книга Excel создается в VBA с помощью метода Add:

Созданную книгу, если она не будет использоваться как временная, лучше сразу сохранить:

Workbooks.Add

ActiveWorkbook.SaveAs Filename:="D:\test2.xls"

В кавычках указывается полный путь сохраняемого файла Excel, включая присваиваемое имя, в примере – это «test2.xls».

Обращение к открытой книге

Обращение к активной книге:

Обращение к книге с выполняемым кодом:

Обращение к книге по имени:

Workbooks("test1.xls")

Workbooks("test2.xls")

Обратиться по имени можно только к уже открытой книге, а чтобы из кода VBA Excel книгу открыть, необходимо указать полный путь к файлу.

Как закрыть книгу Excel из кода VBA

Открытая рабочая книга закрывается из кода VBA Excel с помощью метода Close:

Workbooks("test1.xlsx").Close

Если закрываемая книга редактировалась, а внесенные изменения не были сохранены, тогда при ее закрытии Excel отобразит диалоговое окно с вопросом: Вы хотите сохранить изменения в файле test1.xlsx? Чтобы файл был закрыт без сохранения изменений и вывода диалогового окна, можно воспользоваться параметром метода Close – SaveChanges:

Workbooks("test1.xlsx").Close  SaveChanges:=False

или

Workbooks("test1.xlsx").Close  (False)

Закрыть книгу Excel из кода VBA с сохранением внесенных изменений можно также с помощью параметра SaveChanges:

Workbooks("test1.xlsx").Close  SaveChanges:=True

или

Workbooks("test1.xlsx").Close (True)

Чтение текстовых файлов в VBA

В нынешнее время использование текстовых файлов для обмена данными или хранения данных становится редкостью, но тем не менее, все еще встречается. Приведу два варианта чтения текстового файла из VBA. Каждый способ может быть полезен в своей ситуации.

Способ 1. Открытие (чтение) текстового файла целиком

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


 Set objExcel = New Excel.Application
 Set wb = objExcel.Workbooks.Open("имя_файла")
 

либо, если используются разделители колонок, можно их задействовать:

Открытие текстового файла с разделителем Tab:


 Set objExcel = New Excel.Application
 Set wb = objExcel.Workbooks
 wb.OpenText Filename:="имя_файла", DataType:=xlDelimited, Tab:=True
 

Открытие текстового файла с разделителем ; (точка с запятой):


 Set objExcel = New Excel.Application
 Set wb = objExcel.Workbooks
 wb.OpenText Filename:="имя_файла", DataType:=xlDelimited, Other:=True, OtherChar:=";"
 

В параметрах можно так же добавить Origin:=xlMSDOS, если текстовый файл в DOS-кодировке.

После открытия файла, его можно пройти как обычные ячейки Excel-кого листа.

Способ 2. Чтение текстового файла построчно

Здесь используется классический вариант чтения как в большинстве языков программирования: открытие файла, цикл чтения построчно, закрытие файла.


 f = FreeFile
 Open "имя_файла" For Input As #f
 Do While Not EOF(f)
 Line Input #f, s
 ' что-нибудь делаем с полученной строкой s
 Loop
 Close f
 

В первой строке определяем число, представляющее следующий номер файла, доступный для использования оператором Open. Затем открываем файл, после чего делаем цикл в котором происходит построчное чтение.

Операции с файлами и каталогами - Visual Basic

  • Чтение занимает 7 мин

В этой статье

В этом пошаговом руководстве приводятся основные сведения о файловом вводе-выводе в Visual Basic.This walkthrough provides an introduction to the fundamentals of file I/O in Visual Basic. В нем описывается создание небольшого приложения, перечисляющего текстовые файлы в каталоге и анализирующего их.It describes how to create a small application that lists and examines text files in a directory. Для каждого выбранного текстового файла приложение предоставляет атрибуты файла и первую строку содержимого.For each selected text file, the application provides file attributes and the first line of content. Кроме того, предоставляется возможность записать информацию в файл журнала.There is an option to write information to a log file.

В этом пошаговом руководстве используются члены My.Computer.FileSystem Object, доступные в Visual Basic.This walkthrough uses members of the My.Computer.FileSystem Object, which are available in Visual Basic. Дополнительные сведения см. в разделе FileSystem.See FileSystem for more information. В конце пошагового руководства приводится эквивалентный пример, в котором используются классы пространства имен System.IO.At the end of the walkthrough, an equivalent example is provided that uses classes from the System.IO namespace.

Примечание

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях.Your computer might show different names or locations for some of the Visual Studio user interface elements in the following instructions. Это зависит от имеющегося выпуска Visual Studio и используемых параметров.The Visual Studio edition that you have and the settings that you use determine these elements. Дополнительные сведения см. в разделе Персонализация среды IDE.For more information, see Personalizing the IDE.

Создание проектаTo create the project

  1. В меню Файл выберите пункт Создать проект.On the File menu, click New Project.

    Откроется диалоговое окно Новый проект .The New Project dialog box appears.

  2. В области Установленные шаблоны разверните узел Visual Basic и выберите элемент Windows.In the Installed Templates pane, expand Visual Basic, and then click Windows. В середине области Шаблоны щелкните Приложение Windows Forms.In the Templates pane in the middle, click Windows Forms Application.

  3. В поле Имя введите FileExplorer, чтобы задать имя проекта, а затем нажмите кнопку ОК.In the Name box, type FileExplorer to set the project name, and then click OK.

    Visual Studio добавит проект в обозреватель решений, после чего откроется конструктор Windows Forms.Visual Studio adds the project to Solution Explorer, and the Windows Forms Designer opens.

  4. Добавьте в форму элементы управления из приведенной ниже таблицы и установите для их свойств соответствующие значения.Add the controls in the following table to the form, and set the corresponding values for their properties.

    Элемент управленияControl СвойствоProperty ЗначениеValue
    ListBoxListBox НазваниеName filesListBox
    КнопкаButton НазваниеName

    ТекстText

    browseButton

    ОбзорBrowse

    КнопкаButton НазваниеName

    ТекстText

    examineButton

    ИсследоватьExamine

    CheckBoxCheckBox НазваниеName

    ТекстText

    saveCheckBox

    Сохранить результатыSave Results

    FolderBrowserDialogFolderBrowserDialog НазваниеName FolderBrowserDialog1

Выбор папки и перечисление файлов в нейTo select a folder, and list files in a folder

  1. Создайте обработчик событий нажатия Click для кнопки browseButton, дважды щелкнув этот элемент управления в форме.Create a Click event handler for browseButton by double-clicking the control on the form. Откроется редактор кода.The Code Editor opens.

  2. Добавьте следующий код в обработчик событий Click.Add the following code to the Click event handler.

    If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then ' List files in the folder. ListFiles(FolderBrowserDialog1.SelectedPath) End If 

    Вызов FolderBrowserDialog1.ShowDialog открывает диалоговое окно Выбор папки.The FolderBrowserDialog1.ShowDialog call opens the Browse For Folder dialog box. Когда пользователь нажимает OK, свойство SelectedPath передается как аргумент методу ListFiles, который добавляется в следующем шаге.After the user clicks OK, the SelectedPath property is sent as an argument to the ListFiles method, which is added in the next step.

  3. Добавьте приведенный ниже метод ListFiles.Add the following ListFiles method.

    Private Sub ListFiles(ByVal folderPath As String) filesListBox.Items.Clear() Dim fileNames = My.Computer.FileSystem.GetFiles( folderPath, FileIO.SearchOption.SearchTopLevelOnly, "*.txt") For Each fileName As String In fileNames filesListBox.Items.Add(fileName) Next End Sub 

    Этот код сперва очищает элемент ListBox.This code first clears the ListBox.

    Затем метод GetFiles возвращает коллекцию строк — по одной для каждого файла в каталоге.The GetFiles method then retrieves a collection of strings, one for each file in the directory. Метод GetFiles принимает аргумент шаблона поиска, чтобы извлечь файлы, соответствующие определенному шаблону.The GetFiles method accepts a search pattern argument to retrieve files that match a particular pattern. В этом примере возвращаются только файлы с расширением TXT.In this example, only files that have the extension .txt are returned.

    Строки, возвращаемые методом GetFiles, затем добавляются в элемент управления ListBox.The strings that are returned by the GetFiles method are then added to the ListBox.

  4. Запустите приложение.Run the application. Нажмите кнопку Обзор.Click the Browse button. В диалоговом окне Выбор папки перейдите в папку, содержащую TXT-файлы, выберите папку и нажмите кнопку ОК.In the Browse For Folder dialog box, browse to a folder that contains .txt files, and then select the folder and click OK.

    Элемент ListBox содержит список TXT-файлов в выбранной папке.The ListBox contains a list of .txt files in the selected folder.

  5. Остановите работу приложения.Stop running the application.

Получение атрибутов файла и содержимого текстового файлаTo obtain attributes of a file, and content from a text file

  1. Создайте обработчик событий нажатия Click для кнопки examineButton, дважды щелкнув этот элемент управления в форме.Create a Click event handler for examineButton by double-clicking the control on the form.

  2. Добавьте следующий код в обработчик событий Click.Add the following code to the Click event handler.

    If filesListBox.SelectedItem Is Nothing Then MessageBox.Show("Please select a file.") Exit Sub End If ' Obtain the file path from the list box selection. Dim filePath = filesListBox.SelectedItem.ToString ' Verify that the file was not removed since the ' Browse button was clicked. If My.Computer.FileSystem.FileExists(filePath) = False Then MessageBox.Show("File Not Found: " & filePath) Exit Sub End If ' Obtain file information in a string. Dim fileInfoText As String = GetTextForOutput(filePath) ' Show the file information. MessageBox.Show(fileInfoText) 

    Этот код проверяет, выбран ли элемент в элементе ListBox.The code verifies that an item is selected in the ListBox. Затем он получает запись пути к файлу из элемента ListBox.It then obtains the file path entry from the ListBox. Метод FileExists позволяет проверить, существует ли файл.The FileExists method is used to check whether the file still exists.

    Путь к файлу передается как аргумент методу GetTextForOutput, который добавляется в следующем шаге.The file path is sent as an argument to the GetTextForOutput method, which is added in the next step. Этот метод возвращает строку, содержащую информацию о файле.This method returns a string that contains file information. Информация о файле отображается в элементе MessageBox.The file information appears in a MessageBox.

  3. Добавьте приведенный ниже метод GetTextForOutput.Add the following GetTextForOutput method.

    Private Function GetTextForOutput(ByVal filePath As String) As String ' Verify that the file exists. If My.Computer.FileSystem.FileExists(filePath) = False Then Throw New Exception("File Not Found: " & filePath) End If ' Create a new StringBuilder, which is used ' to efficiently build strings. Dim sb As New System.Text.StringBuilder() ' Obtain file information. Dim thisFile As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo(filePath) ' Add file attributes. sb.Append("File: " & thisFile.FullName) sb.Append(vbCrLf) sb.Append("Modified: " & thisFile.LastWriteTime.ToString) sb.Append(vbCrLf) sb.Append("Size: " & thisFile.Length.ToString & " bytes") sb.Append(vbCrLf) ' Open the text file. Dim sr As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(filePath) ' Add the first line from the file. If sr.Peek() >= 0 Then sb.Append("First Line: " & sr.ReadLine()) End If sr.Close() Return sb.ToString End Function 

    Метод GetFileInfo используется в коде для получения параметров файла.The code uses the GetFileInfo method to obtain file parameters. Параметры файла добавляются в StringBuilder.The file parameters are added to a StringBuilder.

    Метод OpenTextFileReader считывает содержимое файла в StreamReader.The OpenTextFileReader method reads the file contents into a StreamReader. Первая строка содержимого файла извлекается из StreamReader и добавляется в StringBuilder.The first line of the contents is obtained from the StreamReader and is added to the StringBuilder.

  4. Запустите приложение.Run the application. Нажмите кнопку Обзор и перейдите в папку с TXT-файлами.Click Browse, and browse to a folder that contains .txt files. Нажмите кнопку ОК.Click OK.

    Выберите файл в элементе ListBox и щелкните Исследовать.Select a file in the ListBox, and then click Examine. В окне MessageBox будет выведена информация о файле.A MessageBox shows the file information.

  5. Остановите работу приложения.Stop running the application.

Добавление записи в журналTo add a log entry

  1. В конец обработчика событий examineButton_Click добавьте приведенный ниже код.Add the following code to the end of the examineButton_Click event handler.

    If saveCheckBox.Checked = True Then ' Place the log file in the same folder as the examined file. Dim logFolder As String = My.Computer.FileSystem.GetFileInfo(filePath).DirectoryName Dim logFilePath = My.Computer.FileSystem.CombinePath(logFolder, "log.txt") Dim logText As String = "Logged: " & Date.Now.ToString & vbCrLf & fileInfoText & vbCrLf & vbCrLf ' Append text to the log file. My.Computer.FileSystem.WriteAllText(logFilePath, logText, append:=True) End If 

    Код задает путь к файлу журнала, чтобы файл журнала помещался в тот же каталог, где находится выбранный файл.The code sets the log file path to put the log file in the same directory as that of the selected file. Запись журнала должна содержать текущие дату и время, а далее информацию о файле.The text of the log entry is set to the current date and time followed by the file information.

    Метод WriteAllText, которому передается аргумент append со значением True, используется для создания записи в журнале.The WriteAllText method, with the append argument set to True, is used to create the log entry.

  2. Запустите приложение.Run the application. Перейдите к текстовому файлу, выберите его в элементе ListBox, установите флажок Сохранить результаты и щелкните Исследовать.Browse to a text file, select it in the ListBox, select the Save Results check box, and then click Examine. Проверьте, добавлена ли запись в файл log.txt.Verify that the log entry is written to the log.txt file.

  3. Остановите работу приложения.Stop running the application.

Использование текущего каталогаTo use the current directory

  1. Создайте обработчик событий для события Form1_Load, дважды щелкнув форму.Create an event handler for Form1_Load by double-clicking the form.

  2. Добавьте в обработчик событий приведенный ниже код.Add the following code to the event handler.

    ' Set the default directory of the folder browser to the current directory. FolderBrowserDialog1.SelectedPath = My.Computer.FileSystem.CurrentDirectory 

    Этот код задает текущий каталог в качестве каталога по умолчанию для обозревателя папок.This code sets the default directory of the folder browser to the current directory.

  3. Запустите приложение.Run the application. При первом нажатии кнопки Обзор открывается диалоговое окно Выбор папки с текущим каталогом.When you click Browse the first time, the Browse For Folder dialog box opens to the current directory.

  4. Остановите работу приложения.Stop running the application.

Выборочное включение элементов управленияTo selectively enable controls

  1. Добавьте приведенный ниже метод SetEnabled.Add the following SetEnabled method.

    Private Sub SetEnabled() Dim anySelected As Boolean = (filesListBox.SelectedItem IsNot Nothing) examineButton.Enabled = anySelected saveCheckBox.Enabled = anySelected End Sub 

    Метод SetEnabled включает и отключает элементы управления в зависимости от того, выбран ли элемент в элементе ListBox.The SetEnabled method enables or disables controls depending on whether an item is selected in the ListBox.

  2. Создайте обработчик событий SelectedIndexChanged для элемента filesListBox, дважды щелкнув элемент управления ListBox в форме.Create a SelectedIndexChanged event handler for filesListBox by double-clicking the ListBox control on the form.

  3. Добавьте вызов метода SetEnabled в новый обработчик событий filesListBox_SelectedIndexChanged.Add a call to SetEnabled in the new filesListBox_SelectedIndexChanged event handler.

  4. Добавьте вызов метода SetEnabled в конце обработчика событий browseButton_Click.Add a call to SetEnabled at the end of the browseButton_Click event handler.

  5. Добавьте вызов метода SetEnabled в конце обработчика событий Form1_Load.Add a call to SetEnabled at the end of the Form1_Load event handler.

  6. Запустите приложение.Run the application. Флажок Сохранить результаты и кнопка Исследовать отключены, если элемент не выбран в элементе ListBox.The Save Results check box and the Examine button are disabled if an item is not selected in the ListBox.

Полный пример с использованием My.Computer.FileSystemFull example using My.Computer.FileSystem

Ниже приведен полный пример.Following is the complete example.

 ' This example uses members of the My.Computer.FileSystem ' object, which are available in Visual Basic. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Set the default directory of the folder browser to the current directory. FolderBrowserDialog1.SelectedPath = My.Computer.FileSystem.CurrentDirectory SetEnabled() End Sub Private Sub browseButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles browseButton.Click If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then ' List files in the folder. ListFiles(FolderBrowserDialog1.SelectedPath) End If SetEnabled() End Sub Private Sub ListFiles(ByVal folderPath As String) filesListBox.Items.Clear() Dim fileNames = My.Computer.FileSystem.GetFiles( folderPath, FileIO.SearchOption.SearchTopLevelOnly, "*.txt") For Each fileName As String In fileNames filesListBox.Items.Add(fileName) Next End Sub Private Sub examineButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles examineButton.Click If filesListBox.SelectedItem Is Nothing Then MessageBox.Show("Please select a file.") Exit Sub End If ' Obtain the file path from the list box selection. Dim filePath = filesListBox.SelectedItem.ToString ' Verify that the file was not removed since the ' Browse button was clicked. If My.Computer.FileSystem.FileExists(filePath) = False Then MessageBox.Show("File Not Found: " & filePath) Exit Sub End If ' Obtain file information in a string. Dim fileInfoText As String = GetTextForOutput(filePath) ' Show the file information. MessageBox.Show(fileInfoText) If saveCheckBox.Checked = True Then ' Place the log file in the same folder as the examined file. Dim logFolder As String = My.Computer.FileSystem.GetFileInfo(filePath).DirectoryName Dim logFilePath = My.Computer.FileSystem.CombinePath(logFolder, "log.txt") Dim logText As String = "Logged: " & Date.Now.ToString & vbCrLf & fileInfoText & vbCrLf & vbCrLf ' Append text to the log file. My.Computer.FileSystem.WriteAllText(logFilePath, logText, append:=True) End If End Sub Private Function GetTextForOutput(ByVal filePath As String) As String ' Verify that the file exists. If My.Computer.FileSystem.FileExists(filePath) = False Then Throw New Exception("File Not Found: " & filePath) End If ' Create a new StringBuilder, which is used ' to efficiently build strings. Dim sb As New System.Text.StringBuilder() ' Obtain file information. Dim thisFile As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo(filePath) ' Add file attributes. sb.Append("File: " & thisFile.FullName) sb.Append(vbCrLf) sb.Append("Modified: " & thisFile.LastWriteTime.ToString) sb.Append(vbCrLf) sb.Append("Size: " & thisFile.Length.ToString & " bytes") sb.Append(vbCrLf) ' Open the text file. Dim sr As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(filePath) ' Add the first line from the file. If sr.Peek() >= 0 Then sb.Append("First Line: " & sr.ReadLine()) End If sr.Close() Return sb.ToString End Function Private Sub filesListBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles filesListBox.SelectedIndexChanged SetEnabled() End Sub Private Sub SetEnabled() Dim anySelected As Boolean = (filesListBox.SelectedItem IsNot Nothing) examineButton.Enabled = anySelected saveCheckBox.Enabled = anySelected End Sub 

Полный пример с использованием System.IOFull example using System.IO

Следующий пример выполняет те же действия, используя классы из пространства имен System.IO вместо объектов My.Computer.FileSystem.The following equivalent example uses classes from the System.IO namespace instead of using My.Computer.FileSystem objects.

 ' This example uses classes from the System.IO namespace. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Set the default directory of the folder browser to the current directory. FolderBrowserDialog1.SelectedPath = System.IO.Directory.GetCurrentDirectory() SetEnabled() End Sub Private Sub browseButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles browseButton.Click If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then ' List files in the folder. ListFiles(FolderBrowserDialog1.SelectedPath) SetEnabled() End If End Sub Private Sub ListFiles(ByVal folderPath As String) filesListBox.Items.Clear() Dim fileNames As String() = System.IO.Directory.GetFiles(folderPath, "*.txt", System.IO.SearchOption.TopDirectoryOnly) For Each fileName As String In fileNames filesListBox.Items.Add(fileName) Next End Sub Private Sub examineButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles examineButton.Click If filesListBox.SelectedItem Is Nothing Then MessageBox.Show("Please select a file.") Exit Sub End If ' Obtain the file path from the list box selection. Dim filePath = filesListBox.SelectedItem.ToString ' Verify that the file was not removed since the ' Browse button was clicked. If System.IO.File.Exists(filePath) = False Then MessageBox.Show("File Not Found: " & filePath) Exit Sub End If ' Obtain file information in a string. Dim fileInfoText As String = GetTextForOutput(filePath) ' Show the file information. MessageBox.Show(fileInfoText) If saveCheckBox.Checked = True Then ' Place the log file in the same folder as the examined file. Dim logFolder As String = System.IO.Path.GetDirectoryName(filePath) Dim logFilePath = System.IO.Path.Combine(logFolder, "log.txt") ' Append text to the log file. Dim logText As String = "Logged: " & Date.Now.ToString & vbCrLf & fileInfoText & vbCrLf & vbCrLf System.IO.File.AppendAllText(logFilePath, logText) End If End Sub Private Function GetTextForOutput(ByVal filePath As String) As String ' Verify that the file exists. If System.IO.File.Exists(filePath) = False Then Throw New Exception("File Not Found: " & filePath) End If ' Create a new StringBuilder, which is used ' to efficiently build strings. Dim sb As New System.Text.StringBuilder() ' Obtain file information. Dim thisFile As New System.IO.FileInfo(filePath) ' Add file attributes. sb.Append("File: " & thisFile.FullName) sb.Append(vbCrLf) sb.Append("Modified: " & thisFile.LastWriteTime.ToString) sb.Append(vbCrLf) sb.Append("Size: " & thisFile.Length.ToString & " bytes") sb.Append(vbCrLf) ' Open the text file. Dim sr As System.IO.StreamReader = System.IO.File.OpenText(filePath) ' Add the first line from the file. If sr.Peek() >= 0 Then sb.Append("First Line: " & sr.ReadLine()) End If sr.Close() Return sb.ToString End Function Private Sub filesListBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles filesListBox.SelectedIndexChanged SetEnabled() End Sub Private Sub SetEnabled() Dim anySelected As Boolean = (filesListBox.SelectedItem IsNot Nothing) examineButton.Enabled = anySelected saveCheckBox.Enabled = anySelected End Sub 

См. также разделSee also

Как открыть Word из Excel макросом VBA? Запуск Word из Excel

Если есть необходимость обратиться к данным, хранящимся в текстовом файле приложения Word, или наоборот, передать данные из Excel в такой файл, то возникнет необходимость запуска приложения, в формате которого сохранен файл. Ниже приведен программный код макроса VBA для Microsoft Excel, запускающий приложение Word.

Макрос, запускающий Word из Excel и открывающий новый документ

Если для передачи данных из Excel в Word необходим новый документ, можно воспользоваться примером кода, приведенного ниже. Макрос проверяет запущен ли Word и если он запущен, то добавляет новый документ, если же не запущен, то сначала запускает Word, а затем добавляет новый документ.


 Sub Zapusk_Word_iz_Excel_01() Dim objWrdApp As Object Dim objWrdDoc As Object On Error Resume Next Set objWrdApp = GetObject(, "Word.Application") If objWrdApp Is Nothing Then Set objWrdApp = CreateObject("Word.Application") Set objWrdDoc = objWrdApp.Documents.Add objWrdApp.Visible = True End If Set objWrdDoc = objWrdApp.Documents.Add Set objWrdDoc = Nothing Set objWrdApp = Nothing End Sub
 

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

Макрос, запускающий Word из Excel и открывающий существующий документ

Если для передачи данных из Word в Excel, необходимо открыть файл с заданным именем, то можно использовать аналогичный код, в котором вместо добавления нового документа открывается документ существующий: 


 Sub Zapusk_Word_iz_Excel_02() Dim objWrdApp As Object Dim objWrdDoc As Object On Error Resume Next Set objWrdApp = GetObject(, "Word.Application") If objWrdApp Is Nothing Then Set objWrdApp = CreateObject("Word.Application") Set objWrdDoc = objWrdApp.Documents.Open("C:\Doc1.doc") objWrdApp.Visible = True End If Set objWrdDoc = objWrdApp.Documents.Open("C:\Doc1.doc") Set objWrdDoc = Nothing Set objWrdApp = Nothing End Sub
 

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

Макрос для передачи данных из Excel в Word

Ниже приведен программный код макроса, копирующий в активной рабочей книге Excel диапазон с данными A1:E2 и вставляющий его в открытый документ Word. После передачи данных из Excel в Word производится закрытие документа с сохранением изменений и выход из приложения.


 Sub Peredacha_Dannyh_iz_Excel_v_Word() Dim objWrdApp As Object Dim objWrdDoc As Object On Error Resume Next Set objWrdApp = GetObject(, "Word.Application") If objWrdApp Is Nothing Then Set objWrdApp = CreateObject("Word.Application") Set objWrdDoc = objWrdApp.Documents.Open("C:\Doc1.doc") objWrdApp.Visible = False End If Set objWrdDoc = objWrdApp.Documents.Open("C:\Doc1.doc") Range("A1:E2").Copy objWrdDoc.Range(0).Paste objWrdDoc.Close True 'True - с сохранением, False - без сохранения objWrdApp.Quit Set objWrdDoc = Nothing Set objWrdApp = Nothing End Sub
 

Другие материалы по теме:

Файловые функции VBA | Excel для всех

Файловые функции VBA | Excel для всех Главная » Функции VBA » 28 Апрель 2011       Дмитрий       77108 просмотров
  • CurDir() - функция, которая возвращает путь к каталогу(для указанного диска), в котором по умолчанию будут сохраняться файлы:
     Dim sCurDir As String sCurDir = CurDir("D")

    Dim sCurDir As String sCurDir = CurDir("D")

  • Dir() — позволяет искать файл или каталог по указанному пути на диске. Пример использования можно посмотреть в статье: Просмотреть все файлы в папке
  • EOF() — при операции записи в файл на диске эта функция вернет True, если вы находитесь в конце файла. Обычно используется при работе с текстовыми файлами — .txt. При сохранении книг Excel лучше использовать стандартные методы: Save и SaveAs.
  • Error() - позволяет вернуть описание ошибки по ее номеру. Генерировать ошибку нужно при помощи метода RaiseError() специального объекта Er.
  • Print - записывает в открытый файл указанный текст. Далее будет приведен пример использования данной функции
  • FreeFile() — позволяет определить номер следующего свободного файла, который можно использовать как номер файла при его открытии методом Open. Предпочтительно применять именно этот метод определения номера файла(вместо статичного #1), чтобы не было неоднозначности обращения к файлам. Ниже приведены примеры применения данной функции при обращении к файлам
  • FileAttr() — позволяет определить, как именно был открыт файл в файловой системе: на чтение, запись, добавление, в двоичном или текстовом режиме и т.п. Применяется для работы с текстовыми файлами, открытыми при помощи Open "C:\Text1.txt" For [] As #1
    Открыть файл можно несколькими способами, приведу примеры наиболее распространенных вариантов:
    • Input() — открывает текстовый файл на чтение. Т.е. таким методом можно открыть файл и вытянуть из него данные. Например, чтобы считать информацию из файла C:Text1.txt и вывести ее в окно Immediate можно применить такой код:
       Dim MyChar Open "C:\Text1.txt" For Input As #1 'Открываем файл функцией Open() на чтение(Input) Do While Not EOF(1) 'пока файл не кончился ' Получаем по одному символу и добавляем его к предыдущим MyChar = MyChar & Input(1, #1) Loop Close #1 ' Закрываем файл 'Выводим его содержание в окно Immediate '(отобразить Immediate: Ctrl+G в окне редактора VBA) Debug.Print MyChar 'или в MsgBox MsgBox MyChar, vbInformation, "www.excel-vba.ru"

      Dim MyChar Open "C:\Text1.txt" For Input As #1 'Открываем файл функцией Open() на чтение(Input) Do While Not EOF(1) 'пока файл не кончился ' Получаем по одному символу и добавляем его к предыдущим MyChar = MyChar & Input(1, #1) Loop Close #1 ' Закрываем файл 'Выводим его содержание в окно Immediate '(отобразить Immediate: Ctrl+G в окне редактора VBA) Debug.Print MyChar 'или в MsgBox MsgBox MyChar, vbInformation, "www.excel-vba.ru"

    • Ouput() — метод открывает файл для записи. Например, чтобы записать в файл строку, содержащую все ячейки в выделенном диапазоне, можно использовать такой код:
      Sub SelectionToTxt() Dim s As String, rc As Range Dim ff 'запоминаем все значения из выделенной строки в строку For Each rc In Selection If s = "" Then 'если пока ничего не записали - присваиваем только значение ячейки s = rc.Value Else 'если уже записано - добавляем через TAB s = s & vbTab & rc.Value End If Next ff = FreeFile 'Открываем текстовый файл 'если файла нет - он будет создан Open "C:\Text1.txt" For Output As #ff 'записываем значение строки в файл Print #ff, s Close #ff ' Закрываем файл End Sub

      Sub SelectionToTxt() Dim s As String, rc As Range Dim ff 'запоминаем все значения из выделенной строки в строку For Each rc In Selection If s = "" Then 'если пока ничего не записали - присваиваем только значение ячейки s = rc.Value Else 'если уже записано - добавляем через TAB s = s & vbTab & rc.Value End If Next ff = FreeFile 'Открываем текстовый файл 'если файла нет - он будет создан Open "C:\Text1.txt" For Output As #ff 'записываем значение строки в файл Print #ff, s Close #ff ' Закрываем файл End Sub

      Важно помнить, что при открытии файла таким методом(Output) все предыдущие данные из файла стираются и в файле будет записано только то, что мы записали в текущем сеансе. Если данные необходимо добавить к имеющимся - используется метод Append

    • Append() — метод открывает файл для записи, но в отличии от Output записывает данные в конец файла, а не перезаписывает текущие данные. Например, код добавления выделенных ячеек как одной строки в имеющийся файл будет выглядеть так:
      Sub SelectionToTxt_Add() Dim s As String, rc As Range Dim ff 'запоминаем все значения из выделенной строки в строку For Each rc In Selection If s = "" Then 'если пока ничего не записали - присваиваем только значение ячейки s = rc.Value Else 'если уже записано - добавляем через TAB s = s & vbTab & rc.Value End If Next ff = FreeFile 'Открываем текстовый файл 'если файла нет - он будет создан Open "C:\Text1.txt" For Append As #ff 'записываем значение строки в файл Print #ff, s Close #ff ' Закрываем файл End Sub

      Sub SelectionToTxt_Add() Dim s As String, rc As Range Dim ff 'запоминаем все значения из выделенной строки в строку For Each rc In Selection If s = "" Then 'если пока ничего не записали - присваиваем только значение ячейки s = rc.Value Else 'если уже записано - добавляем через TAB s = s & vbTab & rc.Value End If Next ff = FreeFile 'Открываем текстовый файл 'если файла нет - он будет создан Open "C:\Text1.txt" For Append As #ff 'записываем значение строки в файл Print #ff, s Close #ff ' Закрываем файл End Sub

  • FileDateTime() — позволяет получить информацию о последнем времени обращения к указанному файлу. Если к файлу после создания ни разу не обращались, то это будет время создания файла. Если попытаться обратиться к уже открытой книге/файлу - то будет получено время открытия книги/файла, а не создания или сохранения.
     sFileDateTime = FileDateTime("C:\Text1.txt")

    sFileDateTime = FileDateTime("C:\Text1.txt")

  • FileLen() — позволяет определить длину указанного файла в байтах:
     MsgBox FileLen("C:\Text1.txt") & " bites", vbInformation, "www.excel-vba.ru"

    MsgBox FileLen("C:\Text1.txt") & " bites", vbInformation, "www.excel-vba.ru"

  • GetAttr() — возможность обратиться к файлу к файловой системе и получить информацию об его атрибутах (скрытый, доступен только для чтения, архивный и т.п.)
  • InputB() — позволяет указывать количество байт, которые надо считать из файла. Альтернатива методу Open в случаях, когда необходимо считывать данные не по конкретным строкам, а именно побайтово.
  • Loc() — от Location, то есть местонахождение — возвращает число, которое определяет текущее место вставки или чтения в открытом файле.
  • Seek() — очень похожа на функцию Loc(), но Seek() возвращает информацию о позиции, с которой будет выполняться следующая операция чтения или вставки.
  • LOF() — length of file — позволяет определить длину открытого файла в байтах.

Статья помогла? Сделай твит, поделись ссылкой с друзьями!

Юридическая информация

Так же с этой статьей читают:

Наши партнеры


Спасибо за сообщение

Ваше сообщение было получено и отправлено администратору.

Как открыть текстовый файл с кодом vba и скопировать его содержимое в Excel?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
.

Как открыть файловый браузер и добавить файл с помощью VBA?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

Как открыть файл с переменным расширением в vba excel

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

Excel Vba для открытия файла с использованием .range в качестве каталога

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

Как открыть определенные папки Excel в файле с общим именем с помощью vba

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Стек Overflo
.

Откройте файл PDF и выполните поиск текста с помощью excel vba

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

Смотрите также