Excel что такое xlcontinuous

Программное создание границ ячеек произвольного диапазона с помощью кода VBA Excel. Свойство Borders объекта Range. Создание границ одной ячейки. Код макроса.

Программное создание границ ячеек

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

‘Для этого необходима всего одна строка:

Range(«A1:G7»).Borders.LineStyle = True

‘Вместо ключевого слова True можно

‘использовать константу xlContinuous:

Range(«A1:G7»).Borders.LineStyle = xlContinuous

‘Кроме того, для создания границ ячеек можно

‘использовать единственную строку с указанием

‘какого-нибудь параметра, например,

‘для создания сетки из синих границ:

Range(«A1:G7»).Borders.Color = vbBlue

‘или для создания сетки из границ в виде двойных линий:

Range(«A1:G7»).Borders.LineStyle = xlDouble

‘Чтобы применить при создании границ два

‘параметра, придется использовать уже две

‘строки кода, например, для создания сетки

‘из границ в виде жирных красных линий:

Range(«A1:G7»).Borders.Weight = xlThick

Range(«A1:G7»).Borders.Color = vbRed

‘Удалить границы можно с помощью строки:

Range(«A1:G7»).Borders.LineStyle = False

‘Вместо ключевого слова False можно

‘использовать константу xlNone:

Range(«A1:G7»).Borders.LineStyle = xlNone

Создание границ одной ячейки

Создать границы ячейки (только для одной ячейки) в VBA Excel можно следующим образом:

Range(«A5»).Borders.LineStyle = True

Cells(2, 8).Borders.Color = vbBlue

ActiveCell.Borders.LineStyle = xlDouble

‘Удаление границ:

ActiveCell.Borders.LineStyle = False

Пример кода записанного макроса

Запись макроса: включаем запись, выбираем диапазон «A1:E9», на панели инструментов выбираем значок «Все границы», останавливаем запись. И это все наши выполненные действия, а в результате получаем следующий код:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

Sub Макрос1()

    Range(«A1:E9»).Select

‘Отображается левая граница диапазона

    With Selection.Borders(xlEdgeLeft)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlThin

    End With

‘Отображается верхняя граница диапазона

    With Selection.Borders(xlEdgeTop)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlThin

    End With

‘Отображается нижняя граница диапазона

    With Selection.Borders(xlEdgeBottom)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlThin

    End With

‘Отображается правая граница диапазона

    With Selection.Borders(xlEdgeRight)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlThin

    End With

‘Отображаются внутренние вертикальные линии

    With Selection.Borders(xlInsideVertical)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlThin

    End With

‘Отображаются внутренние горизонтальные линии

    With Selection.Borders(xlInsideHorizontal)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlThin

    End With

End Sub

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

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

Создание и удаление диагональных линий

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

‘Создание диагональных линий:

Range(«A1:G7»).Borders(xlDiagonalDown).LineStyle = True

Range(«A1:G7»).Borders(xlDiagonalUp).LineStyle = True

‘Удаление диагональных линий:

Range(«A1:G7»).Borders(xlDiagonalDown).LineStyle = xlNone

Range(«A1:G7»).Borders(xlDiagonalUp).LineStyle = xlNone

Расположение границ ячеек и диапазонов

Расположение границ по краям и внутри ячеек и диапазонов описывают константы из коллекции XlBordersIndex.

Список констант XlBordersIndex:

Константа Значение Описание
xlDiagonalDown 5 Диагональная линия от верхнего левого угла к нижнему правому углу в каждой ячейке диапазона.
xlDiagonalUp 6 Диагональная линия от нижнего левого угла к правому верхнему углу в каждой ячейке диапазона.
xlEdgeBottom 9 Граница по нижнему краю диапазона.
xlEdgeLeft 7 Граница по левому краю диапазона.
xlEdgeRight 10 Граница по правому краю диапазона.
xlEdgeTop 8 Граница по верхнему краю диапазона.
xlInsideHorizontal 12 Горизонтальные границы для всех ячеек в диапазоне, за исключением внешних границ диапазона.
xlInsideVertical 11 Вертикальные границы для всех ячеек в диапазоне, за исключением внешних границ диапазона.

‘Отображаем у выделенной ячейки нижнюю границу с толщиной и стилем по умолчанию (xlThin и xlContinuous)

ActiveCell.Borders(xlEdgeBottom).LineStyle = True

ActiveCell.Borders(xlEdgeBottom).LineStyle = 1

Толщина границ ячеек и диапазонов

Толщину границ по краям и внутри ячеек и диапазонов описывают константы из коллекции XlBorderWeight.

Список констант XlBorderWeight:

Константа Значение Описание
xlHairline 1 Очень тонкая граница
xlThin 2 Тонкая граница (по умолчанию)
xlMedium -4138 | 3* Граница средней толщины
xlThick 4 Толстая граница

* У меня, в Excel 2016, константе xlMedium соответствует не только числовое значение -4138, но и 3.

‘Отображаем у выделенной ячейки нижнюю границу в виде толстой линии

ActiveCell.Borders(xlEdgeBottom).Weight = xlThick

Стили границ (типы линий)

Стили границ по краям и внутри ячеек и диапазонов описывают константы из коллекции XlLineStyle.

Список констант XlLineStyle:

Константа Значение Описание
xlContinuous 1 Непрерывная линия
xlDash -4115 Штриховая линия
xlDashDot 4 Чередование точек и тире
xlDashDotDot 5 Чередование двух точек и тире
xlDot -4118 Пунктирная линия
xlDouble -4119 Двойная линия
xlLineStyleNone -4142 Нет границы (удаление границы)
xlSlantDashDot 13 Линия, разрезанная двойными слешами

Применяем разные типы линий к разным сторонам выделенного диапазона:

Sub Primer()

    With Selection

        .Borders(xlEdgeTop).LineStyle = xlDash

        .Borders(xlEdgeTop).Weight = xlMedium

        .Borders(xlEdgeRight).LineStyle = xlDouble

        .Borders(xlEdgeBottom).LineStyle = xlDot

        .Borders(xlEdgeLeft).LineStyle = xlDashDot

    End With

End Sub

Какие могут быть границы в сочетаниях типа линии и ее толщины, вы можете видеть в диалоговом окне «Формат ячеек» на вкладке «Граница».


Содержание

  1. XlLineStyle enumeration (Excel)
  2. Support and feedback
  3. Объект Borders (Excel)
  4. Замечания
  5. Примеры
  6. Свойства
  7. См. также
  8. Поддержка и обратная связь
  9. Перечисление XlLineStyle (Excel)
  10. Поддержка и обратная связь
  11. Работа с ячейками — объект Range
  12. 15.3. Свойства Range
  13. 15.3.1. Address — адрес ячейки в формате A1
  14. 15.3.2. Areas — работа с несмежными выделенными областями
  15. 15.3.3. Borders — управление границами ячеек
  16. VBA Excel. Программное создание границ ячеек
  17. Программное создание границ ячеек
  18. Создание границ одной ячейки
  19. Пример кода записанного макроса
  20. Создание и удаление диагональных линий
  21. Расположение границ ячеек и диапазонов
  22. Толщина границ ячеек и диапазонов
  23. Стили границ (типы линий)

XlLineStyle enumeration (Excel)

Specifies the line style for the border.

Name Value Description
xlContinuous 1 Continuous line.
xlDash -4115 Dashed line.
xlDashDot 4 Alternating dashes and dots.
xlDashDotDot 5 Dash followed by two dots.
xlDot -4142 Dotted line.
xlDouble -4119 Double line.
xlLineStyleNone -4118 No line.
xlSlantDashDot 13 Slanted dashes.

Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

Объект Borders (Excel)

Коллекция из четырех объектов Border , представляющих четыре границы объекта Range или объекта Style .

Замечания

Используйте свойство Borders , чтобы вернуть коллекцию Borders , которая содержит все четыре границы. Можно применить разные границы к каждой стороне ячейки или диапазона. Дополнительные сведения о применении границ к диапазону ячеек см. в разделе Свойство Range.Borders .

Вы можете задать свойства границы для отдельной границы только с помощью объектов Range и Style . Другие объекты с границами, такие как полосы ошибок и линии рядов, имеют границу, которая обрабатывается как одна сущность, независимо от того, сколько сторон она имеет. Для этих объектов необходимо возвращать и задавать свойства для всей границы в виде единицы. Дополнительные сведения см. в разделе Объект Border .

Примеры

В следующем примере двойная граница добавляется в ячейку A1 на одном листе.

Используйте border (index), где индекс определяет границу, чтобы вернуть один объект Border . Индекс может быть одной из следующих констант XlBordersIndex : xlDiagonalDown, xlDiagonalUp, xlEdgeBottom, xlEdgeLeft, xlEdgeRight, xlEdgeTop, xlInsideHorizontal или xlInsideVertical.

В следующем примере задается красный цвет нижней границы ячеек A1:G1.

В следующем примере создается тонкая граница вокруг всех ячеек в диапазоне.

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

Свойства

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Перечисление XlLineStyle (Excel)

Задает стиль линии для границы.

Имя Значение Описание
xlContinuous 1 Непрерывная линия.
xlDash -4115 Пунктирная линия.
xlDashDot 4 Чередование дефисов и точек.
xlDashDotDotDot 5 Тире, за которым следуют две точки.
xlDot -4142 Пунктирная линия.
xlDouble -4119 Двойная линия.
xlLineStyleNone -4118 Нет строки.
xlSlantDashDot 13 Косые тире.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Работа с ячейками — объект Range

15.3. Свойства Range

15.3.1. Address — адрес ячейки в формате A1

Возвращает строку, представляющую собой адрес ячейки в формате A1 . Адрес выводится в абсолютном виде — снабжается знаками $.

Листинг 15.15 позволяет, задав адрес ячейки в виде R1C1, вывести ее адрес в формате A1.

15.3.2. Areas — работа с несмежными выделенными областями

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

15.3.3. Borders — управление границами ячеек

Позволяет управлять границами ячеек. Границы ячеек обычно используются для оформления таблиц. Как правило, работа ведется с неким выделенным диапазоном ячеек , для которого настраивают внешние границы, внутренние границы, типы и цвета линий. Работа с границами ячеек ведется посредством свойств объектов Border . Собственно говоря, самое важное свойство коллекции Borders — это Item , дающее доступ к отдельным объектам Border — то есть к границам. Остальные действия с границами проводятся с помощью свойств объектов Border .

Item — свойство, которое возвращает отдельную границу по индексу или имени границы. Принято использовать следующие имена границ:

  • xlDiagonalDown — диагональ из левого верхнего угла ячейки в правый нижний
  • xlDiagonalUp — диагональ из левого нижнего угла ячейки в правый верхний
  • xlEdgeBottom — нижняя внешняя граница
  • xlEdgeLeft — левая внешняя граница
  • xlEdgeRight — правая внешняя граница
  • xlEdgeTop — верхняя внешняя граница
  • xlInsideHorizontal — внутренние горизонтальные границы
  • xlInsideVertical — внутренние вертикальные границы

Когда выбрана граница, с которой вы хотите работать, можно использовать свойства объекта Border , в частности, следующие:

Color — позволяет задавать цвет границы. Для задания цвета можно использовать функцию RGB , которая по переданным ей значениям цветовых компонентов в формате RGB возвращает нужный цвет. Например, такой вызов этой функции возвратит красный цвет: RGB(255,0,0) . Также здесь можно использовать цветовые константы: vbBlack , vbRed и т.д.

LineStyle — позволяет задавать тип линии. Здесь применимо несколько констант. В частности, следующие:

  • xlContinuous — непрерывная линия
  • xlDash — линия, состоящая из черточек
  • xlDashDot — линия с чередующимися точками и черточками
  • xlDot — линия состоящая из точек
  • xlDouble — двойная линия
  • xlLineStyleNone — нет линий

Weight — задает толщину линии при помощи указания одной из констант:

  • xlHairline — самая тонкая линия
  • xlThin — тонкая линия
  • xlMedium — линия средней толщины
  • xlThick — толстая линия

Давайте рассмотрим пример (листинг 15.17.). Выведем набор значений в таблицу, отформатируем ее таким образом, чтобы внешние границы состояли из сплошных черных линий средней толщины, внутренние — из точечных тонких красных линий (рис. 15.3.)

Источник

VBA Excel. Программное создание границ ячеек

Программное создание границ ячеек произвольного диапазона с помощью кода VBA Excel. Свойство Borders объекта Range. Создание границ одной ячейки. Код макроса.

Программное создание границ ячеек

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

Создание границ одной ячейки

Создать границы ячейки (только для одной ячейки) в VBA Excel можно следующим образом:

Пример кода записанного макроса

Запись макроса: включаем запись, выбираем диапазон «A1:E9», на панели инструментов выбираем значок «Все границы», останавливаем запись. И это все наши выполненные действия, а в результате получаем следующий код:

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

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

Создание и удаление диагональных линий

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

Расположение границ ячеек и диапазонов

Расположение границ по краям и внутри ячеек и диапазонов описывают константы из коллекции XlBordersIndex.

Список констант XlBordersIndex:

Константа Значение Описание
xlDiagonalDown 5 Диагональная линия от верхнего левого угла к нижнему правому углу в каждой ячейке диапазона.
xlDiagonalUp 6 Диагональная линия от нижнего левого угла к правому верхнему углу в каждой ячейке диапазона.
xlEdgeBottom 9 Граница по нижнему краю диапазона.
xlEdgeLeft 7 Граница по левому краю диапазона.
xlEdgeRight 10 Граница по правому краю диапазона.
xlEdgeTop 8 Граница по верхнему краю диапазона.
xlInsideHorizontal 12 Горизонтальные границы для всех ячеек в диапазоне, за исключением внешних границ диапазона.
xlInsideVertical 11 Вертикальные границы для всех ячеек в диапазоне, за исключением внешних границ диапазона.

Толщина границ ячеек и диапазонов

Толщину границ по краям и внутри ячеек и диапазонов описывают константы из коллекции XlBorderWeight.

Список констант XlBorderWeight:

Константа Значение Описание
xlHairline 1 Очень тонкая граница
xlThin 2 Тонкая граница (по умолчанию)
xlMedium -4138 | 3* Граница средней толщины
xlThick 4 Толстая граница

* У меня, в Excel 2016, константе xlMedium соответствует не только числовое значение -4138, но и 3.

Стили границ (типы линий)

Стили границ по краям и внутри ячеек и диапазонов описывают константы из коллекции XlLineStyle.

Список констант XlLineStyle:

Константа Значение Описание
xlContinuous 1 Непрерывная линия
xlDash -4115 Штриховая линия
xlDashDot 4 Чередование точек и тире
xlDashDotDot 5 Чередование двух точек и тире
xlDot -4118 Пунктирная линия
xlDouble -4119 Двойная линия
xlLineStyleNone -4142 Нет границы (удаление границы)
xlSlantDashDot 13 Линия, разрезанная двойными слешами

Применяем разные типы линий к разным сторонам выделенного диапазона:

Источник

2006 г.

Excel.Application

  • Как загрузить новый экземпляр Excel или подключиться к запущенному экземпляру EXCEL.EXE? Как отсоединиться от Excel и закрыть его экземпляр?
  • Как запустить Excel из консольного приложения или в отдельном потоке (TThread)
  • Как получить и настроить папки Excel по умолчанию?
  • Чем отличается TExcelApplication от ExcelApplication, TExcelWorkbook от ExcelWorkbook?
  • Как узнать локализацию Excel (русская версия или нет)?
  • Как сделать, чтобы Excel работал быстрее?
  • Как вывести приложение Excel на передний план?
  • Как сделать так, чтоб работали английские формулы и форматы чисел в ячейках?
  • Что такое Selection?
  • Почему не нужно использовать ExcelApplication.Range, а следует ExcelWorksheet.Range?
  • Если приложение Excel работает и пользователь выполняет в Excel, одновременно, какие либо действия, то попытка подключится к Excel и вносить в него данные, вызывает ошибку. Как этого избежать?
  • Экспорт в Excel длится довольно долго. Как можно уведомлять пользователя о ходе выполнения работы?
  • Переношу записанный VBA макрос рисования границы в Excel, но Delphi не знает что такое xlContinuous. Где взять значение этой константы?
  • Почему я не могу найти описание компонентов палитры Delphi «Servers» в Help? Где найти документацию по работе с Excel?
  • Полезные ссылки

Excel.Application

Excel Range Object

Как загрузить новый экземпляр Excel или подключиться к запущенному экземпляру EXCEL.EXE? Как отсоединиться от Excel и закрыть его экземпляр?

Для определения, будет ли запущен новый экземпляр Excel.Application или присоединение к уже запущенному, используется свойство TExcelApplication.ConnectKind. По умолчанию это свойство имеет значение ckRunningOrNew (константы определены в unit OleServer). Однако рекомендуется, если нет на то особой надобности, всегда запускать новый экземпляр Excel.Application во избежание конфликтов с запущенным раннее экземпляром Excel.Application. Свойство TExcelApplication.AutoQuit в конструкторе устанавливается по умолчанию в False (только в модуле ExcelXP в True) — это значит, что если вы хотите при отсоединении завершить работу Excel (закрыть), то нужно вызвать метод TExcelApplication.Quit или установить свойство TExcelApplication.AutoQuit равным True.

Delphi:

var
  XL: TExcelApplication;
begin
  // запускаем новый экземпляр Excel'я
  XL := TExcelApplication.Create(nil);
  try

    XL.ConnectKind := ckNewInstance;
    XL.Connect; // подключение
    XL.AutoQuit := False; // по умолчанию это свойство True только в unit ExcelXP
    XL.Visible[lcid] := True;
    // здесь работаем с Excel'ем
  finally
    // отсоединяемся

    XL.UserControl := True; // отдадим управление пользователю
    XL.Quit; // закрыть Excel
    XL.Disconnect;
    FreeAndNil(XL);
  end;

C#:

private Excel.Application StartExcel(bool asNewInstance)
{
	Excel.Application XL = null;
	if (!(asNewInstance)) {
		try {
			XL = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application")
				as Excel.Application;
		}
		catch {
			// XL = null;
		}
	}
	if (XL == null) XL = new Excel.Application();
	if (XL.Workbooks.Count == 0) XL.Workbooks.Add(Type.Missing);
	XL.Visible = true;
	return XL;
}
private void FinishExcel(Excel.Application XL)
{
	if (XL != null) {
		XL.ScreenUpdating = true;
		if (! XL.Interactive) XL.Interactive = true;
		XL.UserControl = true;
		if (XL.Workbooks.Count == 0) {
			XL.Quit();
		}
		else {
			if (! XL.Visible) XL.Visible = true;
			XL.ActiveWorkbook.Saved = true;
		}
		// System.Runtime.InteropServices.Marshal.ReleaseComObject(XL);
		XL = null;
		GC.GetTotalMemory(true); // вызов сборщика мусора
		// Пока не закрыть приложение EXCEL.EXE будет висеть в процессах
	}
}

How to automate Microsoft Excel from Microsoft Visual C# .NET

How to use Visual C# to automate a running instance of an Office program

GC.GetTotalMemory Method

GC Class

Как запустить Excel из консольного приложения или в отдельном потоке (TThread)

Консольное приложение и дочерний поток (класс TThread) не предполагают работу с COM сервером, как это сделано в главном потоке для Application в VCL. Для того чтобы все работало, необходим вызов функции WinAPI CoInitialize.

{$APPTYPE CONSOLE} // для консольного приложения
var
  NeedToUninitialize: Boolean;
…
begin
//  NeedToUninitialize := Succeeded(CoInitialize(nil));
  NeedToUninitialize := Succeeded(CoInitializeEx(nil, COINIT_MULTITHREADED));
  try

    // здесь работаем с Excel'ем
  finally
    if NeedToUninitialize then CoUninitialize;
  end;
end.

Отличие при работе в Thread — весь код работы должен быть помещен в метод TThread.Execute.

Для C# ничего дополнительно вызывать не нужно — все работает, что для WinForms, что для Console, что для объекта класса Thread().

CoInitializeEx

OleInitialize

Как получить и настроить папки Excel по умолчанию?

По умолчанию все открываемые и сохраняемые документы находятся в папке «%USERPROFILE%Мои документы» (Personal). Ссылка на эту папку содержится в свойстве TExcelApplication.DefaultFilePath (read/write). Для чтения и записи в другие папки используйте полный путь к файлу книги.

Delphi:

(XL.ActiveSheet as _Worksheet).Range['A1', EmptyParam].Formula :=
      Format('DefaultFilePath: %s', [XL.DefaultFilePath[lcid]]);

DefaultFilePath Property

How to: Set the Default Save Path for Workbooks

Чем отличается TExcelApplication от ExcelApplication, TExcelWorkbook от ExcelWorkbook?

Все отличие TExcelApplication от ExcelApplication в том, что первый — наследник TOleServer. Это расширяет возможности для выбора способа подключения/отключения COM-сервера Excel и упрощает работу с событиями Excel.Application. Получить интерфейс ExcelApplication всегда можно из свойства TExcelApplication.DefaultInterface (DefaultInterface — штатное свойство всех наследников класса ToleServer).

Как узнать локализацию Excel’я (русская версия или нет)?

Для Delphi это можно почитать здесь.

C#:

oSheet.get_Range("A1", Type.Missing).Value2 =
  XL.LanguageSettings.get_LanguageID(
  Microsoft.Office.Core.MsoAppLanguageID.msoLanguageIDUI);

LanguageSettings Object

Как сделать, чтобы Excel работал быстрее?

Для ускорения работы с Excel’ем можно сделать следующие шаги:

Delphi:

// запретить перерисовку экрана
XL.ScreenUpdating[lcid] := False;

// отменить автоматическую калькуляцию формул

XL.Calculation[lcid] := xlManual;

// отменить проверку автоматическую ошибок в ячейках (для XP и выше)
    with XL.ErrorCheckingOptions do begin
      BackgroundChecking := False;
      NumberAsText := False;
      InconsistentFormula := False;
    end;

Не использовать метод Select, и, как следствие, свойство Selection (смотрите дальше).

Существенно повышается скорость, если вместо записи в каждую ячейку использовать запись из VarArray (смотрите дальше про объект Range). В Demo-проекте есть тест затраченного времени для различных методов записи.

Так как основное время работы с Excel’ем затрачивается на перерисовку (установка отступов для страницы, размеров строк и столбцов, атрибуты шрифтов и т.д.), то лучше всего использовать заранее подготовленный шаблон.

Как вывести приложение Excel на передний план?

Для «выноса» приложения Excel на передний план просто вызовите метод Visible объекта ExcelApplication.

Delphi:

XL.Visible[lcid] := True;
// Этот способ только для Excel версии XP и выше

SetForegroundWindow(XL.Hwnd);

C#:

XL.Visible = true;

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

Решение для Delphi здесь «Русский Excel и установка NumberFormat»

К сожалению, при работе с русским Excel’ем из C# проблемы те же, но, к счастью, решаются проще — через CultureInfo:

C#:

int savedCult = Thread.CurrentThread.CurrentCulture.LCID;
try {
  // установим английскую "культуру"
  Thread.CurrentThread.CurrentCulture = new CultureInfo(0x0409, false);
  Thread.CurrentThread.CurrentUICulture = new CultureInfo(0x0409, false);
// здесь работаем с Excel'ем, при чем работают английские формулы, DataFormat 
// и колонтитулы в PageSetup
finally {
// восстановим пользовательскую "культуру" для отображения всех данных в
// привычных глазу форматах
  Thread.CurrentThread.CurrentCulture = new CultureInfo(savedCult, true);
  Thread.CurrentThread.CurrentUICulture = new CultureInfo(savedCult, true);
}

Русский Excel и установка NumberFormat

How to: Set the Culture and UI Culture for Windows Forms Globalization

Что такое Selection?

Как пишут в «Best Practices for Setting Range Properties»: «Код, использующий Selection, сгенерирован записью макроса Excel, часто используется для обнаружения объекта или метода, который будет работать. Это хорошая идея, за исключением того, что записанный макрос не оптимизирован для пользователя. Обычно Excel при записи макроса использует Selection и изменяет выбор объекта при записи какой либо задачи».

Т.е. использование Selection не является обязательным и даже не рекомендуется для разработчика. Цитата оттуда же: «На практике вызывайте метод Select объекта только тогда, когда твердо намерены изменить выбранный пользователем элемент. Вы можете никогда не использовать метод Select просто потому, что это вам удобно, как разработчику. Если вы устанавливаете свойства объекта Range, у вас всегда есть альтернатива. Отказ от метода Select не только делает ваш код быстрее, но и порадует пользователей вашей программы (it makes your users happier)». Эта тема еще затронута здесь.

Selection Property

Почему не нужно использовать Excel.Application.Range, а следует ExcelWorksheet.Range?

Использование ExcelApplication.Range позволяет работать только с активным листом активной книги. Если вы открываете по ходу работы еще одну книгу или делаете активным другой лист в книге (например, добавляете новый лист), то данные будут вноситься именно в активный в данный момент лист. Чтоб не попасть в неудобную ситуациюб всегда используйте объект Range объекта ExcelWorksheet. Это не только обезопасит ваш код от попадания «куда Бог пошлет», но и позволит записывать данные сразу в несколько листов и даже книг без изменения ActiveSheet и ActiveCell.

Если приложение Excel работает и пользователь выполняет в Excel, одновременно, какие либо действия, то попытка подключится к Excel и вносить в него данные, вызывает ошибку. Как этого избежать?

При работе с запущенным приложением Excel, он может быть занят, если в это время пользователь редактирует значение в ячейке, или в нем открыто какое-либо модальное диалоговое окно (например, «Открытие документа»). Чтобы обойти эту ситуациюб всегда запускайте новую копию Excel.Application и устанавливайте свойство Interactive в False, что запретит пользователю что-либо делать в Excel’е или закрыть запущенный экземпляр Excel.Application:

Delphi:

XL := TExcelApplication.Create(nil);

try
  XL.ConnectKind := ckNewInstance;
  XL.Connect;
  XL.Interactive[lcid] := False; // запрещаем работу пользователю с нашим экземпляром Excel'я
  XL.Visible[lcid] := True;
// работать здесь
finally
  // не забыть разрешить пользователю доступ к Excel'ю!
  XL.UserControl := True;
  XL.Interactive[lcid] := True;
  XL.Disconnect;
  FreeAndNil(XL);

end;

The action cannot be completed because Microsoft Office Excel is busy

Interactive Property

Экспорт в Excel длится довольно долго. Как можно уведомлять пользователя о ходе выполнения работы?

Чтобы пользователь не подумалб что во время экспорта данных в Excel ваша программа и Excel «висит», лучше уведомлять его о ходе работы. Т.к. обновление экрана занимает довольно много времени и так довольно длительного процесса экспорта (хотя все же стоит подумать, как этот процесс оптимизировать и ускорить), то лучшим выходом из этой ситуации является показ этапов работы в свойстве ExcelApplication.StatusBar:

Delphi:

XL.DisplayStatusBar[lcid] := True; // покажем StatusBar, если его не было видно
XL.StatusBar[lcid] := 'Читаем';
//
XL.StatusBar[lcid] := 'Пишем';
//
XL.StatusBar[lcid] := 'Считаем';
//

XL.StatusBar[lcid] := False; // уберем наше последнее сообщение

C#:

XL.DisplayStatusBar = true;
//
XL.StatusBar = "Текст в статусбаре";
//
XL.StatusBar = false; // "Готово"

DisplayStatusBar Property

StatusBar Property

Переношу записанный VBA макрос рисования границы в Excel, но Delphi не знает что такое xlContinuous. Где взять значение этой константы?

Это всего лишь значит, что вы пользуетесь в Delphi поздним связыванием. Добавьте в uses ExcelXP или Excel2000. Для C# нужно полностью указывать namespace, тип и имя этой константы, например Excel.XlLineStyle.xlContinuous.

Microsoft.Office.Interop.Excel Namespace

Почему я не могу найти описание компонентов палитры Delphi «Servers» в Help’е? Где найти документацию по работе с Excel’ем?

Компоненты на палитре «Servers» — это «обертка» (wrapper) популярных COM-серверов Microsoft. Для описания их объектной модели, свойств и методов используйте поставляемый с Microsoft Office VBA Help или ищите информацию на MSDN (также смотрите «Полезные ссылки» в конце).

Полезные ссылки

Microsoft Excel Object Model

Automating Excel Using the Excel Object Model

Office Development — Excel

Migrating Excel VBA Solutions to Visual Studio 2005 Tools for Office

Converting Microsoft Office VBA Macros to Visual Basic .NET and C#

Microsoft Excel 2003 Language Reference

Understanding the Excel Object Model from a .NET Developer’s Perspective

Microsoft.Office.Interop.Excel Namespace

Excel Objects

Code Examples for Excel (C#)

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

Здесь форум по Excel, в который встроен VBA, но, похоже, что Вы спрашиваете о другом — об автоматизации Excel из MS Visual Studio. Поэтому и мало ответов, что вопрос непонятно из какой области программирования.

> хочу узнать как объявить в программе VB функции Excel, так чтоб бэйсик «подтягивал» эти функции при нажатии Ctrl+Пробел

Эта технология называется

Intellisense

.
Чтобы Intellisense работал, требуется

раннее связывание

.

> при вставке фрагментов кода найденных в интернете VB выдает такое сообщение «xlToRight» не объявлен.

Чтобы получить внятный ответ нужна конкретика — уточнить  программную среду и привести фрагмент кода, который приводит к ошибке. Как уже отметил Игорь (Hugo), xlToRight это не функция, а константа объектной модели VBA Excel. Значение константы легко узнать, нажав в Excel ALT-F11, затем Ctrl-G, затем ввод символа вопроса, ввод текста константы и нажатие Enter. Или там же (окно Immediate) при курсоре внутри xlToRight нажать Shift-F2 и увидеть, что объявление констант такое:
Const xlDown = -4121
Const xlToRight = -4161  
и т.д.
При раннем связывании константы подключаются автоматически.

> Если есть кто нибудь, кто не прочь время от времени делится опытом по программированию в VB, кого можно спрашивать при возникновении неясностей, напишите плиз, можно в скайпе списаться

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

15.3. Свойства Range

15.3.1. Address — адрес ячейки в формате A1

15-05-Range Address.xlsm — пример к п. 15.3.1.

Возвращает строку, представляющую собой адрес ячейки в формате A1. Адрес выводится в абсолютном виде — снабжается знаками $.

Листинг 15.15 позволяет, задав адрес ячейки в виде R1C1, вывести ее адрес в формате A1.

Dim num_Row
    Dim num_Col
    Dim MyRange As Range
    num_Row = Val(InputBox("Введите строку"))
    num_Col = Val(InputBox("Введите столбец"))
    Set MyRange = _
        ActiveSheet.Cells(num_Row, num_Col)
    MsgBox (MyRange.Address + _
    " - имя ячейки " & _
    " с индексами " & num_Row & " и " & num_Col)


Листинг
15.15.
Вывод адреса ячейки в формате A1

15.3.2. Areas — работа с несмежными выделенными областями

15-06-Range Areas.xlsm — пример к п. 15.3.2.

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

'Для хранения исходной
    'выделенной области
    Dim obj_Area As Range
    'Для хранения ссылки на
    'отдельные диапазоны
    Dim obj_Range As Range
    'Для исходного листа
    Dim obj_Sheet As Worksheet
    'Для каждого из новых листов
    Dim obj_OldSheet As Worksheet
    'Присвоим ссылку на выделенную область
    Set obj_Area = Selection
    'Ссылка на активный лист
    Set obj_OldSheet = ActiveSheet
    'Для каждой несмежной области в
    'выделении
    For Each obj_Range In obj_Area.Areas
        'Копируем эту область
        obj_OldSheet.Activate
        obj_Range.Select
        Selection.Copy
        'Создаем новый лист
        'и вставляем в него
        Set obj_Sheet = Worksheets.Add
        obj_Sheet.Select
        obj_Sheet.Paste
    Next


Листинг
15.16.
Вывод выделенных несмежных областей в отдельные листы

15.3.3. Borders — управление границами ячеек

15-07-Range Borders.xlsm — пример к п. 15.3.3.

Позволяет управлять границами ячеек. Границы ячеек обычно используются для оформления таблиц. Как правило, работа ведется с неким выделенным диапазоном ячеек, для которого настраивают внешние границы, внутренние границы, типы и цвета линий. Работа с границами ячеек ведется посредством свойств объектов Border. Собственно говоря, самое важное свойство коллекции Borders — это Item, дающее доступ к отдельным объектам Border — то есть к границам. Остальные действия с границами проводятся с помощью свойств объектов Border.

Item — свойство, которое возвращает отдельную границу по индексу или имени границы. Принято использовать следующие имена границ:

  • xlDiagonalDown — диагональ из левого верхнего угла ячейки в правый нижний
  • xlDiagonalUp — диагональ из левого нижнего угла ячейки в правый верхний
  • xlEdgeBottom — нижняя внешняя граница
  • xlEdgeLeft — левая внешняя граница
  • xlEdgeRight — правая внешняя граница
  • xlEdgeTop — верхняя внешняя граница
  • xlInsideHorizontal — внутренние горизонтальные границы
  • xlInsideVertical — внутренние вертикальные границы

Когда выбрана граница, с которой вы хотите работать, можно использовать свойства объекта Border, в частности, следующие:

Color — позволяет задавать цвет границы. Для задания цвета можно использовать функцию RGB, которая по переданным ей значениям цветовых компонентов в формате RGB возвращает нужный цвет. Например, такой вызов этой функции возвратит красный цвет: RGB(255,0,0). Также здесь можно использовать цветовые константы: vbBlack, vbRed и т.д.

LineStyle — позволяет задавать тип линии. Здесь применимо несколько констант. В частности, следующие:

  • xlContinuous — непрерывная линия
  • xlDash — линия, состоящая из черточек
  • xlDashDot — линия с чередующимися точками и черточками
  • xlDot — линия состоящая из точек
  • xlDouble — двойная линия
  • xlLineStyleNone — нет линий

Weight — задает толщину линии при помощи указания одной из констант:

  • xlHairline — самая тонкая линия
  • xlThin — тонкая линия
  • xlMedium — линия средней толщины
  • xlThick — толстая линия

Давайте рассмотрим пример (листинг 15.17.). Выведем набор значений в таблицу, отформатируем ее таким образом, чтобы внешние границы состояли из сплошных черных линий средней толщины, внутренние — из точечных тонких красных линий (рис. 15.3.)

Dim obj_Range As Range
    'Добавляем в книгу новый лист
    'он автоматически становится активным
    Worksheets.Add
    ActiveSheet.Name = "Новая таблица"
    'заполняем небольшую таблицу данными
    For i = 1 To 5
        For j = 1 To 5
            ActiveSheet.Cells(i + 1, j + 1) = _
            Int(Rnd * 100)
        Next j
    Next i
    'Свойство CurrentRegion возвращает
    'заполненную данными область вокруг
    'ячейки, для которой вызывается
    Set obj_Range = ActiveSheet.Cells(i, j).CurrentRegion
    'Настраиваем свойства каждой из границ
    With obj_Range.Borders(xlEdgeLeft)
        .LineStyle = xlDContinuous
        .Color = vbBlack
        .Weight = xlMedium
    End With
    With obj_Range.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Color = vbBlack
        .Weight = xlMedium
    End With
    With obj_Range.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Color = vbBlack
        .Weight = xlMedium
    End With
    With obj_Range.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Color = vbBlack
        .Weight = xlMedium
    End With
    With obj_Range.Borders(xlInsideVertical)
        .LineStyle = xlDot
        .Color = RGB(255, 0, 0)
        .Weight = xlThin
    End With
    With obj_Range.Borders(xlInsideHorizontal)
        .LineStyle = xlDot
        .Color = RGB(255, 0, 0)
        .Weight = xlThin
    End With


Листинг
15.17.
Форматирование границ

Отформатированная таблица в документе

Рис.
15.3.
Отформатированная таблица в документе

Понравилась статья? Поделить с друзьями:
  • Excel что такое nerr
  • Excel что такое case
  • Excel что такое application volatile
  • Excel что отображается в строке формул excel
  • Excel что означает этот знак