Готовые макросы в VBA Excel, Миронов. Готовые макросы в vba excel, Миронов Глава Макросы 9
Скачать 1.35 Mb.
|
Узнать максимальную колонку или строку.Sub Test() With ActiveSheet Dim cur_range As Range Set cur_range = .UsedRange Debug.Print cur_range.Address End With End Sub Ограничение возможных значений диапазонаSub Worksheet_Change(ByVal Target As Excel.Range) Dim rgInputRange As Range Dim cell As Range Dim strMessage As String Dim varResult As Variant ' Диапазон, в котором контролируется ввод Set rgInputRange = Range("A1:E10") ' Просмотр всех измененных ячеек и контроль ввода в тех, которые _ принадлежат заданному диапазону For Each cell In Target ' Проверка принадлежности диапазону If Union(cell, rgInputRange).Address = rgInputRange.Address Then ' Контроль правильности ввода varResult = IsCellDataValid(cell) If varResult = True Then ' Введено корректное значение Exit Sub Else ' Формирование и вывод сообщения об ошибке strMessage = "Ячейка " & cell.Address(False, False) & ":" _ & vbCrLf & vbCrLf & varResult MsgBox strMessage, vbCritical, "Неправильное значение" ' Очистка ввода Application.EnableEvents = False cell.ClearContents cell.Activate Application.EnableEvents = True End If End If Next cell End Sub Function IsCellDataValid(cell As Range) As Variant ' Возвращает True, если в ячейку вводится целое число _ в диапазоне от 1 до 12. В противном случае выдается _ соответствующее сообщение ' Проверка, является ли содержимое ячейки числом If Not WorksheetFunction.IsNumber(cell.Value) Then IsCellDataValid = "Нечисловое значение" Exit Function End If ' Проверка, является ли введенное число целым If Int(cell.Value) <> cell.Value Then IsCellDataValid = "Введите целое число" Exit Function End If ' Проверка соответствия числа диапазону If cell.Value < 1 Or cell.Value > 12 Then IsCellDataValid = "Значение должно быть от 1 до 12" Exit Function End If ' В ячейку введено допустимое значение IsCellDataValid = True End Function Тестирование скорости чтения и записи диапазоновSub TableSpeedTest() Dim alngData() As Long ' Массив с числами Dim lngCount As Long ' Количество элементов в массиве Dim dtStart As Date ' Хранит время (и даже дату) начала _ тестирования Dim strArrayToTable As String ' Время записи в таблицу Dim strTableToArray As String ' Время чтения из таблицы Dim strMessage As String Dim i As Long ' Подготовка диапазона ячеек Range("A:A").ClearContents ' Ввод размера массива, формирование массива заданного размера lngCount = InputBox("Введите количество элементов") ReDim alngData(1 To lngCount) ' Заполнение массива данными For i = 1 To lngCount alngData(i) = i Next i ' Перенос массива в таблицу Application.ScreenUpdating = False dtStart = Timer For i = 1 To lngCount Cells(i, 1) = i Next i strArrayToTable = Format(Timer - dtStart, "00:00") ' Чтение данных из таблицы обратно в массив dtStart = Timer For i = 1 To lngCount alngData(i) = Cells(i, 1) Next i strTableToArray = Format(Timer - dtStart, "00:00") Application.ScreenUpdating = True ' Вывод на экран результатов тестирования strMessage = "Запись: " & strArrayToTable & vbCrLf & _ "Чтение: " & strTableToArray MsgBox strMessage, , lngCount & " элементов" End Sub Открыть MsgBox при выборе ячейкиPrivate Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$1" Then MsgBox "Hello world" End Sub Скрытие строкиSub HideString() Rows(2).Hidden = True End Sub Скрытие нескольких строкSub HideStrings() Rows("3:5").Hidden = True End Sub Скрытие столбцаSub HideCollumn() Columns(2).Hidden = True End Sub |