Microsoft Office Excel: Нельзя установить свойство HorizontalAlignment клас #294893


#0 by andrewalexk
Microsoft Office Excel: Нельзя установить свойство HorizontalAlignment класса Range диапазон = столбец почему?
#1 by FreeFin
Почему что? буквы нарисуй, как присваиваешь.
#2 by andrewalexk
:) буквы это конкретика а я про теорию... вот _ОкноЕхс.Windows(_ВыбФ).Activate; ... _ОкноЕхс.Range(Диапп).Select;           _ОкноЕхс.Selection.Columns.AutoFit; _ОкноЕхс.Selection.HorizontalAlignment=1; а аутофит отрабатывает..
#3 by FreeFin
_Selection.HorizontalAlignment = -4108; //Горизонтальное выравнивание текста _Selection.VerticalAlignment = -4108; //Вертикальное выравнивание текста
#4 by andrewalexk
:) да я знаю просто 1 это то же что .. Если видВыр=0 Тогда //установить по левому краю    Align    =    1;//-1431 ИначеЕсли видВыр=2 Тогда // установить по правому краю    Align    =    -4152; ИначеЕсли видВыр=1 Тогда // установить по центру    Align    =    -4108; КонецЕсли; _ОкноЕхс.Selection.HorizontalAlignment=Align; эксель же принципиально не связывает range и horizontal alignment .. хотя я брал код из работающего куска но там диапазон = строка... вот и думаю
#5 by FreeFin
Диапазон переназначь через _ОкноЕхс.Columns("B:B").Select; форматнет
#6 by andrewalexk
ммм... неа та же фигня странно
#7 by FreeFin
странно однако))) //*******если так пробовать: _ОкноЕхс.Windows(_ВыбФ).Activate; ... _ОкноЕхс.Range(Диапп).Select;           _ОкноЕхс.Selection.Columns.AutoFit; _ОкноЕхс.Columns(ЧотутНада).Select; _ОкноЕхс.Selection.HorizontalAlignment=-4108;
#8 by andrewalexk
:) неа та же фигня
#9 by andrewalexk
(8+) :) там даже ясно где копать.. файл в памяти висит и на такую попытку выдает такую ошибку а если из другой обработки открыть то дает выравнивать... эхехе..
#10 by AlexeyMK
Перем лЭксель;   Процедура ДеИнициализацияЭксель    Если ПустоеЗначение(лЭксель) = 0 Тогда          лЭксель.ActiveWorkbook.Save;        лЭксель.WorkBooks.Close;        лЭксель.Quit;        лЭксель = 0;    КонецЕсли; КонецПроцедуры Процедура ЗапускМакроса    scrptCtrl = СоздатьОбъект("MSScriptControl.ScriptControl");    scrptCtrl.Language = "vbscript";    лКод = "        |Function ExecMacros(lApp)        |        |    With lApp.Selection        |        .HorizontalAlignment = -4152 'xlRight        |    End With        |        |End Function        |";      scrptCtrl.AddCode(лКод);    scrptCtrl.Run("ExecMacros", лЭксель); КонецПроцедуры Функция ИнициализацияЭксель    Рез = 0;    Если ПустоеЗначение(лЭксель) = 1 Тогда        Если СокрЛП(ПутьКФайлу) <> "" Тогда            Попытка                лЭксель = СоздатьОбъект("Excel.Application");            Исключение                Сообщить(ОписаниеОшибки,"!");                Сообщить("Возможно, MS Excel не установлен на этом компьютере.");                Возврат 0 ;            КонецПопытки;            Попытка                лЭксель.WorkBooks.Open(ПутьКФайлу);            Исключение                Предупреждение("По указанному пути: """ + ПутьКФайлу + """ ничего нет...");                лЭксель.Quit;                лЭксель = 0;            КонецПопытки;            Рез = 1;        КонецЕсли;    Иначе        Рез = 1;    КонецЕсли;    Возврат Рез; КонецФункции   Процедура ВыбратьФайл    Перем Имя, Каталог;    Если ФС.ВыбратьФайл(0, Имя, Каталог, "Путь к файлу Excel",        "Файлы XLS (*.xls)|*.xls","*.xls") <> 1    Тогда        Возврат;    КонецЕсли;    ПутьКФайлу = СокрЛП(Каталог) + СокрЛП(Имя); КонецПроцедуры// ВыбратьФайл Процедура Сформировать    ИнициализацияЭксель;    Попытка        лТекЛист = лЭксель.WorkSheets("Лист1");        лТекЛист.Activate;        лТекЛист.Range(лТекЛист.Cells(1, 1), лТекЛист.Cells(10, 1)).Select;        ЗапускМакроса;    Исключение        ДеинициализацияЭксель;        Возврат;    КонецПопытки;    ДеинициализацияЭксель; КонецПроцедуры Вот так работает. Свойство Selection желательно не использовать, можешь захватить другие объекты кроме ячеек.
#11 by AlexeyMK
Впринципе даже лТекЛист.Activate; не надо...
#12 by smaharbA
вообщето код не очень, и кстати если использовать мсскриптконтрол, то совсем не обязательно делать саб или функ... За активе вообще по рукам всем тут нада ))
#13 by smaharbA
+ 4 и селект необязателен, даже если мсскриптконтрол, в него можно передавать объекты (это так, к слову... тут он вовсе не нужен)
#14 by smaharbA
и еще - ненадо так книгу активизировать _ОкноЕхс.Windows(_ВыбФ).Activate; лучше уж ищи ее перебором по индексам 1,2,3...
#15 by AlexeyMK
>smaharbA Хм... Да, щас проверил, все работает вроде. Видимо у автора большой опыт в решении проблем такого рода... Значит незря этот форум работает. Короткий и эффективный кусок кода. Так я понял проблемы все в Slection. Поправте если ошибаюсь.
#16 by AlexeyMK
>smaharbA - то совсем не обязательно делать саб или функ... Да :) так и есть. Только во всех источниках которые перерыл в инете везде "функ", как было выше сказано.  Перепроверять не приходилось.
#17 by andrewalexk
:)) маэстро как всегда снимаю шляпу спс х 2
#18 by andrewalexk
:) а если в книге нет листов и вся деятельность ведется через _ОкноЕхс.Windows(_ИмяФайл).ActiveSheet.Range... ? з.ы. ту же ошибку выдает если через этот оператор и cells...
#19 by andrewalexk
:) и про Лист.Cells(й,ы).NumberFormat="00.0"; такую же ошибку выдает... что же с классом "Range" не так?..
#20 by smaharbA
а нафига тогда ActiveSheet если нет листов ? объясни... Лист.Cells(й,ы).NumberFormatLocal="0,00";
#21 by andrewalexk
:) а там код такой листов нет но код работает через ActiveSheet .. ...
#22 by smaharbA
значит есть листы в другой книге
#23 by andrewalexk
:) (21+) ..передается большая таблица значений Т, ее по кусочкам пишут из mxl в xls-ы, их сшивают в 1 файл (_ВыбФ), а потом надо просто форматировать... Строк=Т.КоличествоСтрок+1; Колон=Т.КоличествоКолонок; _ОкноЕхс.Windows(_ВыбФ).Activate; Лист=_ОкноЕхс.Windows(_ВыбФ).ActiveSheet; Для й=1 По Колон Цикл    Диапп0=_ОкноЕхс.Range(Лист.Cells(1,й),Лист.Cells(Строк,й));              Диапп0.Columns.AutoFit; КонецЦикла вот этот кусок работает... а ни HorizontalAlignment ни NumberFormatLocal ни NumberFormat не работает... или жалуется как в названии темы или просто пишет ":" в поле описания ошибки..
#24 by smaharbA
надобы код, но есть еще вариант с worksheetfunction
#25 by andrewalexk
:) первый кусок кода: _ОкноЕхс=СоздатьОбъект("Excel.Application"); _ИмяФФ  =_ВыбКат+_ВыбФ; _ОкноЕхс.Visible=0; _ОкноЕхс.DisplayAlerts=0; _ОкноЕхс.DisplayAlerts=1; _ОкноЕхс.Workbooks.Open(_маска+"1.xls"); _ОкноЕхс.DisplayAlerts=0; _ОкноЕхс.ActiveWorkbook.SaveAs(_ИмяФФ,-4143); _ОкноЕхс.DisplayAlerts=1; Попытка    _ОкноЕхс.Windows(_ВыбФ).Visible=0;    _ОкноЕхс.Windows(_ВыбФ).DisplayWorkbookTabs = 1;    _ОкноЕхс.Windows(_ВыбФ).TabRatio = 0.2; Исключение КонецПопытки; для _й=2 по _сч цикл    состояние("Приклеиваю временный файл № "+_й);    _ОкноЕхс.Workbooks.Open(_маска+_й+".xls");    _ОкноЕхс.Windows(_маскаФайл+_й+".xls").ActiveSheet.Range("A1","IV"+_ОкноЕхс.Windows(_маскаФайл+_й+".xls").ActiveSheet.UsedRange.Rows.count).Copy(_ОкноЕхс.Windows(_ВыбФ).ActiveSheet.Range("A"+сокрлп(_ОкноЕхс.Windows(_ВыбФ).ActiveSheet.UsedRange.Rows.Count+1)));        _ОкноЕхс.Windows(_маскаФайл+_й+".xls").close(-1); конеццикла;
#26 by smaharbA
Делай через лист всеже Но ты с узедранжем наколешся рано или поздно
#27 by andrewalexk
:) я даже пробовал записать файл после автофит обнулить оле объект и из другой обработки открыть его взять не актившит а воркшит и отформатировать - на ранже жалуется... попробую.. а что значит наколешься?
#28 by smaharbA
заполни гденибудь посередине, не от первой колонки и столбца лист и посмотри usedrange.rows.count
#29 by andrewalexk
:) да я и без юзедренж запутался.. кучи примеров кода в инете по numberformat.. а у меня "нельзя установить свойство класса .." ни первый лист ни активный ни всю область ни по колонкам ни по ячейкам ни через range ни через cells ваще блин .. :))
#30 by andrewalexk
:) попробовал все activesheet убрал перед форматированием обнулил оле-объект, чтобы не висели лишние книги в памяти 1с - та же ошибка..
#31 by andrewalexk
:) Смахарбчик! спс за в но теперь следующая беда: внешне ячейка выглядит правильно формат стоит нужный но в суммирование ячейка включается ТОЛЬКо после перещелкивания на ней мышкой...
#32 by andrewalexk
:) ап № 1
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям