с

Вопрос - Ответ - Пример
Excel - VBA

Задать вопрос 8.10.04 - 3.09.05

Прoгресс-бар в статус-баре
Стандартными средствами Excel нельзя показать прогресс-бар на строке состояния. Самое большее это можно показать проценты выполнения:
Application.StatusBar = "Выполнено - 24%"
Application.StatusBar =False 'Возвращает стандартный вид StatusBar
или организовать псевдопрогресс-бар из текстовых знаков - см.пример10kb
Это всё не тот вид, как хотелось бы. Более настоящий прогресс-бар организовать можно только с помощью API функций. Например в Class Modul'е (см.пример15kb - автор Борис Файфель.)
Или ещё вариант (см.пример15kb) реализует другой принцип. Создаётся форма с требуемыми элементами. Вкачестве элемента может быть что угодно, вполоть до медиаплеера. Форма обрезается, остаётся только необходимый элемент. Передвигаем элемент в требуемое место. Используется немодальная форма (Excel 2000 и позднее), что бы программа могла продолжить выполнение длитильного процесса.
Массив элементов CommandBarButton
В VB организовать массив элементов просто - только задать соответствующие имена и индексы.
В VBA для этого приходится создавать Class Module. Можно конечно определить каждой кнопке свой макрос (.OnAction) из которого передать какой-либо параметр в одну процедуру, но в некоторых случаях (слишком много кнопок, заранее не известно количество кнопок и т.п.) это не удобно. Посмотрев пример Вы увидите, что использовать Class Module совсем не сложно (см.пример15kb)
Существует способ узнать пароль проекта VBA?
Существует несколько программ взлома паролей. Для их поиска можно воспользоватся одним из поисковых средств в WEB. В поиске Вам помогут ключевые слова Excel password. Существование подобных программ говорит о том, что пароли Excel не настолько надёжны, как того хотелось бы. (см.пример - Advanced VBA Password Recovery)
VBA: как создать панель?
Создать новую командную панель просто:
CommandBars.Add (Name:="NewBar", Position:=msoBarTop, temporary:=True)
Если указать в скобках MenuBar:=True, то новая панель заменит главное меню Excel.
Если temporary:=False, то панель останется и после перезагрузки Excel.
Position определяет место где появится панель. (msoControlPopup - контекстное меню).
Но ещё в панель необходимо дабавить инструменты (см.пример16kb)
Трюк - объёмный текст на форме
Если нельзя, но очень хочется, то можно. Объёмные буквы надписи можно сделать с помощью двух надписей. Расположите их одна над другой с небольшим смешением, задайте им разные цвета и конечно свойство BackStyle=0-fmBackStyleTransparent (делает фон надписи прозрачным). (см.пример9kb)
Как создать красивую форму с градиентном заполнением
Можно на форму поместить готовый рисунок с градиентной заливкой или какой-либо другой, задав свойство Picture формы. Незабудте свойство .PictureSizeMode = fmPictureSizeModeStretch.(см.пример12kb )
Калькулятор в ячейке и стандартный
При вычислительной мощности Excel сделать суперкалькулятор не сложно. Но обычно приходится делать вычисления простые и не хочется выходить из программы чтобы сложить два числа. Можно воспользоваться простым примером (см.пример8kb), а можно открыть и стандартный калькулятор (см.пример10kb) в окне находящемся всегда наверху.
Надстройка COMAddIn
Надстройку COMAddIn сделать и подключить не сложнее, чем обычную надстройку AddIn. Однако одним VBA не обойтись. Для создания требуются серьёзные языки, из которых VB6 наиболее будет знаком программисту VBA. Вот два примера от Микрософт: (см.пример84kb) (см.пример144kb) И ещё один простой пример надстройки, которая создаёт в главном меню кнопку при щелчке на которой появляется Ваша форма. Можете использовать пример как заготовку для простых проектов(см.пример20kb)
Вывести число прописью
Часто в бугалтерских документах требуется написать сумму для выплаты прописью. Можете воспользоваться функцией, преобразующей число в надпись, например: 4521 -> Четыре тысячи пятьсот двадцать один рубль. Код легко может быть адаптирован под ваши нужды. (см.пример11kb)
Простая анимация в Excel
Хочу привести два примера анимации сделанными средствами Excel. Примеры найдены на бескрайних просторах Интернет.
Прервый пример (см.пример8kb) подходит для оживления Вашего отчёта. Согласитесь гораздо интереснее его смотреть, когда диаграммы оживают.
Второй пример - скорее игрушка, весьма оригинальные часы (см.пример45kb)
Как работать с браузером Internet
Internet всё больше распространяется, в том числе он появляется и во многих офисах. Для навигации обычно используют Internet Explorer, но в Excel можно вставить контрол WebBrowser и добиться с помощью него автоматизации каких-либо Ваших работ в интернете. Смотрите пример23kb, который помогает собрать код страничек интернета и сохранить на Вашем компьютере.
Как закрыть форму клавишей "Escape"
Разместите на форме кнопку. Установите её свойство Сancel как True. Напишите код для нажатия кнопки:
Private Sub CommandButton1_Click()
  Unload Me
  Set UserForm1 = Nothing
End Sub
Ваша задача решена.
Как включить события уровня Application
Для этого нужно:
  1. Создать новый модуль класса (Class1) с кодом:
  2. Public WithEvents XL As Application
    Private Sub XL_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
      MsgBox ActiveCell.Value
    End Sub
  3. В обычном модуле создайте переменную:
  4. Public X As New Class1
  5. Свяжите объявленную переменную с объектом Application. Обычно эта операция выполняется при открытии книги:
  6. Private Sub Workbook_Open()
      Set X.XL = Application
    End Sub
  7. Всё.
Если Вы запустите этот файл (см.пример5kb),то любое изменение выделения на любом листе приведёт к появлению окна сообщения с ActiveCell.Value.
RichTextBox и Shapes
Предлагаю один пример, в котором с помощью элемента RichTextBox можно просмотреть различные Shapes листа (см.пример29kb)
Работать с диаграммами
Объектная модель диаграммы весьма сложна. Воспользуйтесь командой записи макросов, создайте диаграмму и выполните ряд обычных действий по её редактированию. Посмотрев код Вы наверняка удивитесь его объёму. Однако, одним из лутших способом ознакомления с объектной моделью объекта Chart является запись макросов при внесении изменений в диаграммы. Полученный код конечно требует правки. (см.пример20kb)
Технология Automation и с чем её едят
Automation это технология, позволяющая программно управлять объектами из других приложений. То есть, если Вам не хватает функций в своём приложении, Вы можете подключить объект другого приложения (поддерживающего Automation) и использовать его функции.Например:
  1. Использовать способность Excel решать сложные математические формулы в Word.
  2. Использовать возможности Access работы с базой данных в Excel.
  3. Использовать методы Outlook для почтовых сообщений.
  4. И т.д. и т.п.
Пример Automation (см.пример7kb) - программа на VB6, использующая проверку орфографии Excel. Если при её запуске появится требование установки библиотеки VB6, установите любую программу на VB6 (например с этого сайта RemontMidi - полный пакет)
Как управлять помощником в Office?
Если Вы разместите этот код в модуле и запустите макрос "A", то сможете, немного поэксперементировав, разодбратся во всех (или почти во всех) свойствах объекта Assistant Применяйте помощника для разнообразия Ваших программ.
Dim b As Balloon, str As String, i As Long

Sub A()
Set b = Assistant.NewBalloon
With b
  .Heading = "Заголовок"
  .Text = "Выберите оценку"
  .Labels(1).Text = "Еденица"
  .Labels(2).Text = "Два"
  .Labels(3).Text = "Три"
  .Labels(4).Text = "Четыре"
  .Labels(5).Text = "Пять"
  .Animation = msoAnimationGreeting
  .BalloonType = msoBalloonTypeButtons
  .Button = msoButtonSetNone
  .CheckBoxes(1).Text = "С плюсом"
  .CheckBoxes(2).Text = "С минусом"
  .Mode = msoModeModeless
  .Callback = "Click_Po_Knopkam"
  .Icon = msoIconAlertQuery
  i = .Show
  If i = 0 Then
    Application.CommandBars(1).Controls("Справка").Controls("Показать помощника").Execute
    .Show
  End If
End With
End Sub

Sub Click_Po_Knopkam(bln As Balloon, lbtn As Long, lPriv As Long)
  If b.CheckBoxes(1).Checked = True And b.CheckBoxes(2).Checked = True Then
    b.Close
    Set b = Assistant.NewBalloon
    With b
      .Heading = "Определитесь с выбором"
      .Animation = msoAnimationGetArtsy
      .Button = msoButtonSetOK
      .Icon = msoIconAlert
      .Show
    End With
    Exit Sub
  ElseIf b.CheckBoxes(1).Checked = True Then
    str = " с плюсом"
  ElseIf b.CheckBoxes(2).Checked = True Then
    str = " с минусом"
  Else: str = ""
  End If
  b.Close
Set b = Assistant.NewBalloon
With b
  .Heading = "ВЫ"
  .Text = "Выбрали " & lbtn & str
  .Animation = msoAnimationThinking
  .Button = msoButtonSetOK
  .Icon = msoIconAlertInfo
  .Show
End With
End Sub

Быстрый перенос массива в диапазон и перенос диапазона в массив
Пример ниже демонстрирует самый быстрый способ переноса массива в диапазон:
Sub Perenos()
Dim RowsMax As Long, ColumnsMax As Long
Dim i As Long, j As Long
Dim Massiv() As Long
Dim StartTimer As Date
'Получение размеров массива
  RowsMax = Val(InputBox("Сколько строк?"))
  ColumnsMax = Val(InputBox("Сколько колонок?"))
'Изменение размерности временного массива
  ReDim Massiv(1 To RowsMax, 1 To ColumnsMax)
'Заполнение временного массива
  For i = 1 To RowsMax
    For j = 1 To ColumnsMax
      Massiv(i, j) = i * 1000 + j
    Next
  Next
'запись момента начала переноса
  StartTimer = Timer
'И самое главное - перенос массива на рабочий лист
  Application.ScreenUpdating = False
  ActiveCell.Range(Cells(1, 1), Cells(RowsMax, ColumnsMax)) = Massiv
  Application.ScreenUpdating = True
'Отображение времени выполнения операции
  MsgBox Format(Timer - StartTimer, "00.00") & "секунд."
End Sub
Массив размером 500х256 переносится около 1 секунды. Используя цикл по ячейкам для переноса Вы затратите на него около 200 секунд. Вывод ясен.

Но для выполнения каких - либо действий над массивом (матрицами, например) их нужно получить. Пример показывает перенос диапазона ячеек в массив:
Dim x As Variant
  x=Range("A1:IV500")

Массив CheckBox на рабочем листе
Когда на листе несколько внедрённых объектов, с ними работать легко. Создал каждому свой макрос и всё. Труднее сделать один макрос на большое количество элементов. Обычно задают вопрос, как создать массив (например кнопок, текстовых полей и т.д.). Используйте для этого OLEObjects. Например:
ActiveSheet.OLEObjects("CommandButton1").Object.Caption = "ClickMe"
или
ActiveSheet.CommandButton1.Object.Caption = "ClickMe"
так можно задать свойство Caption кнопки. (см.пример17kb)
Связать CheckBox'ы или флажки с ячейками
Если задать в формат поля "логический" в базе данных, то в Access'е в ячейках Вы увидите (вместо Ложь-Истина) CheckBox. Это удобно.
В Excel'е можно связать флажок (элемент управления из панели "Формы": Вид->Панели инструментов->Формы) с ячейкой в которой он находится. Если Вам необходим столбец с форматом "логический", вставте в ячейку флажок, растените её за нижний правый угол на весь столбец и выполните макрос:
Sub Макрос()
Dim sh As Shape
  For Each sh In ActiveSheet.Shapes
    sh.Select
    If TypeName(Selection) = "CheckBox" Then
      Selection.LinkedCell = sh.TopLeftCell.Address
    End If
  Next
  Range("D11").Select
  MsgBox "Флажки связаны с ячейками."
End Sub
Все ячейки будут связаны с флажками. Работать с флажками удобно, а значения из ячеек можно легко использовать (например передать в другую программу).
Если Вы привыкли работать с CheckBox из Вид->Панели инструментов->Элементы управления, то и их можно связать с ячейками, используя массив элементов управления и модуль классов (см.пример18kb).
Сохранить рисунок в файле JPG,GIF
Можно вручную скопировать и вставить в редактор (например Paint), а потом сохранить в файле. Можно всё это сделать спомощью автоматизации или API. А можно проще скопировать рисунок на диаграмму и экспортировать её в файл (см.пример10kb).

На главную | Музыка | Программы | Excel-Игры | Ссылки | Адрес