intPrinterEndPos = Application.Find(",", strInfo, 1)
intDriverEndPos = Application.Find(",", strInfo,
intPrinterEndPos + 1)
' Определение названия принтера
strPrinter = Left(strInfo, intPrinterEndPos – 1)
' Определение драйвера
strDriver = Mid(strInfo, intPrinterEndPos + 1,
intDriverEndPos _
– intPrinterEndPos – 1)
' Определение порта (его название заканчивается символом ":")
strPort = Mid(strInfo, intDriverEndPos + 1, InStr(1, strInfo,
":") _
– intDriverEndPos – 1)
' Формирование информационного сообщения
strMessage = «Принтер:» & Chr(9) & strPrinter & Chr(13)
strMessage = strMessage & «Драйвер:» & strDriver & Chr(13)
strMessage = strMessage & «strPort:» & Chr(9) & strPort
' Вывод информационного сообщения
MsgBox strMessage, vbInformation, «Сведения о принтере по умолчанию»
End Sub
В данном примере для получения информации о принтере используется API-функция GetProf ileStringA. Эта функция возвращает в строку-буфер strFullInf о информацию в виде <���имяпринтера>, <���драйвер>, <���порт>:.
После запуска данного макроса на экран выводится окно Сведения о принтере по умолчанию (название окна можно корректировать по своему усмотрению путем внесения соответствующих изменений в код макроса), в котором будет показана марка принтера, а также его драйвер и порт.
Вывод текущей даты и времени
Применив несложный трюк, можно в любой момент вывести на экран окно с информацией о текущей дате и времени. Для достижения такого эффекта достаточно написать и запустить макрос, код которого выглядит следующим образом (листинг 3.84).
Листинг 3.84. Сообщение о дате и времени
Sub TimeAndDate()
Dim strDate As String, strTime As String
Dim strGreeting As String
Dim strUserName As String
Dim intSpacePos As Integer
strDate = Format(Date, «Long Date»)
strTime = Format(Time, «Medium Time»)
' Приветствие – в зависимости от времени суток
If Time < TimeValue(«12:00») Then
strGreeting = "Доброе утро, "
ElseIf Time < TimeValue(«17:00») Then
strGreeting = "Добрый день, "
Else
strGreeting = "Добрый вечер, "
End If
' В приветствие добавляется имя текущего пользователя
strUserName = Application.UserName
intSpacePos = InStr(1, strUserName, " ", 1)
' Управление ситуацией, когда в имени нет пробела
If intSpacePos = 0 Then intSpacePos = Len(strUserName)
strGreeting = strGreeting & Left(strUserName, intSpacePos)
' Вывод на экран информационного сообщения о дате и времени
MsgBox strDate & vbCrLf & strTime, vbOKOnly, strGreeting
End Sub
После каждого выполнения данного макроса на экране будет отображаться окно с информацией о текущей дате и времени. В заголовке окна, помимо имени пользователя, будет содержаться текст Доброе утро, Добрый день либо Добрый вечер (в зависимости от времени суток).
Автоматическое создание документов Word на основе табличных данных Excel
В данном разделе мы рассмотрим трюк, с помощью которого можно автоматически создавать текстовые документы Word на основе данных, хранящихся в таблице Excel. Это бывает необходимо, например, для быстрого формирования текстовых отчетов, в которых должны фигурировать табличные данные. Использование этого приема мы рассмотрим на конкретном примере.
Предположим, что у нас есть следующие данные о продажах по регионам (рис. 3.31).
Внимание!
При изучении данного раздела следует обращать внимание на расположение данных на рабочем листе (то есть на координаты задействованных ячеек).
Для автоматического создания отчетов на основании приведенных данных следует в стандартном модуле редактора VBA написать код, приведенный в листинге 3.85.
Рис. 3.31. Данные о продажах
Листинг 3.85. Создание документов Word на основе таблицы Excel
Sub ReportToWord()
Dim intReportCount As Integer ' Количество сообщений
Dim strForWho As String ' Получатель сообщения
Dim strSum As String ' Сумма за товар
Dim strProduct As String ' Название товара
Dim strOutFileName As String ' Имя файла для сохранения
сообщения
Dim strMessage As String ' Текст дополнительного сообщения
Dim rgData As Range ' Обрабатываемые ячейки
Dim objWord As Object
Dim i As Integer
' Создание объекта Word
Set objWord = CreateObject(«Word.Application»)
' Информация с рабочего листа
Set rgData = Range(«A1»)
strMessage = Range(«E6»)
' Просмотр записей на листе Лист1
intReportCount = Application.CountA(Range(«A:A»))
For i = 1 To intReportCount
' Динамические сообщения в строке состояния
Application.StatusBar = "Создание сообщения " & i
' Назначение данных переменным
strForWho = rgData.Cells(i, 1).Value
strProduct = rgData.Cells(i, 2).Value
strSum = Format(rgData.Cells(i, 3).Value, «#,000»)
' Имя файла для сохранения отчета
strOutFileName = ThisWorkbook.path & "\" & strForWho &
«.doc»
' Передача команд в Word
With objWord
.Documents.Add
With .Selection
' Заголовок сообщения
.Font.Size = 14
.Font.Bold = True
.ParagraphFormat.Alignment = 1
.TypeText Text:="О Т Ч Е Т"
Читать дальше
Конец ознакомительного отрывка
Купить книгу