Готовые макросы в VBA Excel, Миронов. Готовые макросы в vba excel, Миронов Глава Макросы 9
Скачать 1.35 Mb.
|
Посмотреть все файлы в каталоге_3' Объявление API-функции для отображения стандартного окна _ просмотра папок Declare Function SHBrowseForFolder Lib "shell32.dll" _ Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long ' Объявление API-функции для преобразования данных, возвращаемых _ функцией SHBrowseForFolder, в строку Declare Function SHGetPathFromIDList Lib "shell32.dll" _ Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal _ pszPath As String) As Long ' Структура используется функцией SHBrowseForFolder Type BROWSEINFO hwndOwner As Long ' Родительское окно (для диалога) pidlRoot As Long ' Корневая папка для просмотра strDisplayName As String strTitle As String ' Заголовок окна ulFlags As Long ' Флаги для окна ' Следующие три параметра в VBA не используются lpfn As Long lParam As Long iImage As Long End Type Sub BrowseFolder1() Dim strPath As String ' Папка, список файлов которой выводится Dim strFile As String Dim intRow As Long ' Текущая строка таблицы ' Выбор папки strPath = dhBrowseForFolder() If strPath = "" Then Exit Sub If Right(strPath, 1) <> "\" Then strPath = strPath & "\" ' Оформление заголовка отчета ActiveSheet.Cells.ClearContents ActiveSheet.Cells(1, 1) = "Имя файла" ActiveSheet.Cells(1, 2) = "Размер" ActiveSheet.Cells(1, 3) = "Дата/время" ActiveSheet.Range("A1:C1").Font.Bold = True ' Просмотр объектов в папке... ' Первый объект папки strFile = Dir(strPath, 7) intRow = 2 Do While strFile <> "" ' Запись в столбец "A" имени файла ActiveSheet.Cells(intRow, 1) = strPath & strFile ' Запись в столбец "B" размера файла ActiveSheet.Cells(intRow, 2) = FileLen(strPath & strFile) ' Запись в столбец "C" времени изменения файла ActiveSheet.Cells(intRow, 3) = FileDateTime(strPath & strFile) ' Следующий объект папки strFile = Dir intRow = intRow + 1 Loop End Sub Function dhBrowseForFolder() As String Dim biBrowse As BROWSEINFO Dim strPath As String Dim lngResult As Long Dim intLen As Integer ' Заполнение полей структуры BROWSEINFO ' Корневая папка - Рабочий стол biBrowse.pidlRoot = 0& ' Заголовок окна biBrowse.strTitle = "Выбор папки" ' Тип возвращаемой папки biBrowse.ulFlags = &H1 ' Выводим стандартное окно просмотра папок lngResult = SHBrowseForFolder(biBrowse) ' Обработка результата работы окна If lngResult Then ' Получение пути (по возвращенным данным) strPath = Space$(512) If SHGetPathFromIDList(ByVal lngResult, ByVal strPath) Then ' Строка пути заканчивается символом Chr(0) intLen = InStr(strPath, Chr$(0)) ' Выделение и возврат пути dhBrowseForFolder = Left(strPath, intLen - 1) Else ' Не удалось получить путь dhBrowseForFolder = "" End If Else ' Пользователь нажал кнопку "Отмена" в окне dhBrowseForFolder = "" End If End Function Глава 3. Рабочая область Microsoft ExcelРабочая книгаКоличество имен рабочей книгиSub CountNames() Dim intNamesCount As Integer ' Получаем и отображаем количество имен на активном _ листе рабочей книги intNamesCount = Names.Count If intNamesCount = 0 Then MsgBox "Имен нет" Else MsgBox "Имен: " & intNamesCount & " шт." End If End Sub Защита рабочей книгиSub Worksheet_BeforeRightClick(ByVal Target As Range, _ Cancel As Boolean) If Target.Address = "$D$2" Then ' Установка защиты рабочей книги (с паролем "123", _ включенной защитой структуры книги и защитой расположения _ окон) ThisWorkbook.Protect "123", True, True ' Указание не обрабатывать нажатие кнопки мыши _ в этой ячейке Cancel = True ElseIf Target.Address = "$E$5" Then ' Снятие защиты с книги (необходимо указать ранее установленный _ пароль) ThisWorkbook.Unprotect "123" Cancel = True End If End Sub |