Excel vba как обратиться к ячейке по ее имени


Содержание

Excel vba как обратиться к ячейке по ее имени ?

Если в активной рабочей книге используются имена, но Вы не видите их в списке имён стандартного диалогового окна, которое появится, если выполнить следующии действия :

XL2003 меню Вставка пункт Имя и команда Присвоить
XL2007 закладка Формулы группа Определённые имена и кнопка Диспетчер имён

То, чтобы «найти» все скрытые имена и сделать их видимыми, достаточно выполнить нижеопубликованный макрос.
Ответ :

Если в активной рабочей книге используются имена и Вы хотите их все скрыть, т.е. сделать так, чтобы их не было видно в списке имён стандартного диалогового окна, которое появится, если выполнить следующии действия :

XL2003 меню Вставка пункт Имя и команда Присвоить
XL2007 закладка Формулы группа Определённые имена и кнопка Диспетчер имён

То, просто выполните нижеопубликованный макрос.
Ответ :

Если Вам необходимо иметь «универсальный» макрос, который может скрывать/делать видимыми имена в любой открытой книге, то используйте нижеопубликованный макрос. Примеры вызова :

1) Скрыть имена в текущей книге 2) Отобразить имена в активной книге 3) Отобразить имена в открытой книге с именем «Файл_с_именами.xls»
Ответ : Актуально для MS Excel 2007

Если необходимо, чтобы в диспетчере имён, напротив нужного имени ячейки/диапазона, появилось примечание, которое, предоставляет дополнтельные сведения (текст не более 255 символов) об этом об’екте, то такой комментарий можно создать так :

  • Ответ :
    Для рабочего листа мы можем узнать количество количество имён только уровня рабочего листа
  • Ответ :

    Вариант I. Вариант II. Bonus.
    Ответ :

    Если при работе с об’ектом Name, который ссылается на диапазон, необходимо получить доступ к этому диапазону, то это можно осуществить с помощью свойства .RefersToRange или добавив функцию Evaluate Если же понадобится противоположное действие, т.е. используя диапазон, добраться до имени, то :
    Ответ :

    Как известно имена бывают двух уровней : уровня рабочей книги (по умолчанию глобальные) и уровня рабочего листа (локальные) и если необходимо программно определить уровень имени, то Вы можете использовать любой из трёх вариантов.

    Вариант I. Примечание : Если необходимо поменять местами порядок выполнение инструкций, то используйте : Вариант II. Примечание : Если необходимо поменять местами порядок выполнение инструкций, то используйте : Вариант III. Примечание : Если необходимо поменять местами порядок выполнение инструкций, то используйте : Комментарий : Во всех примерах управляющую инструкцию If Then Else можно заменить на функцию IIf : Вариант IV. Microsoft Excel 2007 (и старше)
    Ответ :

    Как известно присвоить имя можно не только ячейке или диапазону ячеек, но и формуле, а также константе. И если потребуется узнать ссылается ли имя на ячейку/диапазон, то можно использовать один из предложенных вариантов, учитывая, что :

  • формулы, которые возвращают ссылку на ячейку/диапазон, также считаются Range
  • однако, если формула ссылается на другую рабочую книгу (внешняя ссылка), то в случае, если другая рабочая книга открыта, то это Range, в противном случае Error
  • трёхмерные ссылки как Range не определяются

    Вариант I. Вариант II.
    Ответ :

    Как известно имена могут содержать ссылки на ячейки и диапазоны ячеек, но после удаления этих ячеек, вместо ссылки появится значение ошибки #ССЫЛКА! И если возникнет необходимость в определении наличия подобных имён, например, для удаления, то можно использовать любой из двух предложенных вариантов.

    Excel vba как обратиться к ячейке по ее имени ?

    ger_kar » 13.06.2011 (Пн) 9:12

    Re: VBA Excel Как получить имя диапазона по любой ячейке из

    ger_kar » 13.06.2011 (Пн) 15:17

    Re: VBA Excel Как получить имя диапазона по любой ячейке из

    dormouse » 14.06.2011 (Вт) 13:33

    Re: VBA Excel Как получить имя диапазона по любой ячейке из

    alibek » 14.06.2011 (Вт) 15:24

    Re: VBA Excel Как получить имя диапазона по любой ячейке из

    dormouse » 14.06.2011 (Вт) 17:34

    Re: VBA Excel Как получить имя диапазона по любой ячейке из

    ger_kar » 14.06.2011 (Вт) 21:18

    Re: VBA Excel Как получить имя диапазона по любой ячейке из

    ger_kar » 14.06.2011 (Вт) 21:35

    Re: VBA Excel Как получить имя диапазона по любой ячейке из

    ger_kar » 14.06.2011 (Вт) 22:08

    Re: VBA Excel Как получить имя диапазона по любой ячейке из

    dormouse » 15.06.2011 (Ср) 5:41

    Re: VBA Excel Как получить имя диапазона по любой ячейке из

    ger_kar » 15.06.2011 (Ср) 9:22

    Re: VBA Excel Как получить имя диапазона по любой ячейке из

    dormouse » 15.06.2011 (Ср) 12:54

    Re: VBA Excel Как получить имя диапазона по любой ячейке из


    ger_kar » 15.06.2011 (Ср) 15:22

    Re: VBA Excel Как получить имя диапазона по любой ячейке из

    Sam777e » 15.06.2011 (Ср) 20:30

    Если Вам нужна скорость, то, как часто бывает, меняем память [ пространство ] на время [ ; или, выражаясь высокопарно — устраиваем предварительную компиляцию ] и становится возможным другой алгоритм, более быстрый.

    1. Добавляем в Книгу ещё один Лист, СКРЫТЫЙ;
    судя по Вашему файлу [ : Visible : xlSheetVeryHidden : XlSheetVisibility ], Вы знакомы с этим.

    2. На этом Листе в нужные ячейки вносим Имя диапазона.

    3. И простой алгоритм :
    ИмяДиапазона := ЗначениеСоответствующейЯчейки_в_СкрытомЛисте

    Код: Выделить всё
    Private Function CellDiapazonName(lngRow As Long, lngColumn As Long) As String
    With Worksheets(«HiddenSheet»)
    If IsEmpty(.Cells(lngRow, lngColumn)) Then
    CellDiapazonName = «»
    Else
    ‘ >>> ПРОПУЩЕНО: Проверить, что там String !! . . .
    CellDiapazonName = CStr(.Cells(lngRow, lngColumn))
    End If
    End With
    End Function

    Как обратиться к ячейке в VBA (Excel)?

    RPI.su — самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

    Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

    Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected] . Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.

    Excel VBA FAQ

    Excel VBA: Приёмы программирования
    По материалам эхоконференции RU.EXCEL (за июль-сентябрь 1997 года)
    Collected by Kirienko Andrew , 2:5020/239.21@fidonet

    Cодержание

    Как определить последнюю запись в таблице Excel?

    Q: Необходимо найти последнюю запись в электронной таблице. Какой функцией VB это можно было бы организовать.

    A: Первое что вспомнилось: Application.SpecialCells(xlLastCell)

    Назад к СОДЕРЖАНИЮ

    Как отменить выделение диапазона ячеек ?

    Q: Как управиться с такой болячкой:

    После прекращения работы макроса диапазон остается выделенным. Как это выделение убрать?

    A: Попробуй вот как: Selection.Cells(1).Select Фокус ввода попадёт после этого на первую ячейку ранее выделенного диапазона.

    Назад к СОДЕРЖАНИЮ

    Как из макроса Excel программно создать таблицу Access ?

    Q: Подскажите, пожалуйста, как из под Excel программно создать таблицу Access

    A: Вот фрагмент кода, который создаёт таблицу «BalanceShifr» базе данных MS Access:

    Нint: Не забудьте выставить в Excel ссылки на объекты DAO!
    [VBA] Tools/References/Available References/ [x] MicroSoft DAO . Library

    ‘ Function CreateTable
    ‘ Create temporary table «BalanceShifr» into temporary database

    Public Function CreateTable(ByVal dbTemp As Database) As Boolean

    Dim tdfTemр As TableDef
    Dim idx As Index
    Dim fld As Field

    On Error GoTo errhandle

    CreateTable = True
    ‘ CREATE TABLE «BalanceShifr»
    Set tdfTemp = dbTemp.CreateTableDef(«BalanceShifr»)
    Set fld = tdfTemp.CreateField(«ConditionId», dbLong)
    fld.Required = True
    tdfTemp.Fields.Append fld
    Set fld = tdfTemp.CreateField(«Account», dbText, 4)
    tdfTemp.Fields.Append fld
    Set fld = tdfTemp.CreateField(«SubAcc», dbText, 4)
    tdfTemp.Fields.Append fld
    Set fld = tdfTemp.CreateField(«Shifr», dbLong)
    tdfTemp.Fields.Append fld
    Set fld = tdfTemp.CreateField(«Date», dbDate)
    fld.Required = True
    tdfTemp.Fields.Append fld
    Set fld = tdfTemp.CreateField(«SaldoDeb», dbCurrency)
    tdfTemp.Fields.Append fld
    Set fld = tdfTemp.CreateField(«SaldoKr», dbCurrency)
    tdfTemp.Fields.Append fld
    dbTemp.TableDefs.Append tdfTemp

    ‘ CREATE INDEX «BalanceShifr»
    Set tdfTemp = dbTemp.TableDefs(«BalanceShifr»)
    Set )
    Set fld = idx.CreateField(«ConditionId»)
    idx.Fields.Append fld
    tdfTemp.Indexes.Append idx
    Exit Function

    errHandle:
    MsgBox «Table creating error!», vbExclamation, «Error»
    CreateTable = False
    End Function

    Назад к СОДЕРЖАНИЮ

    Удаление листов в зависимости от даты.

    Q: Как удалить рабочие листы листов в зависимости от даты ?

    A: Вот код функции на Excel VBA, который решает данную проблему:

    ‘ Function DelSheetByDate
    ‘ Удаляет рабочий лист sSheetName в активной рабочей книге,
    ‘ если дата dDelDate уже наступила
    ‘ В случае успеха возвращает True, иначе — False

    Public Function DelSheetByDate(sSheetName As String, _
    dDelDate As Date) As Boolean
    On Error GoTo errHandle

    DelSheetByDate = False
    ‘ Проверка даты
    If dDelDate
    ‘ Не выводить подтверждение на удаление
    Application.DisplayAlerts = False
    ActiveWorkbook.Worksheets(sSheetName).Delete
    DelSheetByDate = True
    Application.DisplayAlerts = True
    End If

    Exit Function
    errHandle:
    MsgBox Err.Description, vbCritical, «Ошибка №» & Err.Number
    End Function

    Назад к СОДЕРЖАНИЮ

    Подавление «горячих» клавиш.

    Q: Как подавить доступ по «горячим» клавишам, имеется ввиду предопределенные в Excel клавиши типа Ctrl-O и т.д.?

    A: Вот малюсенький исходник на Excel VB, который решает такую проблему. :-)

    Public Sub Auto_Open()
    ‘ Overrride standard accelerators
    With Application
    .OnKey «^o», «Dummy»
    .OnKey «^s», «NewAction»
    .OnKey «^р», «» ‘ Kill hotkey !
    End With
    End Sub

    ‘ ——
    Public Sub Dummy()
    MsgBox «This hotkey redefined!»
    End Sub

    ‘ ——
    Public Sub NewAction()
    SendKeys «^n» ‘ Press + for create new file
    ‘ instead of + !
    End Sub

    Hint: Отлажено в MS Excel ’97 !

    Назад к СОДЕРЖАНИЮ

    Подсказки к Toolbar.

    Q: Как сделать к «само нарисованным» кнопочкам на Toolbar’е подсказки? (Ну, те, что после 2-х секунд молчания мышки появляются)


    A: Сделать можно вот как: (Пример реализации на Excel’97 VBA )

    ‘ Cоздаем тулбар
    Рublic Sub InitToolBar()
    Dim cmdbarSM As CommandBar
    Dim ctlNewBtn As CommandBarButton

    Set cmdbarSM = CommandBars.Add(Name:=»MyToolBar»,
    Position:=msoBarFloating, _
    temporary:=True)
    With cmdbarSM
    ‘ 1) Добавляем кнопку
    Set ctlNewBtn = .Controls.Add(Type:=msoControlButton)
    With ctlNewBtn
    . Face >
    .OnAction = «OnButton1_Click»
    .TooltipText = «My tooltip message!»
    End With
    ‘ 2) Добавляем ещё кнопку
    Set ctlNewBtn = .Controls.Add(Type:=msoControlButton)
    With ctlNewBtn
    .Face >
    .OnAction = «OnButton2_Click»
    .TooltipText = «Another tooltip message!»
    End With
    .Visible = True
    End With
    End Sub

    Hint: На VBA для Excel’95 это делается несколько иначе!

    Назад к СОДЕРЖАНИЮ

    Как определить адрес активной ячейки.

    Q: Как в макросе узнать и использовать текущее положение курсора (не мышиного, естественно)?

    A: Очень просто! :-)
    ActiveCell.Row и ActiveCell.Column — покажут координаты активной ячейки.

    Назад к СОДЕРЖАНИЮ

    Подсчет комментариев на рабочем листе.

    Q: Как узнать есть ли хоть один Notes (комментарий) в рабочем листе, кроме как перебором по всем ячейкам? . Без этого не работает:

    A: В Excel’97 эта проблема может быть решена вот как:

    ‘ Function IsCommentsPresent
    ‘ Возвращает TRUE, если на активном рабочем листе имеется хотя бы
    ‘ одна ячейка с комментарием, иначе возвращает FALSE

    Public Function IsCommentsPresent() As Boolean
    IsCommentsPresent = ( ActiveSheet.Comments.Count <> 0 )
    End Function

    Назад к СОДЕРЖАНИЮ

    Подсказки к Toolbar (Excel’95).

    Q: Как сделать свой собственный Toolbar с tooltip’ами на кнопках в Excel’95 ?

    A: Вот фрагмент кода для Excel’95, который создаёт toolbar с одной кнопкой с пользовательским tooltiр’ом. Нажатие кнопки приводит к выполнению макроса NothingToDo() .


    ‘ This example creates a new toolbar, adds the Camera button
    ‘ (button index number 228) to it, and then displays the new toolbar.

    Public Sub CreateMyToolBar()
    Dim myNewToolbar As Toolbar
    On Error GoTo errHandle:

    Set myNewToolbar = Toolbars.Add(Name:=»My New Toolbar»)
    With myNewToolbar
    .ToolbarButtons.Add Button:=228, StatusBar:=»Statusbar help string»
    .Visible = True
    With .ToolbarButtons(1)
    .OnAction = «NothingToDo»
    .Name = «My custom tooltiр text!»
    End With
    End With
    Exit Sub
    errНandle:
    MsgBox «Error number » & Err & «: » & Error(Err)
    End Sub


    ‘ Toolbar button on action code

    Рublic Sub NothingToDo()
    MsgBox «Nothing to do!», vbInformation, «Macro running»
    End Sub

    Нint: В Excel’97 этот код тоже работает!

    Назад к СОДЕРЖАНИЮ

    Запуск Excel с поиском ячейки.

    Q: Как запустить Excel, чтобы оказаться на ячейке содержимое которой известно заранее?

    A: Вот как я решил бы твою задачу:

    Илон Маск рекомендует:  Что такое код domelement &#62;set_attribute

    ‘ Sub GotoFixedCell:
    ‘ Делает активной ячейку, содержащую значение vVariant на
    ‘ рабочем листе sSheetName в активной рабочей книге.

    ‘ Note: Содержимое ячеек интерпретируется как ‘значение’!

    Public Sub GotoFixedCell(vValue As Variant, sSheetName As String)
    Dim c As Range, cStart As Range, cForFind As Range
    Dim i As Integer

    On Error GoTo errhandle:

    Set cForFind = Worksheets(sSheetName).Cells ‘ Диапазон поиска
    With cForFind
    Set c = .Find(What:=vValue, After:=ActiveCell, LookIn:=xlValues, _
    LookAt:= xlРart, SearchOrder:=xlByRows,_
    SearchDirection:=xlNext, MatchCase:=False)
    Set cStart = c
    While Not c Is Nothing
    Set c = .FindNext(c)
    If c.Address = cStart.Address Then
    c.Select
    Exit Sub
    End If
    Wend
    End With
    Exit Sub
    errНandle:
    MsgBox Err.Descriрtion, vbExclamation, «Error #» & Err.Number
    End Sub

    Нint: Достаточно выполнить этот код из макроса Auto_Oрen()!

    Нint: Протестировано и отлажено в Excel’97.

    Назад к СОДЕРЖАНИЮ

    ThisWorkBook или ActiveWorkBook ?

    Q: На листе модулей открытой рабочей книги присутствует процедура, которая копирует некий лист из другой (не активной) рабочей книги. В этом листе в некоторых ячейках находятся определенные пользователем формулы. Процедура работает без проблем.
    Из workbook, содержащей эту процедуру, я делаю надстройку (.xla) и подключаю ее к Excel 95. При вызове вышеописанной процедуры она выдает сообщение:
    Run time error 424 object required
    Kак можно избежать это сообщение?

    A: Вот что я тебе посоветую:
    Посмотри ещё разок код модулей рабочей книги и исправь все ссылки вида ActiveWorkbook.WorkSheets(«.. на ссылки вида ThisWorkBook.WorkSheets(«..

    Дело в том, что когда выполняется код надстройки активной книгой в Excel’е является _не_ сама надстройка! Конструкция ThisWorkbook позволяет сослаться на книгу, в которой в настоящий момент выполняется код Excel VBA.

    Нint: Это общий принцип создание надстроек Excel!

    Назад к СОДЕРЖАНИЮ

    Как задать имя листу, который будет вставлен ?

    Q: Хочy через Excel VBA задать имя листу, который будет вставлен. Но у команды Sheets.Add нет такого параметра ! Как бороться ?

    A: Очень просто.

    ‘ Sub CreateSheet
    ‘ Вставляет активную рабочую книгу в рабочий лист с именем sSName.
    ‘ Note: Если параметр bVisible имеет значение False, этот лист становится скрытым.

    Рublic Sub CreateSheet(sSName As String, bVisible As Boolean)
    Dim wsNewSheet As WorkSheet

    On Error GoTo errНandle

    Set wsNewSheet = ActiveWorkBook.Worksheets.Add
    With wsNewSheet
    .Name = sSName
    .Visible = bVisible
    End With
    Exit Sub
    errНandle:
    MsgBox Err.Descriрtion, vbExclamation, «Error #» & Err.Number
    End Sub

    Назад к СОДЕРЖАНИЮ

    Как проверить существует ли лист ?

    Q: А как проверить существует ли лист ?

    A: Я бы поступил вот как:

    ‘ Function IsWorkSheetExist
    ‘ Проверяет, имеется ли в активной рабочей книге лист с именем sSName.
    ‘ В случае успеха возвращает True, иначе — False

    Рublic Function IsWorkSheetExist(sSName As String) As Boolean
    Dim c As Object

    On Error GoTo errНandle:
    Set c = sheets(sName)
    ‘ Альтернативный вариант :
    Worksheets(sSName).Cells(1, 1) = Worksheets(sSName).Cells(1, 1)
    IsWorkSheetExist = True
    Exit Function
    errНandle:
    IsWorkSheetExist = False
    End Function

    Нint: Отлажено и протестировано в Excel’97.

    Назад к СОДЕРЖАНИЮ

    Как обратиться к ячейке по ее имени ?

    Q: Как обратиться к ячейки по ее имени ? Т.е. есть Лист1 и в нем ячейки с именем Дебет и Кредит. Хочy подсчитать Дебет-Кредит средствами Excel VBA. Попробовал Range(Дебет)-Range(Кредит), ругается, что не описаны переменные.


    A: Если я правильно тебя понял, нужно разыменовать ячейку из кода Excel VBA. Вот фрагмент кода, который решает такую задачу:

    ‘ Function ValueOfNamedCell
    ‘ Возвращает значение ячейки с именем sCellName. в активной рабочей книге.
    ‘ Note: Если ячейка с именем sCellName не существует — функцией возвращается
    ‘ значение Emрty.

    Рublic Function ValueOfNamedCell(sCellName As String) As Variant
    On Error GoTo errНandle
    ValueOfNamedCell = ActiveWorkbook.Names(sCellName).RefersToRange.Value
    Exit Function
    errНandle:
    ValueOfNamedCell = Emрty
    End Function

    Нint: Отлажено и протестировано в Excel’97.

    Назад к СОДЕРЖАНИЮ

    Можно ли из программы на Visual Basic создать рабочую книгу Excel ?

    Q: Можно ли из программы на Visual Basic создать рабочую книгу Excel ?

    Пример того, как из Visual Basic’a через OLE запустить Excel, и создать рабочую книгу.

    ‘ CreateXlBook
    ‘ Вызывает MS Excel, создает рабочую книгу с именем sWbName с одним
    ‘ единственным рабочим листом. Рабочая книга будет сохранена в каталоге
    ‘ sDirName. В случае успеха возвращает True, в противном случае — False.

    Public Function CreateXlBook(sWbName As String, sDirName) As Boolean

    ‘ MS Excel hidden instance
    Dim objXLApp As Object
    Dim objWbNewBook As Object

    Set objXLApp = CreateObject(«Excel.Application»)
    If objXLApp Is Nothing Then Exit Function

    ‘ В новой рабочей книге создавать только один рабочий лист
    objXLApp.SheetsInNewWorkbook = 1

    Set objWbNewBook = objXLApp.Workbooks.Add
    If objWbNewBook Is Nothing Then Exit Function

    ‘ Сохраняем книгу
    If vbNullString = Dir(sDirName, vbDirectory) Then Exit Function

    objWbNewBook.SaveAs (sDirName + «\» + sWbName + «.xls»)
    CreateXlBook = True

    ‘ Освобождение памяти
    Set objWbNewBook = Nothing
    objXLApp.Quit
    Set objXLApp = Nothing
    CreateXlBook = True

    Hint: Tested and approved with MS Visual Basic 4.0 Enterprise Edition

    excel-vba Способы обращения к одной ячейке

    пример

    Самый простой способ ссылаться на одну ячейку на текущем листе Excel — это просто вставить форму А1 в ссылку в квадратных скобках:

    Обратите внимание, что квадратные скобки — это просто удобный синтаксический сахар для метода Evaluate объекта Application , так что технически это идентично следующему коду:

    Вы также можете вызвать метод Cells который принимает строку и столбец и возвращает ссылку на ячейку.

    Помните, что всякий раз, когда вы передаете строку и столбец в Excel из VBA, строка всегда первая, за ней следует столбец, что запутывает, потому что это противоположно общей нотации A1 где сначала отображается столбец.

    В обоих этих примерах мы не указали рабочий лист, поэтому Excel будет использовать активный лист (лист, который находится впереди в пользовательском интерфейсе). Вы можете указать активный лист явно:

    Или вы можете указать имя определенного листа:

    Существует множество методов, которые можно использовать для перехода от одного диапазона к другому. Например, метод Rows может использоваться для доступа к отдельным строкам любого диапазона, и метод Cells может использоваться для доступа к отдельным ячейкам строки или столбца, поэтому следующий код относится к ячейке C1:

    Несколько советов по работе с VBA в Excel

    Некоторое время назад меня попросили «помочь с Экселем», а потом и работа подвернулась такая, так что за последние пару месяцев я узнал много полезного, чем и хочу поделиться в догонку к недавней статье.

    Предполагается, что вы знаете основы Visual Basic. Я не буду рассказывать, как создавать формы или модули, здесь только примеры кода.

    Visual Basic

    Опции

    Во-первых, в VB массивы могут начинаться с индекса 1, что для многих странно, поэтому в начале модулей можно прописывать:

    Так же рекомендуется прописать:

    В этом случае интерпретатор потребует заблаговременного объявления всех переменных. Переменные объявлять нужно потому, что:
    — VB запомнит их нАпиСание и не будет исправлять во всём коде на последний введенный вариант;
    — иногда возникают ошибки с передачей переменных byRef, если они не объявлены (то есть надо или объявить переменную, или приписать в функции/процедуре перед ней byVal).

    Ещё одним важным оператором является ON ERROR. Привожу варианты:

    Возможности языка

    Хотя VB довольно прост, полезно почитать документацию по его синтаксису. Я, например, с удивлением узнал, что можно прописывать сложные усолвия в SELECT’ах (аналог switch):

    Ускорение работы макросов

    Часто макросы требуют долгого времени выполнения, которое можно значительно сократить. В начале и в конце каждой ресурсоёмкой функции вызвать Prepare и Ended.

    По порядку:
    1. Отключить перерисовку объектов на экране, чтобы ничего не мигало.
    2. Выключить расчет. Внимание, если макрос прерваляс посреди работы, то расчет так и останется в ручном режиме!
    3. Не обрабатывать события.
    4. Отображение границ страниц, тоже почему-то помогает.
    5. В статусной строке выводятся различные данные, что замедляет работу, отключаем.
    6. Это если нужно. Выключает сообщения Экселя. Например, мы делаем Workbook.Close, Эксель хочет спросить сохранить ли изменения. При выключении этого параметра все ответы будут даны автоматически (изменения не сохранятся).

    Важно понимать, что VBA выполняет все действия так же, как и пользователь. Поэтому для того, чтобы установить параметры страницы, он каждый раз открывает и закрывает окно параметров. У меня выставлялись параметры для 10 листов, это реально не быстро. Поэтому делаем так:

    Далее, часто нужно просмотреть различные диапазоны ячеек и что-то с ними сделать. Тут важно не использовать циклы for с перебором индексов, они медленные. Можно использовать встроенные функции Экселя, но удобнее всего такой вариант:
    Данный код просматривает указанный диапазон, выбирает в нем «специальные ячейки», в данном случае все, в которых есть формулы (т.е. начинаются со знака равно). Для каждой ячейки смотрится, если она не закрашена, то её надо защитить (см. далее) и покрасить. Такой код работает очень быстро.

    Для любых переменных, которым вы собираетесь присвоить книгу, лист, диапазон (ячейку) нужно предварительно объявить как Variant.

    Естественно, что если вам нужны однотипные значения в ячейках, нужно использовать автозаполнение, всё равно как «растягивание» ячеек пользователем.

    Второй диапазон должен включать первый, а второй необязательный параметр указывает тип автозаполнения.

    Загрузка книги и события

    При открытии книги каждый раз срабатывает процедура.
    В данном случае настройки печати (поля, ориентация) сбрасываются на дефолтные. Можно и другую инициализацию выполнять. Важно, что если макросы отключены, то и не выполнится ничего. Если в Экселе вылезла вверху панелька с предупреждением о макросах и пользователь нажал «Включить», то именно в этот момент выполнится процедура Workbook_open().

    Список доступных событий можно посмотреть вверху редактора VB. Например, я делал на событие Change проверку, где лежит ячейка, в которой было изменения, и если это нужный диапазон, то делалась запись в лог со старым и новым значением.

    Защита

    Во-первых сразу отмечу, что MS Office не исполняет макросы на компьютерах, где он не нашел антивируса, если книга зашифрована. Сталкивался на компьютерах, где антивирус был, но видимо Windows XP об этом не знала.

    Ещё антивирус может странным образом мешать работе, вызывать ошибки, не совсем объяснимые. Показал айтишникам, сказали ок, что-то сделали, не знаю.

    Итак, нам надо защитить книгу, чтобы ввод был разрешен только в нужные ячейки (формулы и заголовки поменять нельзя). Во-первых, нужно сделать соответствующие ячейки «не защищенными». Для этого делаем одно из:
    — выделяем диапазон, формат ячеек, снять галочку «Блокировать ячейку»;
    — выводим кнопку «Блокировать ячейку» в быстрый доступ и нажимаем её, очень удобно смотреть на неё чтобы понять, защищена ячейка или же нет;
    — а это пригодится, чтобы проверить третий вариант — написать макрос, который снимает защиту с нужных ячеек сам.

    Далее нужно защитить лист. На вкладке Рецензирование есть такая кнопка. Окошко просит ввести пароль и установить исключения (что можно будет делать пользователю). К сожалению, список исключений маловат. Самое обидное, что нельзя разрешить сворачивать/разворачивать группы столбцов/строк. Поэтому действуем так, на загрузку книги прописываем:
    Знак подчеркивания продолжает логическую строку на следующей физической строке. Итак, здесь мы:
    1. Сняли защиту.
    2. Включили группировку.
    3. Поставили защиту, при этом:
    — защита только от юзера, макросы продолжают иметь полный доступ (!), крайне важно;
    — разрешили сортировку, фильтрацию и форматирование строк/столбцов (высота/ширина);
    — DrawingObject в данном случае снимает защиту с примечаний к ячейкам, может и ещё с чего.


    Тут мы сталкиваемся с парой сюрпризов. Во-первых, не все макросы будут работать даже так. Известный баг, ничего не сделаешь. Нельзя вставить строку, например. Приходится снимать и тут же ставить защиту. Если «злоумышленник» в этот момент нажмет ctrl+break, то защита слетит.

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

    Решением (костылем) является добавление кнопки или сочетания клавиш для удаления. Заодно можно проверить, чтобы пользователь не удалил чего не надо. В Workbook_open добавляем:

    Теперь процедура будет вызываться при нажатии shift+delete.
    Знаю, код некрасивый, простите. Здесь я пытался проверить, что выделена строка, то есть строк там 1, а ячеек не меньше тысячи. Чтобы удалить не то, придется выделить тысячу ячеек начиная не с первого столбца. Далее проверяется имя листа и номера строк. Вместо 50 был расчет последенй строки (ведь их число меняется, если мы их удаляем и добавляем).

    Заключение

    VBA — весьма глючная вещь, которая позволяет сворачивать горы в MS Office. Многие предприятяи используют модели на Excel годами, и если они сделаны хорошо, то всё работает.

    Для изучения VBA подходит он сам, во-первых там хорошая справка. Например, чтобы узнать все варианты что можно разрешить в методе Protect, нажимаем F1, Protect, ввод. И вуаля.

    Во-вторых, можно проделать требуемые действия вручную, записав макрос, а потом просмотрев его код. Код будет ужасен (например, при изменении параметров страницы, макрос запишет значения всех параметров и полей, а не только измененного вами), но ответы найдутся. Хотя, например, .AutoFit, который записывается при изменении высоты ячейки по содержимому (двойной клик на границе слева), на самом деле не работает.

    Предлагаю знатокам поделиться своим опытом, дать советы в комментариях. Спасибо за внимание, удачных разработок вам.

    Как обращаться к определенной ячейке при прохождении через именованный диапазон excel vba

    У меня есть код, который работает нормально, но я недавно полностью переписал таблицу, чтобы использовать именованные диапазоны.

    Я сейчас пытаюсь переписать код, чтобы ссылаться на именованные диапазоны, а не на абсолютные ссылки. (я думаю, что это терминология !?)

    Диапазон File_ref занимает ячейки A13: A104 Already_Input? диапазон занимает ячейки B13: B104

    Я использую Excel 2013 в Windows

    Код, который работает

    Код, который я пробовал, но который не работает:

    Excel vba как обратиться к ячейке по ее имени ?

    Наконец-то, хоть кто-то спец в этом вопросе. Через Инет сложно общаться, может по ICQ? Есть вопросы. И их
    не всегда правильно опишешь.

    Может быть, но я, когда пробовал, то на экране были несостыковки (особенно в режиме просмотра), не знаю как описать, кое-что не отражалось и я понял, что в отчетах Access есть далеко не все возможности, как в Word&Excel.

    Илон Маск рекомендует:  Что такое код imageinterlace

    57 см)). Изменение ориентации листа, добавление меток и полей методом Copy-Paste — это работа, не требующая даже уровня advanced user.

    Сейчас только попробовал изменить ориентацию листа, добавил в конструкторе еще полей (Copy-Paste), расширил поле отчета, ввел дополнительные предметы, оценки, запустил отчет (с программированием). Дебуггер выдал сообщение, что не может найти 27-е поле. И вот где это настраивается. В параметрах страницы.

    Возможно, но требует знания (для меня) Access, а я с ним не работал и, вообще, это не моя работа, а с меня требуют.

    Просто я предвидел эту своу будущую работу и понимал некоторые проблемы с ней, а занялся ею только сейчас, когда поручили.
    У меня такой стиль работы, я ее сначала осмысливаю, разбираюсь с будущими проблемами в реализации чего-либо, ищу способы (заранее) их решения, т.е. накапливаю багаж. А потом приступаю к реализации. Может быть не тот подход, но у меня, кроме этой задачи по работе, много других, не менее важных, решать которые за меня никто не будет и поэтому нет времени целиком посвятить изучению и апробированию определенных вопросов (Аcсess в том числе). Друзей, знакомых с Access нет, спросить не у кого, литература не на все вопросы
    отвечает.

    А там граф других не было, писал, что по-короче. Хотя игры, в принципе люблю, но мало времени на них, только глубокими вечерами.

    Есть желание выполнить эту работу, в краткие сроки и качественно, а знания, приобретенные при этом, никогда не помешают. А специалистом по Access мне нет необходимости быть. У меня другая специальность и профессия.

    В принципе, критику принимаю и не обижаюсь. Ну, так что, будем общаться?

    Меню пользователя Sergey
    Посмотреть профиль
    Найти ещё сообщения от Sergey

    Sergey, форум для того и есть, чтобы общаться.

    Наконец-то, хоть кто-то спец в этом вопросе.
    IMHO, госпожа Lamo спокойно выполнит эту задачу, но на Visual FoxPro (если у неё, конечно, возникнет такое желание).

    И вот где это настраивается. В параметрах страницы.
    Должны быть соблюдены названия меток-заголовков столбцов и текстовых полей для оценок. Для меток: «L_Subj» + номер предмета (в примере с «L_Subj1» по «L_Subj26», т.е. надо новые называть L_Subj27, L_Subj28, . ). Для текстовых полей аналогично: «TB_Subj» + номер предмета. И для меток, и для текстовых полей менять свойство «Имя» («Name») в окне свойств элементов отчёта.

    требует знания (для меня) Access, а я с ним не работал и, вообще, это не моя работа, а с меня требуют
    Вот именно с этого для меня знакомство с Access-ом когда-то и началось

    на экране были несостыковки (особенно в режиме просмотра)
    Представь, что в отчёте 1000 строк, и где-то ты недосмотрел смещение по вертикали 0,1 мм (лезвие бритвы). В итоге у тебя отчёт получится длиннее на 10 см. Стыковать элементы надо тщательнее, числа прописывать иногда руками.

    что в отчетах Access есть далеко не все возможности, как в Word&Excel.
    Идеология построения отчётов (не только Access-овских) отличается от идеологии построения текстовых документов или небольших электронных таблиц. Отчёт — это автоматически генерируемый неинтерактивный (ну, не берём своеобразие 1С) документ, основанный на повторяющихся структурированных данных. В общем, можно оду спеть и сравнительный анализ провести, но лучше покажи, что не получилось конкретно, почти всегда есть решение.

    ICQ пользуюсь только поздно ночью. Поэтому вопросы шли на
    сгорбунков на яндекс тчк ру
    (писать в соответствии с правилами адресов, транслитом)

    10.12.2004, 16:16 [включить плавающее окно] #10
    Меню пользователя Benedict
    Посмотреть профиль
    Найти ещё сообщения от Benedict

    Я это понял, но не понял, почему при отладке кода, ***.Count равно 26, где это все берется и как изменить, это первое, второе — ты, когда приводил код, отчет заранее рисовал, а затем связывал с процедурой или этот отчет генерирует сам код. Если это так, то мне интересен механизм этого, я его не понял.

    И еще, ты говорил, то максимальная ширина отчета

    57см. Где такую ширину задать? Каким образом? И как такой отчет будет печататься на принтере А4?

    Судя по сообщению, ты понял о чем я говорил. А если ты так ответил, то значит я до этого делал правильно. Действительно, все несостыковки я правил цифирью, т.е. ширины и высоты прямоугольников , линий в таблице подгонял. Мне это показалось так неэффективно, что я подумал, что я что-то не так делаю, т.е. есть способ (или вообще его нет) сделать это как-то побыстрее. Кстати, сейчас только подумал, а в отчетах есть опция где-либо типа привязать к линиям сетки? По-моему так будет быстрее и точнее. Если же действительно надо таким образом решать проблему несостыковок линий (на экране и в печати они дают утолщения или смещения), то, что ж, придется делать.

    Пока не придумал, как тебе это показать. Скрин что ли сделать таблицы? Или по мылу послать? В кратце. Таблица, сводная (она так звучит у наших девочек), она имеет определенную утвержденную форму. Заголовок, ну это ладно. В самой таблице строки — это фамилии студентов, столбцы — предметы, собственно тело таблицы — оценки, типа отл, хор, уд и зач. Есть такие сводные таблицы для курса, естественно, таких таблиц 5 на каждый курс, да еще на каждую специальность. Но они все отдельные. Эти таблицы можно разместить на листе А4. А вот сводная за все 5 лет по специальности — такие таблицы девочки делают в Excel, а затем склеивают. вопрос первый, как печатать такие таблицы (с последующей склейкой) в Access, это вообще в принципе возможно? И второй вопрос. Его я уже обдумываю, решения пока нет. Смысл вот в чем. Представь последнюю таблицу за 5 лет, так вот в конце каждого фрагмента таблицы за один год, на самом правом ее крае, есть другие столбцы, где приводится кое-какая статистика и обощающие данные, типа, кол-во всего зачетов, количество пятерок и т.д. в течение года. А на краю последней таблицы (за 5 курс), кроме данных за год, приводятся, вообще, все данные за весь период обучения, т.е. за 5 лет (так требуют). В Excel девочки просто делают отдельные столбцы, где объединяют строки и вот в этих больших ячейках приводят эти сведения. И если вывести таблицы по курсу еще как-то, может быть удасться, то вот эти объединенные столбцы . Да, сумбурно изложил.

    Или же все таки легче наделать отчетов в Excel (их и делать, кстати? не надо), а затем передавать нужные сведения в определенные ячеки таблицы, а потом печатать? Как, по-твоему?

    11.12.2004, 13:42 [включить плавающее окно] #11
    Меню пользователя Sergey
    Посмотреть профиль
    Найти ещё сообщения от Sergey

    Отчёт построен на запросе Q_Marks, см. свойство «Источник записей» («RecordSource») отчёта. Это перекрёстный запрос, он же crosstab query, он же запрос, базирующийся на SQL-инструкции TRANSFORM. Особенностью этого запроса является нефиксированное количество полей, их имена и порядок следования, поскольку это всё зависит от содержимого выборки, на которой он строится (т. е., в данном случае, от содержимого таблицы Marks). Это ситуация, в которой приходится прибегать к программированию. Отчёт нарисован заранее, значение свойства «Источник записей» было указано при создании (можно изменить), но (ключевой момент) поля на отчёте, в которых должно показываться содержимое запроса, НЕ привязывались к полям запроса в конструкторе отчёта (за исключением поля, имя которого запрос гарантирует — самого первого, которое есть Name, т. е. фамилия студента), как это делается для обычного запроса на выборку. Такую привязку осуществляет VBA-код, который ты видишь. Этот код вызывается в обработчике события Report_Open, т. е. в момент открытия отчёта. Код открывает временную выборку RS, основанную на свойстве RecordSource («Источник записей»). RS.Fields — это коллекция (вектор, массив переменной длины) полей выборки. RS.Fields.Count — длина коллекции (количество полей). Нумерация начинается с нуля, но о нулевом поле выборки (Name) уже позаботились в конструкторе (см. свойство «Данные» («ControlSource») текстового поля TB_StudentName). Поэтому цикл по полям начинается с единицы. В цикле берётся имя поля RS.Field(i).Name и заносится в надпись (Caption) метки с именем «L_Subj» + номер поля. Именно здесь происходит выпадение в отладчик при количестве полей больше 26, если не нашлось метки с именем «L_Subj27» («L_Subj1»..»L_Subj26″ уже существовали). Если ты, например, создашь L_Subj27..L_Subj222 и TB_Subj27..TB_Subj222, сбой будет происходить на 223-м предмете Потому и спрашиваю — сколько предметов? Также имя поля заносится в свойство ControlSource («Данные») текстового поля с именем «TB_Subj» + номер предмета, т. е. осуществляется привязка к столбцу выборки, которая будет сгенерирована запросом Q_Marks. После цикла врЕменная выборка закрывается, она больше не нужна. После того, как обработчик Report_Open отработал, отчёт открывает выборку на основе «Источника записей» уже сам, начинает форматировать секции и страницы (всё уже за кадром, без программирования).

    Вечером отвечу на остальное.

    11.12.2004, 16:14 [включить плавающее окно] #12
    Меню пользователя Benedict
    Посмотреть профиль
    Найти ещё сообщения от Benedict

    57см. Где такую ширину задать? Каким образом? И как такой отчет будет печататься на принтере А4?

    55,87 см. Тяжёлое наследие 16-битных Виндов. Но на самом деле хватает, чтобы заполнить A1 в портретной ориентации. Либо два A4 в ландшафтной. Ширина задаётся мышью — тянешь за правый край в конструкторе, либо в свойствах, свойство «Ширина» для отчёта. Если отчёт не вписывается по ширине на один лист, выдаётся предупреждение, и печать идёт слева направо, сверху вниз. Дальше девочки берут ножницы и клей. Если понадобится отчёт большей ширины, лучше всего сделать несколько отчётов — разбивку по вертикальным полосам.

    У каждого решения есть свои плюсы и минусы. Можно сделать и так, но есть минус в виде большей, хотя и единообразной, работы для программиста. С другой стороны, все нерегулярности в структуре отчёта играют на руку более свободному (если не сказать аморфному) Excel-ю. Более определённо смогу сказать, когда увижу Excel-евские шаблоны. Если интересует вариант с Excel-ем, могу показать, как это программируется, сам потом будешь мучаться выбором.


    VBA Обращение к ячейке с использованием имени листа не работает должным образом

    Summary: I am writing a macro that takes names from many different sheets in an excel file and compiles them together on a «master list», but I’m having trouble with referencing a cell on another sheet.

    The Problem: When I refer to a specific cell using the sheet name as reference with Sheets(«MasterList»).ActiveCell.Offset(0, 1) , nothing gets picked up. However, when I remove Sheets(«MasterList») the macro works fine (the macro is currently on «MasterList» at the time which is the only way this would work). Also, the spelling for the name of the sheet was correct in my code.

    Question: Why is this happening? The logic behind the code seems sound, and I’m spelling my sheet name correctly.

    Excel vba как обратиться к ячейке по ее имени ?

    11.6 Объект Range, его свойства и методы

    Объект Excel.Range, программная работа с ячейками и диапазонами (наборами) ячеек средствами VBA, создание объекта Excel.Range, свойства, методы и события объекта Excel.Range

    Пожалуй, наиболее часто используемый объект в иерархии объектной модели Excel это объект Range. Этот объект может представлять одну ячейку, несколько ячеек (в том числе несмежные ячейки или наборы несмежных ячеек) или целый лист. Если в Word вы могли для ввода данных использовать как объект Range, так и объект Selection, то в Excel все сводится к объекту Range:
    если вам нужно ввести данные в ячейку или отформатировать ее, то вы должны получить объект Range, представляющий эту ячейку;
    если вы хотите сделать что-то с выделенными вами ячейками, вам необходимо получить объект Range, представляющий выделение;
    если вам нужно просто что-то сделать с группой ячеек, первое ваше действие опять-таки получить объект Range, представляющий эту группу ячеек.

    В Microsoft Knowledge Base есть статья под номером 291308, в котором описываются 22 способа получения объекта Range в Excel. Вряд ли вы будете пользоваться всеми эти способами. Мы рассмотрим только самые распространенные:
    самый простой и очевидный способ воспользоваться свойством Range. Это свойство предусмотрено для объектов Application, Worksheet и самого объекта Range (если вы решили создать новый диапазон на основе уже существующего). Например, получить ссылку на объект Range, представляющий ячейку A1, можно так:

    Dim oRange As Range

    Set oRange = Worksheets(«Лист1»).Range(«A1»)

    А на диапазон ячеек с A1 по D10 так:

    Dim oRange As Range

    Set oRange = Worksheets(«Лист1»).Range(«A1:D10»)

    С применением свойства Range самого объекта Range нужно быть очень осторожным. Дело в том, что Excel создает на основе объекта Range виртуальный лист со своей собственной нумерацией. Поэтому такой код:

    Set oRange1 = Worksheets(«Лист1»).Range(«C1»)

    Set oRange2 = oRange1.Range(«B1»)

    пропишет значение 20 не в ячейку B1, как можно было понять из кода, а в ячейку D1 (то есть B1 по отношению к виртуальному листу, начинающемуся с C1).
    второй способ воспользоваться свойством Cells. Возможностей у этого свойства меньше мы можем вернуть диапазон, состоящий только из одной ячейки. Зато мы можем использовать более удобный синтаксис (с точки зрения передачи переменных, перехода в любую сторону на любое количество ячеек и т.п.). Например, для получения ссылки на ячейку D1 можно использовать код вида:

    Dim oRange As Range

    Set oRange = Worksheets(«Лист1»).Cells(1, 4)

    Чтобы получить диапазон, состоящий из нескольких ячеек, удобно применять свойства Range и Cells вместе:

    Set oRange = Range(Cells(1, 1), Cells(5, 3))
    третий способ воспользоваться многочисленными свойствами объекта Range, которые позволяют изменить текущий диапазон или создать на основе его новый. Эти свойства будут рассмотрены ниже.

    Обычно после того, как нужная ячейка найдена, в нее нужно что-то записать. Для этой цели используется свойство Value, например:

    oRange.Value = «Мое значение»

    Поскольку объект Range с функциональной точки зрения очень важен, то свойств и методов у него очень много (и для комфортной работы в Excel их нужно знать). Ниже представлены некоторые самые употребимые свойства:
    Address позволяет вернуть адрес текущего диапазона, например, для предыдущего примера вернется $A$1:$C$5. Этому свойству можно передать много параметров для определения стиля ссылки, абсолютного или относительного адреса для столбцов и строк, по отношению к чему этот адрес будет относительным и т.п. Свойство доступно только для чтения. AddressLocal то же самое, но с поправкой на особенности локализованных версий Excel.

    На практике встречается множество ситуаций, когда адрес ячейки нужно разобрать на части и вернуть из него имя столбца или номер строки. Это очень просто сделать при помощи строковых функций спасибо знакам доллара. Например, имя столбца для объекта oRange, представляющего одну ячейку, можно вернуть так:

    sColumnName = Mid(oRange.Address, 2, (InStr(2, oRange.Address, «$») 2))

    А номер строки так :

    sRowNumber = Mid(oRange.Address, (InStr(2, oRange.Address, «$») + 1))

    На первый взгляд кажется сложным, но на самом деле все очень просто для имени столбца мы просто берем все, что у нас находится между первым знаком доллара (он у нас всегда первый символ) и вторым, а для номера строки бы берем все, что у нас находится после второго знака доллара. Найти этот второй знак доллара можно при помощи встроенной функции InStr(), а взять нужное количество символов начиная с какого либо проще всего при помощи встроенной функции Mid().
    AllowEdit это свойство, доступное только для чтения, позволяет определить, сможет ли пользователь править данную ячейку (набор ячеек) на защищенном листе. Используется для проверок.
    Areas свойство исключительно важное. Дело в том, что, как уже говорилось, объект Range может состоять из несмежных наборов ячеек. Многие методы применительно к таким диапазонам ведут себя совершенно непредсказуемо или просто возвращают ошибки. Свойство Areas позволяет разбить подобные нестандартные диапазоны на набор стандартных. Созданные таким образом объекты Range будут помещены в коллекцию Areas. Это свойство можно использовать и для проверки «нестандартности» диапазона:

    If Selection.Areas.Count > 1 Then

    Debug.Print «Диапазон с несмежными областями»

    End If
    Borders возможность получить ссылку на коллекцию Borders, при помощи которой можно управлять рамками для нашего диапазона.
    Cells это свойство есть и для объекта Range. Работает оно точно так же, за исключением того, что опять-таки используется своя собственная виртуальная адресация на основе диапазона:

    Dim oRange, oRange2 As Range

    Set oRange = Range(Cells(2, 2), Cells(5, 3))

    Set oRange2 = oRange.Cells(1, 1) ‘Вместо A1 получаем ссылку на B2

    Debug.Print oRange2.Address ‘Так оно и есть

    Точно такие же особенности у свойств Row и Rows, Column и Columns.
    Characters это простое с виду свойство позволяет решить непростую задачу: как изменить (текст или формат) части текста в ячейке, не затрагивая остальные данные. Например, чтобы ввести текст в ячейку A1 и изменить цвет первой буквы, можно воспользоваться кодом

    Dim oRange As Range

    Set oRange = Range(«A1»)

    oRange.Value = «Мой текст»

    oRange.Characters(1, 1).Font.Color = vbRed

    Если же вам просто нужно изменить значение, то лучше воспользоваться свойством Value как в третьей строке примера.
    Count возвращает количество ячеек в диапазоне. Может использоваться для проверок.
    CurrentRegion очень удобное свойство, которое может пригодиться, например, при копировании/экспорте данных, полученных из внешнего источника (когда сколько будет этих данных, нам изначально неизвестно). Оно возвращает объект Range, представляющий диапазон, окруженный пустыми ячейками (то есть непустую область, в которую входит исходный диапазон/ячейка). Например, чтобы выделить всю непустую область вокруг активной ячейки, можно воспользоваться кодом

    ActiveCell.CurrentRegion.Select
    Dependents позволяет получить объект Range (скорее всего, включающий несмежные области) которые зависят от ячеек исходного диапазона. Работает только для текущего листа ссылки во внешних листах этим свойством не отслеживаются. Например, чтобы выделить все ячейки, зависимые от активной, можно использовать код
    Worksheets(«Лист1»).Activate
    ActiveCell.Dependents.Select

    Чтобы просмотреть обратную зависимость, можно использовать свойство Precedents. Чтобы просмотреть только первый уровень зависимостей, можно использовать свойства DirectDependents и DirectPrecedents.
    End еще одно часто используемое свойство. Оно позволяет получить объект Range, представляющий последнюю ячейку исходного диапазона. В какой стороне будет считаться последняя ячейка, можно определить при помощи передаваемого параметра.
    Errors свойство, которое через коллекцию Errors позволяет получить доступ к объектам Error, представляющим обнаруженные ошибки в диапазоне.
    Font как и в Word, это свойство позволяет получить доступ к объекту Font, при помощи которого можно настроить особенности оформления текста в ячейке (цвет, шрифт, размер букв и т.п.)
    FormatConditions возможность создать собственный объект, представляющий вариант оформления ячеек, который затем можно применять к разным ячейкам и диапазонам.
    Formula одно из самых важных свойств объекта Range. Доступно и на чтение, и на запись. Если используется на чтение, то возвращает текст формулы, прописанной в ячейку (а не вычисленное значение), если используется на запись, то позволяет записать формулу в ячейку. Если применить это свойство для диапазона, в который входит несколько ячеек, то формула будет прописана по все ячейки диапазона. Пример применения этого свойства может выглядеть так:

    Worksheets(«Лист1»).Range(«A3»).Formula = «=$A$1+$A$2»
    Свойство FormulaLocal, как и AddressLocal, позволяет внести поправки на особенности нумерации ячеек в локализованной версии Excel (для русских версий Excel в нем нет необходимости).
    FormulaHidden возможность спрятать формулы в диапазоне от пользователя. Работает только на защищенных листах.
    HasFormula проверить диапазон на наличие вычисляемых значений (формул).
    Hidden спрятать диапазон. Будет работать только в случае, если диапазон включает в себя хотя бы одну строку или столбец целиком, в противном случае вернется ошибка.
    Interior еще одно свойство, связанное с форматированием. В основном позволяет покрасить ячейки диапазона.
    Item позволяет получить еще один объект Range, который определяется путем смещения исходного диапазона.
    Locked это свойство позволяет заблокировать ячейки диапазона при защите листа.
    Name возможность получить ссылку на специальный объект именованного диапазона Name. На графическом экране с его возможностями можно познакомиться при помощи меню Вставка -> Имя. Он позволяет обращаться к диапазонам и формулам по именам и несколько напоминает по функциональности объект закладки в Word.
    Next перейти на следующую ячейку. Если лист не защищен, то следующей ячейкой будет считаться ячейка справа, если защищен то следующая незаблокированная ячейка.
    NumberFormat возможность установить один из предопределенных форматов для чисел. Соответствует возможностям вкладки Число в меню Формат -> Ячейки на графическом экране.
    Offset это свойство позволяет получить новый объект Range с определенным смещением от исходного. Например, чтобы получить ячейку со смещением на три ячейки вверх от сходной и три ячейки влево, можно использовать код

    ActiveCell.Offset(rowOffset:=-3, columnOffset:=-3).Activate
    свойство Orientation позволяет сориентировать текст в ячейках. Указывается угол наклона в градусах. Например, чтобы расположить текст по диагонали, можно использовать код

    oRange.Orientation = -45
    PageBreak это свойство обычно используется для программной вставки разрывов страницы. Его применение может выглядеть так:

    Worksheets(«Лист1»).Rows(50).PageBreak = xlPageBreakManual
    все свойства, которые начинаются на Pivot+, относятся к работе с объектом PivotTable (сводная таблица). Особенности работы с ней будут рассмотрены ниже.
    QueryTable это очень важное свойство позволяет получить ссылку на объект QueryTable полученные с внешнего источника данные. Это свойство для объекта Range позволяет получить ссылку на объект QueryTable, которые находится в данном диапазоне. Подробнее про объект QueryTable будет рассказано ниже.
    Range это свойство, как уже говорилось выше, позволяет создать новый диапазон на основе уже существующего. Необходимо помнить про особенности нумерации ячеек в этом случае.
    Resize возможность изменить текущий диапазон. Например, увеличение его на один столбец вниз и одну строку вправо может выглядеть так:

    oRange.Resize(oRange.Rows.Count + 1, oRange.Columns.Count + 1).Select
    ShrinkToFit это свойство позволяет автоматически настроить размер текста в диапазоне таким образом, чтобы текст умещался в ширину столбца.
    Style это свойство позволяет вернуть объект Style, представляющий стиль для указанного диапазона. На графическом экране то, что позволяет сделать объект Style, можно сделать через меню Формат -> Стиль.
    Text возможность получить значение первой ячейки диапазона в виде значения типа String. Для объекта Range это свойство доступно только для чтения.
    Validation это свойство позволяет вернуть объект Validation, при помощи которого можно настроить проверку вводимых в диапазон данных.
    Value наиболее часто используемое свойство объекта Range. Позволяет получить или назначить значение (числовое, текстовое или какое-либо другое) ячейкам диапазона. Точно для той же цели используется свойство Value2, единственное отличие это свойство не поддерживает типы данных Currency и Date.
    WrapText возможность включить/отключить перевод текста на следующую строку в ячейках диапазона.

    Теперь о методах объекта Range:
    Activate() выделяет текущий диапазон и устанавливает курсор ввода на его первую ячейку.
    AddComment() возможность добавить комментарий к ячейке. Ячейка будет помечена красным уголком, а текст комментария будет показан в виде всплывающей подсказки. Этот метод можно вызвать только для диапазона, состоящего из одной ячейки. То же самое на графическом экране можно сделать при помощи меню Вставка -> Примечание.
    AutoFill() возможность использовать автозаполнение для диапазона (например, если первые две ячейки будут заполнены как 1 и 2, то дальше в автоматическом режиме будет продолжено: 3, 4, 5 и т.п.)
    AutoFit() автоматически поменять ширину всех столбцов и высоту всех строк в диапазоне, чтобы туда уместился текст ячеек. Можно применять только к тем диапазонам, которые состоят из набора столбцов (полностью) или набора ячеек (также полностью), иначе будет ошибка.
    AutoFormat() возможности использовать один из стилей автоформатирования (то, что на графическом экране доступно через меню Формат -> Автоформат).
    BorderAround() возможность поместить диапазон в рамку с выбранными вами параметрами.
    методы Clear+ позволяют очистить содержимое диапазона от значений, форматирования, комментарий и т.п.
    Consolidate() возможность слить данные нескольких диапазонов (в том числе на разных листах) в один диапазон, используя при этом выбранную вами агрегатную функцию.
    Copy() возможность скопировать диапазон в другое место. Если место назначения не указано, он копируется в буфер обмена. Аналогично работает метод Cut(), при котором данные исходного диапазона вырезаются.
    CopyFromRecordset() очень удобный метод, который позволяет вставить данные из объекта ADO Recordset на лист Excel, начиная с верхнего левого угла указанного диапазона.
    DataSeries() метод, который может сэкономить множество времени и избежать возни с функциями даты и времени. Этот метод позволяет увеличить вами значения даты в диапазоне на указанный вами временной интервал. Например, если у вас в диапазоне стоит первое января, то при помощи этого метода можно сгенерировать первое число любого другого месяца.
    Delete() удаляет данные текущего диапазона. В качестве необязательно параметра можно определить, с какой стороны будут сдвигаться ячейки на место удаленных.
    Dirty() пометить ячейки диапазона как «грязные». Такие ячейки будут пересчитаны при следующем же пересчете. Обычно используется, когда Word сам не может догадаться, что их нужно пересчитать. Пересчитать ячейки диапазона можно и принудительно при помощи метода Calculate().
    методы Fill+ (FillDown(), FillUp(), FillLeft(), FillRight()) позволяют размножить одно и то же значение по ячейкам диапазона в указанном вами направлении.
    метод Find() позволяет произвести поиск по ячейкам диапазона и вернуть новый объект Range, который представляет первую ячейку, в котором было найдено нужное значение. У этого метода есть множество необязательных параметров, которые позволяют определить направление поиска, чувствительность к регистру, искать все значение ячейки или часть и т.п. Методы FindNext() и FindPrevious() позволяют продолжить поиск, начатый методом Find(), в разных направлениях.
    метод GoalSeek() позволяет применить автоподбор значений для функции Excel программным способом. На графическом экране то же самое можно сделать при помощи меню Сервис -> Подбор параметра.
    метод Insert() позволяет вставить ячейки в диапазон, сдвинув остальные (вы можете выбрать вправо или вниз).
    метод Justify() позволяет равномерно распределить текст по диапазону. Если в данный диапазон он не помещается, он будет распространен на соседние ячейки (с перезаписью их значений).
    метод Merge() позволяет слить все ячейки диапазона в одну. При этом останется только одно значение верхней левой ячейки. Разбить обратно такую слитую ячейку на несколько обычных можно при помощи метода UnMerge().
    Parse() позволяет разбить одну ячейку на несколько по указанному вами шаблону (например, чтобы отделить код города от номера телефона).
    PasteSpecial() операция, дополняющая Copy() и Cut(). Она позволяет вставить то, что лежит в буфере обмена, с указанием специальных параметров вставки (вставлять с добавлением к существующим данным, с умножением, вычитанием, делением и т.п.)
    PrintOut() и PrintPreview() позволяют вывести диапазон на печать или открыть режим просмотра перед печатью..
    Replace() метод, дополняющий метод Find(). Позволяет проводить поиск и замену значений в диапазоне.
    Select() возможность выделить указанный диапазон. Объекта Selection в Excel нет вместо него есть возможность получить объект Range, представляющий выделенную область.
    Show() экран будет проскроллирован таким образом, чтобы показать указанный диапазон.
    ShowDependents() показать стрелки для ячеек, которые зависят от указанного диапазона (только первый уровень зависимости) или эти стрелки убрать. Обратный метод ShowPrecedents().
    ShowErrors() показать источник ошибки для указанной ячейки.
    Sort() возможность произвести сортировку ячеек в диапазоне. Можно использовать большое количество необязательных параметров для настройки сортировки. SortSpecial() с учетом особенностей азиатских языков.
    Speak() удивительный метод, который позволяет зачитывать вслух содержимое диапазона (можно определить, в каком направлении и будут ли зачитываться формулы). К сожалению, в локализованной версии Excel не работает.
    SpecialCells() очень удобный метод, который позволяет вернуть объект Range, включающий в себя все ячейки определенного типа (пустые, с ошибками, с комментариями, последние, с константами, с формулами, с определенным форматированием) и с определенным значением. Например, чтобы вернуть объект Range, состоящий из всех пустых ячеек диапазона, можно использовать код

    Set oRange2 = oRange.SpecialCells(xlCellTypeBlanks)

    oRange 2. Select ‘проверяем, так ли это
    метод SubTotal() позволяет посчитать итоговое значение для диапазона (можно выбрать агрегатную функцию и множество других параметров).
    метод Table() позволяет создать таблицу на основе передаваемого столбца, строки и функции, которую нужно использовать для вычисления ячеек таблицы. Пример из документации по этому методу позволяет автоматически сгенерировать таблицу умножения.
    TextToColumns() сложный метод, который позволяет разбить столбцы в диапазоне на несколько столбцов в соответствии с определенным алгоритмом. Принимает множество необязательных параметров.

    Илон Маск рекомендует:  Защита web форм от автоматической обработки
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL
    12.12.2004, 00:18 [включить плавающее окно] #13