Microsegment.ru
  • Главная страница
  • О проекте
  • Портфолио
  • Блог
Языки программирования

Полезные функции VBA в Excel

Полезные функции VBA в Excel
Языки программирования

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

Оптимизация Excel при использовании VBA

MS Excel обладает огромным количеством возможностей. За подобное разнообразие нужно платить. При элементарном использовании MS Excel пользователи не замечают нагрузку на персональный компьютер. Однако, при автоматизированной обработке больших объемов данных или исполнении сложных функций на VBA, нагрузка становится ощутимой, вплоть до «зависания» компьютера. Для нормализации нагрузки на MS Excel при использовании VBA требуется отключить большинство предустановленных возможностей табличного процессора с помощью функции MacroOptimization().

Sub MacroOptimization()
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    ActiveSheet.DisplayPageBreaks = False
    Application.DisplayStatusBar = False
    Application.DisplayAlerts = False
    
End Sub

После исполнения вышеуказанного кода и программы на VBA требуется восстановить заблокированные возможности табличного процессора MS Excel. Для этого нужно выполнить функцию ReturnMacroOptimization(), описанную ниже.

Sub ReturnMacroOptimization()
    
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    ActiveSheet.DisplayPageBreaks = True
    Application.DisplayStatusBar = True
    Application.DisplayAlerts = True
    
End Sub

Взаимодействие с файлами

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

'----- Open file -----
Sub OpenFile(fileadress As String, bookname As String, ext As String)

    Dim s As String
    s = fileadress & "\" & bookname & "." & ext
    Workbooks.Open (s)
'    Workbooks.Open Filename = s

End Sub

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

'----- Selection (book) -----
Sub BookSelection(wb As Workbook, bookname As String, ext As String)
    
    If bookname = "ActiveWorkbook" Then
        Set wb = ActiveWorkbook
    ElseIf bookname = "ThisWorkbook" Then
        Set wb = ThisWorkbook
    Else
        Set wb = Workbooks(bookname & "." & ext)
    End If
    
End Sub

Также частой операцией является передача фокуса на определенный лист MS Excel. Это можно сделать с помощью функции SheetSelection().

'----- Selection (sheet) -----
Sub SheetSelection(ws As Worksheet, bookname As String, ext As String, sheetname As String)
    
    Dim wb As Workbook
    Call BookSelection(wb, bookname, ext)
    If bookname = "ActiveSheet" Then
        Set ws = ActiveSheet
    Else
'        Set ws = wb.Worksheets(sheetname)
        Set ws = wb.Sheets(sheetname)
    End If
    
End Sub

Часто требуется обработать данные, находящиеся в определенном диапазоне определенного листа в файле MS Excel. Сначала данные из диапазона требуется скопировать в массив с помощью функции CopyingRangeToArray().

'----- Copying data from sheet to array -----
Sub CopyingRangeToArray(a() As Variant, _
bookname As String, ext As String, _
sheetname As String, rangename As String)
    
    Dim ws As Worksheet
    Call SheetSelection(ws, bookname, ext, sheetname)
    ws.Range(rangename).CurrentRegion.Select
    a = Selection
    
End Sub

Иногда требуется произвести манипуляции с данными во всем файле. Для этого требуется скопировать данные из файла в массив с помощью функции CopyingFileToArray().

'----- Copying data from file to array -----
Sub CopyingFileToArray(a() As Variant, fileadress As String, _
bookname As String, ext As String, _
sheetname As String, rangename As String)
    
    Call OpenFile(fileadress, bookname, ext)
    Call CopyingRangeToArray(a, bookname, ext, sheetname, rangename)
    Workbooks(bookname & "." & ext).Close SaveChanges = False
    
End Sub

После обработки данные обычно требуется вернуть в файл. Это можно сделать с помощью функции CopyingArrayToRange().

'----- Copying data from array to sheet -----
Sub CopyingArrayToRange(a() As Variant, _
bookname As String, ext As String, _
sheetname As String, rangename As String)
    
    Dim ws As Worksheet
    Call SheetSelection(ws, bookname, ext, sheetname)
    ws.Range(rangename).Value = a
    
End Sub

После обработки данных в программе VBA данные можно выгрузить в файл с помощью функции CopyingArrayToFile().

'----- Copying data from array to file -----
Sub CopyingArrayToFile(a() As Variant, fileadress As String, _
bookname As String, ext As String, _
sheetname As String, rangename As String)
    
    Call OpenFile(fileadress)
    Call CopyingArrayToRange(a, bookname, ext, sheetname, rangename)
    Workbooks(bookname & "." & ext).Close SaveChanges = True
    
End Sub

excel VBA практика

Предыдущая статьяПереход от "каскадной" к "гибкой" методике разработки информационных системСледующая статья Комбинаторика

Рубрики

Метки

abc abcd excel Python sql VBA xyz Комбинаторика Математика Теория вероятностей анализ виртуальный помощник данные знания информационная система информация корпоративная информационная система маркетинг мудрость о проекте оптимизация практика программное обеспечение пэст ролевая модель теория юмор языки программирования

Политика конфиденциальности

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




Администрация и владельцы данного информационного ресурса не несут ответственности за возможные последствия, связанные с использованием информации, размещенной на нем.


Все права защищены. При копировании материалов сайта обязательно указывать ссылку на © Microsegment.ru (2020-2025)