КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Получение информации о выделенном диапазоне
Быстрое выделение ячеек с отрицательными значениями Последовательный ввод данных Листинг 2.39. Последовательный ввод данных Sub StreamInput() Dim strDate As String Dim strSum As String Dim lngRow As Long ' Ввод данных в цикле (повторяется до тех пор, пока пользователь _ не введет пустую строку или не нажмет "Отмена" в окне ввода) Do lngRow = Range("A65536").End(xlUp).Row + 1 ' Ввод даты strDate = InputBox("Вводим дату") If strDate = "" Then Exit Sub ' Ввод выручки strSum = InputBox("Вводим выручку") If strSum = "" Then Exit Sub ' Запись данных в ячейки Cells(lngRow, 1) = strDate Cells(lngRow, 2) = strSum Loop End Sub Листинг 2.40. Выделение отрицательных значений Sub NegSelect() Dim cell As Range ' Просмотр всех ячеек выделенного диапазона и пометка тех, _ которые содержат отрицательные значения For Each cell In Selection If cell.Value < 0 Then cell.Interior.Color = RGB(255, 0, 0) Else cell.Interior.ColorIndex = xlNone End If Next cell End Sub Листинг 2.41. Получение информации о выделенном диапазоне Sub TypeOfSelection() Dim rgSelUnion As Range ' Объединение выделенных областей Dim strTitle As String ' Заголовок сообщения Dim strMessage As String ' Текст сообщения Dim strSelType As String ' Тип выделения (простой или _ множественный) Dim intBlockCount As Integer ' Количество блоков в выделении Dim intCellCount As Long ' Общее количество выделенных ячеек Dim intColCount As Integer ' Количество выделенных столбцов Dim intRowCount As Long ' Количество выделенных строк Dim intAreasCount As Integer ' Количество выделенных областей Dim strCurSelType As String Dim rgArea As Range
' Подсчет количества выделенных областей и определение типа выделения: _ простое (одна область) или сложное(несколько областей) intAreasCount = Selection.Areas.Count If intAreasCount = 1 Then strTitle = "Простое выделение" Else strTitle = "Множественное выделение" End If
' Определение типа выделения первой области strSelType = dhGetAreaType(Selection.Areas(1))
' Создание объединения во избежание повторного учета _ пересекающихся участков выделенных диапазонов Set rgSelUnion = Selection.Areas(1) For Each rgArea In Selection.Areas strCurSelType = dhGetAreaType(rgArea) ' Изменение надписи о типе всего выделения, если _ есть выделения различного типа If strCurSelType <> strSelType Then strSelType = "Множественный" End If
' Определение количества блоков перед их добавлением в объединение If strCurSelType = "Block" Then intBlockCount = intBlockCount + 1 End If ' Добавление в объединение Set rgSelUnion = Union(rgSelUnion, rgArea) Next rgArea
' Просматриваются элементы созданного объединения For Each rgArea In rgSelUnion.Areas Select Case dhGetAreaType(rgArea) Case "Строка" intRowCount = intRowCount + rgArea.Rows.Count Case "Столбец" intColCount = intColCount + rgArea.Columns.Count Case "Лист" intColCount = intColCount + rgArea.Columns.Count intRowCount = intRowCount + rgArea.Rows.Count End Select Next rgArea ' Определение количества неперекрывающихся ячеек intCellCount = rgSelUnion.Count
' Формирование и вывод итогового сообщения strMessage = "Тип выделения:" & vbTab & strSelType & vbCrLf & _ "Количество областей: " & vbTab & intAreasCount & vbCrLf & _ "Полных столбцов: " & vbTab & intColCount & vbCrLf & _ "Полных строк: " & vbTab & intRowCount & vbCrLf & _ "Блоков ячеек: " & vbTab & intBlockCount & vbCrLf & _ "Всего ячеек: " & vbTab & Format(intCellCount, "#,###") MsgBox strMessage, vbInformation, strTitle End Sub
Function dhGetAreaType(rgRangeArea As Range) As String ' Определение типа диапазона If rgRangeArea.Count = Cells.Count Then ' Все ячейки рабочего листа dhGetAreaType = "Лист" ElseIf rgRangeArea.Cells.Count = 1 Then ' Одна ячейка dhGetAreaType = "Ячейка" ElseIf rgRangeArea.Rows.Count = Cells.Rows.Count Then ' Весь столбец dhGetAreaType = "Столбец" ElseIf rgRangeArea.Columns.Count = Cells.Columns.Count Then ' Вся строка dhGetAreaType = "Строка" Else ' Блок ячеек dhGetAreaType = "Блок" End If End Function
Дата добавления: 2015-06-25; Просмотров: 318; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |