нельзя установить свойство rowheight класса range

Developing.ru

Загадка про RowHeight от Excel

Есть странноватая проблема.
Дан алгоритм (подгоняет ширину вставляемого в Excel OLE-объекта под ширину ячейки, а высоту ячейки под высоту этого объекта):

excCell := UnAssigned;
excCell := excSheetMain.Range[‘A1:BZ500’].Find(‘&#TT_scheme#’, lookin:=xlValues);
if((VarCompareValue(excCell,UnAssigned)=vrEqual)and(Length(strVisSchemeTTName)>0)) then
fnExcMakeDocument:=false
else
begin
excCell.Select;
//вставить объект
s := outdir+strVisSchemeTTName+’.vsd’;
excObj := excSheetMain.OLEObjects.Add(Filename:=s,
Link:=False, DisplayAsIcon :=False);
//подогнать ширину OLE-объекта к ширине ячейки
excObj.ShapeRange.LockAspectRatio := msoTrue;
e1 := excCell.Width;
excObj.ShapeRange.Width := (e1/2.8125)*49.625*2.83066;
//подогнать высоту ячейки к высоте OLE-объекта
e1 := excObj.ShapeRange.Height;
excCell.RowHeight := e1; //здесь появляется ошибка
end;

делается это в цикле при сборке N > 1 документов. При сборке первого документа все хорошо. А на втором вылезает EOleException: Нельзя установить свойство RowHeight класса Range
И к.з. что за дела! Настройки безопасности макросов не помогают. Хелп оффиса ясно пишет, что у Range есть сво-во RowHeight с возможностью изменения его значения.

Помогите, пожалуйста, разобраться! Второй день сижу с этим глюком и никак! И самое обидное, что эта фигня запарывает весь проект в 3000 строк

Есть ограничения на максимальную высоту ячеек. Попробуйте вручную в экселе сделать очень высокую строку (учеличить высоту, скажем, до 547 пикселов, или Формат-Строка-Высота-410). 😕

Я так думаю.

Источник

VBA Excel. Размер ячейки (высота строки, ширина столбца)

Изменение размера ячейки в VBA Excel. Высота строки, ширина столбца, автоподбор ширины ячейки. Свойства RowHeight и ColumnWidth объекта Range.

Размер ячейки

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

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

Высота строки и ширина столбца в Excel

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

На сайте поддержки офисных приложений Microsoft так написано об этих величинах:

Смотрите, как сделать все ячейки рабочего листа квадратными.

Высота строки

Для изменения высоты строки используйте свойство RowHeight объекта Range. И не важно, будет объект Range представлять из себя выделенный произвольный диапазон, отдельную ячейку, целую строку или целый столбец — высота всех строк, пересекающихся с объектом Range будет изменена после присвоения свойству RowHeight этого объекта нового значения.

Примеры изменения высоты строк:

Пример 1
Изменение высоты отдельной ячейки:

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

Пример 2
Изменение высоты строки:

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

Читайте также:  спасти майского жука примета

Пример 3
Изменение высоты ячеек заданного диапазона:

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

Пример 4
Изменение высоты ячеек целого столбца:

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

Ширина столбца

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

Примеры изменения ширины столбцов:

Пример 1
Изменение ширины отдельной ячейки:

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

Пример 2
Изменение ширины столбца:

в результате, третий столбец рабочего листа (столбец «C») приобретает ширину, равную 50 символам.

Пример 3
Изменение ширины ячеек заданного диапазона:

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

Пример 4
Изменение ширины ячеек целой строки:

в результате, всем столбцам рабочего листа будет назначена ширина, равная 35 символам.

Автоподбор ширины

Для автоподбора ширины ячейки в соответствие с размером ее содержимого используйте следующий код:

Источник

Нельзя установить свойство rowheight класса range

Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.5.2006

Репутация: нет
Всего: нет

Есть странноватая проблема.
Дан алгоритм (подгоняет ширину вставляемого в Excel OLE-объекта под ширину ячейки, а высоту ячейки под высоту этого объекта):

excCell := UnAssigned;
excCell := excSheetMain.Range[‘A1:BZ500’].Find(‘&#TT_scheme#’, lookin:=xlValues);
if((VarCompareValue(excCell,UnAssigned)=vrEqual)and(Length(strVisSchemeTTName)>0)) then
fnExcMakeDocument:=false
else
begin
excCell.Select;
//вставить объект
s := outdir+strVisSchemeTTName+’.vsd’;
excObj := excSheetMain.OLEObjects.Add(Filename:=s,
Link:=False, DisplayAsIcon :=False);
//подогнать ширину OLE-объекта к ширине ячейки
excObj.ShapeRange.LockAspectRatio := msoTrue;
e1 := excCell.Width;
excObj.ShapeRange.Width := (e1/2.8125)*49.625*2.83066;
//подогнать высоту ячейки к высоте OLE-объекта
e1 := excObj.ShapeRange.Height;
excCell.RowHeight := e1;
end;

делается это в цикле при сборке N > 1 документов. При сборке первого документа все хорошо. А на втором вылезает EOleException: Нельзя установить свойство RowHeight класса Range
И к.з. что за дела! Настройки безопасности макросов не помогают. Хелп оффиса ясно пишет, что у Range есть сво-во RowHeight с возможностью изменения его значения.

Помогите, пожалуйста, разобраться! Второй день сижу с этим глюком и никак! И самое обидное, что эта фигня запарывает весь проект в 3000 строк

Советчик

Профиль
Группа: Модератор
Сообщений: 20503
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453

.

Профиль
Группа: Участник Клуба
Сообщений: 351
Регистрация: 14.5.2006

Репутация: 5
Всего: 165

Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.5.2006

Репутация: нет
Всего: нет

Читайте также:  какую ручку нельзя использовать для заполнения листка нетрудоспособности
Цитата(Aloha @ 27.5.2006, 15:47 )
Мне кажется, что все дело в величине параметра RowHeight

К сожалению, дело не в этом.
В первом документе (когда все работает) вставляется объект бОльшей высоты и ширины, чем при зборке второго документа (когда глючит). И оба объекта вписываются в предельную высоту ячейки в Excel = 409.

Вопрос в том разделе, т.к. касается глюков Excel VBA.

Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.5.2006

Репутация: нет
Всего: нет

Aloha, спасибо! Действительно дело было в высоте > 409. А я криво просто смотрел. Спасибо, проблема решена!

P.S. модератору: проьлема решена, тему можно закрывать

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »

[ Время генерации скрипта: 0.1006 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Источник

Нельзя установить свойство rowheight класса range

Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.5.2006

Репутация: нет
Всего: нет

Есть странноватая проблема.
Дан алгоритм (подгоняет ширину вставляемого в Excel OLE-объекта под ширину ячейки, а высоту ячейки под высоту этого объекта):

excCell := UnAssigned;
excCell := excSheetMain.Range[‘A1:BZ500’].Find(‘&#TT_scheme#’, lookin:=xlValues);
if((VarCompareValue(excCell,UnAssigned)=vrEqual)and(Length(strVisSchemeTTName)>0)) then
fnExcMakeDocument:=false
else
begin
excCell.Select;
//вставить объект
s := outdir+strVisSchemeTTName+’.vsd’;
excObj := excSheetMain.OLEObjects.Add(Filename:=s,
Link:=False, DisplayAsIcon :=False);
//подогнать ширину OLE-объекта к ширине ячейки
excObj.ShapeRange.LockAspectRatio := msoTrue;
e1 := excCell.Width;
excObj.ShapeRange.Width := (e1/2.8125)*49.625*2.83066;
//подогнать высоту ячейки к высоте OLE-объекта
e1 := excObj.ShapeRange.Height;
excCell.RowHeight := e1;
end;

делается это в цикле при сборке N > 1 документов. При сборке первого документа все хорошо. А на втором вылезает EOleException: Нельзя установить свойство RowHeight класса Range
И к.з. что за дела! Настройки безопасности макросов не помогают. Хелп оффиса ясно пишет, что у Range есть сво-во RowHeight с возможностью изменения его значения.

Помогите, пожалуйста, разобраться! Второй день сижу с этим глюком и никак! И самое обидное, что эта фигня запарывает весь проект в 3000 строк

Советчик

Профиль
Группа: Модератор
Сообщений: 20503
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453

.

Профиль
Группа: Участник Клуба
Сообщений: 351
Регистрация: 14.5.2006

Репутация: 5
Всего: 165

Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.5.2006

Репутация: нет
Всего: нет

Цитата(Aloha @ 27.5.2006, 15:47 )
Мне кажется, что все дело в величине параметра RowHeight

К сожалению, дело не в этом.
В первом документе (когда все работает) вставляется объект бОльшей высоты и ширины, чем при зборке второго документа (когда глючит). И оба объекта вписываются в предельную высоту ячейки в Excel = 409.

Вопрос в том разделе, т.к. касается глюков Excel VBA.

Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.5.2006

Репутация: нет
Всего: нет

Aloha, спасибо! Действительно дело было в высоте > 409. А я криво просто смотрел. Спасибо, проблема решена!

P.S. модератору: проьлема решена, тему можно закрывать

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »

[ Время генерации скрипта: 0.1039 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Источник

VBA Excel. Свойства ячейки (объекта Range)

Свойства ячейки, часто используемые в коде VBA Excel. Демонстрация свойств ячейки, как структурной единицы объекта Range, на простых примерах.

Ячейка и объект Range

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

В VBA Excel есть свойство Cells объекта Range, которое позволяет обратиться к одной ячейке в указанном диапазоне (возвращает объект Range в виде одной ячейки). Если в коде используется свойство Cells без указания диапазона, значит оно относится ко всему диапазону активного рабочего листа.

Примеры обращения к одной ячейке:

Подробнее о том, как обратиться к ячейке, смотрите в статье: Ячейки (обращение, запись, чтение, очистка).

В этой статье мы рассмотрим свойства объекта Range, применимые, в том числе, к диапазону, состоящему из одной ячейки.

Свойства ячейки (объекта Range)

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

Простые примеры для начинающих

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

Учтите, что в одном программном модуле у всех процедур должны быть разные имена. Если вы уже копировали в модуль подпрограммы с именами Primer1, Primer2 и т.д., удалите их или создайте еще один стандартный модуль.

Форматирование ячеек

Заливка ячейки фоном, изменение высоты строки, запись в ячейки текста, автоподбор ширины столбца, выравнивание текста в ячейке и выделение его цветом, добавление границ к ячейкам, очистка содержимого и форматирования ячеек.

Если вы запустите эту процедуру, информационное окно MsgBox будет прерывать выполнение программы и сообщать о том, что произойдет дальше, после его закрытия.

Источник

Читайте также:  какую рыбу можно есть при камнях в желчном пузыре
Портал про кино и шоу-биз