Автосумма в самой нижней ячейке крайнего столбца

Автор DennDarkk, 10 октября 2012, 03:12

0 Пользователи и 1 гость просматривают эту тему.

DennDarkk

Работаю с ОпенОфисом уже пару лет, но много однообразных функций приходится выполнять с большим количеством документов, сегодня в голову пришла "гениальная" мысль сделать макрос, простой макрос получился, но его приходится вручную доделывать, конечно стало гораздо проще, однако может кто-нибудь что-нибудь присоветует как оптимизировать данный процесс. По форуму порылся, нашёл функцию поиска последней строки (в оригинальном примере выдаёт сообщение с указанием номера строки минус 1), с горем пополам всунул в свой макрос, почему-то срабатывает только при свежеоткрытом файле (но это собственно так и надо), но вот дальше упёрся собственным недопониманием, как оживить эту функцию для себя. Вкратце дела обстоят так: есть накладная экспортированная из 1С в экселевском формате 5.0/95, но на работе я себе поставил убунту и работаю в ОпенОфисе, посему данные документы открываю в нём. Приложу файл сохранённый уже в *.ods, без макроса (он был мною сделан обычной записью), в нём есть оригинал и то, что из него получается путём простых но нудных операций копирования и прописывания простейших формул и вариант того что получается после отработки моего макроса. Ну и внутри примечаний наставлю по возможности. Ярлыки листов по умолчанию "Sheet" (листы переименую чтобы было более наглядно), часть дробных чисел прописано через точку (а по ним необходимо формулы считать), всё остальное написал внутри документа. В названии темы не смог более конкретно описать суть проблемы.


[вложение удалено Администратором]

JohnSUN

Слушай, DennDarkk, по второму листу возникла пара вопросов...
1. Я так понял, что печатная часть остается той же, что и в оригинале? То есть по колонку H включительно? Остальное только для контроля "где и сколько"?
2. Курс ты вбил в каждую из ячеек в G наглухо. А если он изменится (скачет-то он, зараза такая, как бешеный!) - где его брать?
3. Столбец J бьется руками в каждом случае индивидуально? Посчитать его по формуле какой-нибудь хитровыкрученной нельзя?

Ну, есть еще вопросы, но это больше не к задаче, а к возможным вариантам решения (типа, а нет ли у тебя доступа к конфигурации 1С и желания написать отдельный внешний отчет "СпецНакладная", который будет сразу формировать нужные формы).

Есть смысл обдумать вариант с "шаблоном". В смысле, готовишь отдельную книгу из двух листов. Присоединяешь к ней лист с исходной накладной (Вставка-Лист из файла-Связь с файлом). На первом листе одними только формулами, без всяких макросов, делаешь нужные пересчеты по данным присоединенного листа. На второй - тоже одними только формулами - формируешь готовую для печати накладную. Остается только каждый раз сохранять 1С-овскую накладную в одно и то же место с одним и тем же именем и печатать...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

DennDarkk

1. Да
2. Как-то не подумал (всегда вручную делал), для него можно вводить какой нить коэфф на том же листе и в формулу тогда включать ячейку с курсом, так даже нагляднее-доступнее информация будет
3. Только руками и только индивидуально, нестандартный подход к вопросу создания отката.
Документы из 1Ски создаются без моего участия (разные регионы), на мне весь последующий процесс переделки и контроля.
Каждая накл-я сохр-ся отдельно (в имени много всякой фигни прописывается), чтобы можно было в оффлайне работать с ними.
На данный момент я думаю что мой сырой вариант гораздо лучше того что я делал вручную, это ещё один фактор - всё уже как-то автоматически закрепилось в сознании, процедура не меняется несколько лет. Открыл сохр-й док-т, прописал все формулы, заодно проверил все цены (ох как часто они там в 1Ске чего-то меняют и не всегда корректно) и т.д.

JohnSUN

3. Фигово... Получается, что нужно ваять отдельный диалог для "поименного" редактирования табличной части. Или все-таки можно как-то автоматизировать размазывание процента комиссии (давай все-таки использовать этот термин, звучит элегантнее  ;) ) по всему списку? Ну, сам посуди: то ли один раз задать ожидаемый процент (сумму) и получить готовый список, то ли каждый раз перелопачивать 10-40 позиций, чтоб выйти на заданную цифру? Нет, диалог-то сваять не проблема. Хотя бэйсик не имеет встроенного элемента управления-таблицы - придется выкручиваться со списком полей ввода, а это муторно. Но еще муторнее, что для каждой накладной придется вручную бить целую пачку цифр...

По поводу вида исходных данных: накладная ВСЕГДА приходит в одном файле одним листом с одним и тем же именем (именем листа, не книги - про разные имена книг я понял)? И имя листа всегда "Sheet1"? Или в зависимости от настроек систем "на местах" могут быть "Лист1"? Куда ты деваешь отработанные книги? Ну, печатаешь - это ясно... А готовую книгу оставляешь в той же папке или перекидываешь куда-то дальше?
Почему спрашиваю... Намечается такой вариант обработки:
1. Запускаем отдельную книгу с макросом - обработчик. В ней ничего особенного нет, она никогда не меняется. Ее задача просто хранить макросы и диалоги и выполнять их. Главный диалог запускается сразу после открытия этой книги или по кнопке на листе.
2. Выбираем очередную книгу, открываем ее в отдельном окне.
3. Если в книге один лист с фиксированным именем (почему и спросил про "Sheet1"/"Лист1"), то создаем его копию с опять-таки фиксированным именем, например, "ToPrint". Попутно можно включить защиту исходного листа и убрать с него область печати. А область печати назначить на таблицу на листе "ToPrint". Если листов в книге ровно два и один из них имеет имя "ToPrint", то книга поступает в дальнейшую обработку. Если листов три и более или единственный лист носит неправильное имя - значит книга не правильная, ручки шаловливые в ней что-то испортили, выводим сообщение, файл закрываем без изменений, возвращаемся в диалог выбора файла.
4. (Дальнейшая обработка) Слизываем в два массива данные с исходного листа и с листа "ToPrint". Считываем только табличные части. Предлагаю ориентироваться на строки "Наименование товара" и "ВСЬОГО товар :". Но это при условии, что эти строки есть ВО ВСЕХ документах, поступающих из регионов. Если это не так, придется распознавать табличную часть по другим признакам.
5. В отдельном диалоге предъявляем для обработки вычисленный курс (в стартовом варианте он будет 1, поскольку "ToPrint" пока что точная копия исходного листа), накрученную комиссию в двух числовых полях - в условных единицах и в процентах (в стартовом варианте 0, поскольку суммы пока что совпадают), список номенклатурных позиций и для каждой из них - количество, цена первоначальная и цена обработанная, сумма. Кстати! Ты все формулы строил отталкиваясь от цены... Как по мне, так это не совсем удобно. Комиссию-то нужно прикрутить к общей стоимости покупки. Я бы лепил ее к окончательной сумме и обратным пересчетом выходил бы на цену. Но тебе виднее....
6. Ну и последний шаг - впихнуть отредактированную таблицу в лист "ToPrint", дописать в нужное место формулу суммирования (или не париться и просто вставить подсчитанное значение?) и при необходимости - сумму прописью. Сохранить. Вернуться к диалогу выбора следующей книги.

В принципе, это все можно реализовать и на бэйсике в отдельной книге, и на Пайтоне, и даже в Лазарусе отдельным приложением...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

DennDarkk

Это всё как-то усложняет задачу, надо собственно только придумать как завершить мой упрощённый макрос - т.е. копирование из последних двух колонок строк начиная с ячейки с суммой плюс колонки слева и справа до строки 40 (уберуться следы запасных строк и вид более эстетический станет) в основную часть и первую копию, и пробивание автосуммы в параллельных по этой строке ячейках (слева которые), как вариант в самом начале назначить ячейку с курсом - чтобы формула читала это значение, как-то так ил примерно так.

JohnSUN

Цитата: DennDarkk от 12 октября 2012, 18:45
... надо собственно только придумать как завершить мой упрощённый макрос...
Дык это... Мы ж его не видели еще...

Еще вопрос - проблем с сохранением кириллицы из 5.0/95 не было? Ну, в смысле, что все буквы в вопросительные знаки превращаются?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

DennDarkk

По поводу вопросиков всё просто - конечный результат сохраняю в *.ods (если в *.xls то они эти самые впросики тут как тут).
REM  *****  BASIC  *****

sub GRN_1

rem ----------------------------------------------------------------------

rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$G$15:$H$40"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$J$15"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$M$15"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())

rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "ToPoint"
args7(0).Value = "$G$15"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args7())

rem ----------------------------------------------------------------------
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "StringName"
args8(0).Value = "=J15*8,2"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args8())

rem ----------------------------------------------------------------------
dim args9(0) as new com.sun.star.beans.PropertyValue
args9(0).Name = "ToPoint"
args9(0).Value = "$H$15"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args9())

rem ----------------------------------------------------------------------
dim args10(0) as new com.sun.star.beans.PropertyValue
args10(0).Name = "StringName"
args10(0).Value = "=G15*E15"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args10())

rem ----------------------------------------------------------------------
dim args11(0) as new com.sun.star.beans.PropertyValue
args11(0).Name = "ToPoint"
args11(0).Value = "$K$15"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args11())

rem ----------------------------------------------------------------------
dim args12(0) as new com.sun.star.beans.PropertyValue
args12(0).Name = "StringName"
args12(0).Value = "=J15*E15"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args12())

rem ----------------------------------------------------------------------
dim args13(0) as new com.sun.star.beans.PropertyValue
args13(0).Name = "ToPoint"
args13(0).Value = "$I$15"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args13())

rem ----------------------------------------------------------------------
dim args14(0) as new com.sun.star.beans.PropertyValue
args14(0).Name = "StringName"
args14(0).Value = "=J15-M15"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args14())

rem ----------------------------------------------------------------------
dim args15(0) as new com.sun.star.beans.PropertyValue
args15(0).Name = "ToPoint"
args15(0).Value = "$L$15"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args15())

rem ----------------------------------------------------------------------
dim args16(0) as new com.sun.star.beans.PropertyValue
args16(0).Name = "StringName"
args16(0).Value = "=I15*E15"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args16())

rem ----------------------------------------------------------------------
dim args17(0) as new com.sun.star.beans.PropertyValue
args17(0).Name = "ToPoint"
args17(0).Value = "$I$13"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args17())

rem ----------------------------------------------------------------------
dim args18(0) as new com.sun.star.beans.PropertyValue
args18(0).Name = "StringName"
args18(0).Value = "=SUM(L15:L40)"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args18())

rem ----------------------------------------------------------------------
dim args19(0) as new com.sun.star.beans.PropertyValue
args19(0).Name = "ToPoint"
args19(0).Value = "$G$15"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args19())

rem ----------------------------------------------------------------------
dim args20(0) as new com.sun.star.beans.PropertyValue
args20(0).Name = "EndCell"
args20(0).Value = "$G$40"

dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, args20())

rem ----------------------------------------------------------------------
dim args21(0) as new com.sun.star.beans.PropertyValue
args21(0).Name = "ToPoint"
args21(0).Value = "$G$15:$G$40"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args21())

rem ----------------------------------------------------------------------
dim args22(0) as new com.sun.star.beans.PropertyValue
args22(0).Name = "ToPoint"
args22(0).Value = "$H$15"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args22())

rem ----------------------------------------------------------------------
dim args23(0) as new com.sun.star.beans.PropertyValue
args23(0).Name = "EndCell"
args23(0).Value = "$H$40"

dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, args23())

rem ----------------------------------------------------------------------
dim args24(0) as new com.sun.star.beans.PropertyValue
args24(0).Name = "ToPoint"
args24(0).Value = "$H$15:$H$40"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args24())

rem ----------------------------------------------------------------------
dim args25(0) as new com.sun.star.beans.PropertyValue
args25(0).Name = "ToPoint"
args25(0).Value = "$K$15"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args25())

rem ----------------------------------------------------------------------
dim args26(0) as new com.sun.star.beans.PropertyValue
args26(0).Name = "EndCell"
args26(0).Value = "$K$40"

dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, args26())

rem ----------------------------------------------------------------------
dim args27(0) as new com.sun.star.beans.PropertyValue
args27(0).Name = "ToPoint"
args27(0).Value = "$K$15:$K$40"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args27())

rem ----------------------------------------------------------------------
dim args28(0) as new com.sun.star.beans.PropertyValue
args28(0).Name = "ToPoint"
args28(0).Value = "$I$15"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args28())

rem ----------------------------------------------------------------------
dim args29(0) as new com.sun.star.beans.PropertyValue
args29(0).Name = "EndCell"
args29(0).Value = "$I$40"

dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, args29())

rem ----------------------------------------------------------------------
dim args30(0) as new com.sun.star.beans.PropertyValue
args30(0).Name = "ToPoint"
args30(0).Value = "$I$15:$I$40"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args30())

rem ----------------------------------------------------------------------
dim args31(0) as new com.sun.star.beans.PropertyValue
args31(0).Name = "ToPoint"
args31(0).Value = "$L$15"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args31())

rem ----------------------------------------------------------------------
dim args32(0) as new com.sun.star.beans.PropertyValue
args32(0).Name = "EndCell"
args32(0).Value = "$L$40"

dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, args32())

rem ----------------------------------------------------------------------
dim args33(0) as new com.sun.star.beans.PropertyValue
args33(0).Name = "ToPoint"
args33(0).Value = "$L$15:$L$40"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args33())

rem ----------------------------------------------------------------------
dim args34(0) as new com.sun.star.beans.PropertyValue
args34(0).Name = "ToPoint"
args34(0).Value = "$E$15:$E$40"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args34())

rem ----------------------------------------------------------------------
dim args35(17) as new com.sun.star.beans.PropertyValue
args35(0).Name = "SearchItem.StyleFamily"
args35(0).Value = 2
args35(1).Name = "SearchItem.CellType"
args35(1).Value = 0
args35(2).Name = "SearchItem.RowDirection"
args35(2).Value = true
args35(3).Name = "SearchItem.AllTables"
args35(3).Value = false
args35(4).Name = "SearchItem.Backward"
args35(4).Value = false
args35(5).Name = "SearchItem.Pattern"
args35(5).Value = false
args35(6).Name = "SearchItem.Content"
args35(6).Value = false
args35(7).Name = "SearchItem.AsianOptions"
args35(7).Value = false
args35(8).Name = "SearchItem.AlgorithmType"
args35(8).Value = 0
args35(9).Name = "SearchItem.SearchFlags"
args35(9).Value = 71680
args35(10).Name = "SearchItem.SearchString"
args35(10).Value = "."
args35(11).Name = "SearchItem.ReplaceString"
args35(11).Value = ","
args35(12).Name = "SearchItem.Locale"
args35(12).Value = 255
args35(13).Name = "SearchItem.ChangedChars"
args35(13).Value = 2
args35(14).Name = "SearchItem.DeletedChars"
args35(14).Value = 2
args35(15).Name = "SearchItem.InsertedChars"
args35(15).Value = 2
args35(16).Name = "SearchItem.TransliterateFlags"
args35(16).Value = 1280
args35(17).Name = "SearchItem.Command"
args35(17).Value = 3

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args35())

rem ----------------------------------------------------------------------
dim args36(0) as new com.sun.star.beans.PropertyValue
args36(0).Name = "ToPoint"
args36(0).Value = "$I$15:$I$40"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args36())

rem ----------------------------------------------------------------------
dim args37(0) as new com.sun.star.beans.PropertyValue
args37(0).Name = "Bold"
args37(0).Value = true

dispatcher.executeDispatch(document, ".uno:Bold", "", 0, args37())

rem ----------------------------------------------------------------------
dim args38(0) as new com.sun.star.beans.PropertyValue
args38(0).Name = "Color"
args38(0).Value = 44544

dispatcher.executeDispatch(document, ".uno:Color", "", 0, args38())

rem ----------------------------------------------------------------------
dim args39(0) as new com.sun.star.beans.PropertyValue
args39(0).Name = "HorizontalAlignment"
args39(0).Value = com.sun.star.table.CellHoriJustify.CENTER

dispatcher.executeDispatch(document, ".uno:HorizontalAlignment", "", 0, args39())

rem ----------------------------------------------------------------------
dim args40(0) as new com.sun.star.beans.PropertyValue
args40(0).Name = "ToPoint"
args40(0).Value = "$L$15:$L$40"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args40())

rem ----------------------------------------------------------------------
dim args41(0) as new com.sun.star.beans.PropertyValue
args41(0).Name = "Bold"
args41(0).Value = true

dispatcher.executeDispatch(document, ".uno:Bold", "", 0, args41())

rem ----------------------------------------------------------------------
dim args42(0) as new com.sun.star.beans.PropertyValue
args42(0).Name = "HorizontalAlignment"
args42(0).Value = com.sun.star.table.CellHoriJustify.CENTER

dispatcher.executeDispatch(document, ".uno:HorizontalAlignment", "", 0, args42())

rem ----------------------------------------------------------------------
dim args43(0) as new com.sun.star.beans.PropertyValue
args43(0).Name = "Color"
args43(0).Value = 16711935

dispatcher.executeDispatch(document, ".uno:Color", "", 0, args43())

rem ----------------------------------------------------------------------
dim args44(0) as new com.sun.star.beans.PropertyValue
args44(0).Name = "ToPoint"
args44(0).Value = "$I$13"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args44())

rem ----------------------------------------------------------------------
dim args45(0) as new com.sun.star.beans.PropertyValue
args45(0).Name = "HorizontalAlignment"
args45(0).Value = com.sun.star.table.CellHoriJustify.CENTER

dispatcher.executeDispatch(document, ".uno:HorizontalAlignment", "", 0, args45())

rem ----------------------------------------------------------------------
dim args46(0) as new com.sun.star.beans.PropertyValue
args46(0).Name = "Bold"
args46(0).Value = true

dispatcher.executeDispatch(document, ".uno:Bold", "", 0, args46())

rem ----------------------------------------------------------------------
dim args47(2) as new com.sun.star.beans.PropertyValue
args47(0).Name = "FontHeight.Height"
args47(0).Value = 10
args47(1).Name = "FontHeight.Prop"
args47(1).Value = 100
args47(2).Name = "FontHeight.Diff"
args47(2).Value = 0

dispatcher.executeDispatch(document, ".uno:FontHeight", "", 0, args47())

rem ----------------------------------------------------------------------
dim args48(0) as new com.sun.star.beans.PropertyValue
args48(0).Name = "Color"
args48(0).Value = 255

dispatcher.executeDispatch(document, ".uno:Color", "", 0, args48())

rem ----------------------------------------------------------------------
dim args49(0) as new com.sun.star.beans.PropertyValue
args49(0).Name = "VerticalJustification"
args49(0).Value = com.sun.star.table.CellVertJustify.CENTER

dispatcher.executeDispatch(document, ".uno:VerticalJustification", "", 0, args49())

rem ----------------------------------------------------------------------

End Sub

JohnSUN

Цитата: DennDarkk от 12 октября 2012, 18:45Это всё как-то усложняет задачу...
А трудностей не нужно бояться: всё, что нас не убивает, делает нас сильнее...

Цитата: DennDarkk от 12 октября 2012, 18:45... надо собственно только придумать как завершить мой упрощённый макрос...
Извини, но тут я - пас... Не то что придумать как завершить, я его даже до конца дочитать не смог, скучно стало...
Цитата: DennDarkk от 12 октября 2012, 18:45как-то так ил примерно так.
Нет, все-таки, наверное, примерно вот так (см. приложенный файл)
Макрос получился не намного длиннее, чем тот, что ты показал в последнем сообщении. Но работать с ним, думаю, будет проще.
Да и длиннее-то он только из-за комментариев. Думаю, несколько глюков в коде еще осталось. Так что будешь отлаживать - почитай как это сделано. Глядишь, и сам когда-нибудь кому-нибудь поможешь...

[вложение удалено Администратором]
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

DennDarkk

#8
К сожалению это не тот вариант, он меняет значения непосредственно в оригинале и нет инфо (в самом документе) сколько было до изменения, сколько составила разница, и по каждой позиции выставлять в документе быстрее, чем в этой форме - сперва циферки потом мышкой на строке, буду думать как всё-таки сыграть от последнего значения в последнем столбике, если найду док 10-ти летней давности, я там когда-то простыню собирал из сотни файлов экселевских добавляя таблицы к последней строке ну и всякую ерунду ещё по ходу вычисляя. Ну и вероятно что-то полезное найду в Вашем макросе, даже наверняка найду, там действительно есть много комментариев.

JohnSUN

Цитата: DennDarkk от 20 октября 2012, 19:27
... он меняет значения непосредственно в оригинале и нет инфо (в самом документе) сколько было до изменения...
Уверен? Внимательно посмотрел?  ;D
Попробуй Ctrl+PgUp и Ctrl+PgDown в уже обработанной книге.
Или поставь "галку" в Сервис-Параметры-Calc-Вид-Окно-Ярлычки листов и после этого

Цитата: DennDarkk от 20 октября 2012, 19:27сколько составила разница
А надо обязательно? Будешь печатать или просто глазами смотреть?
Если надо, то дописать одну формулу на исходный лист - это одна строка кода...
Цитата: DennDarkk от 20 октября 2012, 19:27и по каждой позиции выставлять в документе быстрее, чем в этой форме - сперва циферки потом мышкой на строке
А ты мышку-то отложи в сторону... Стрелки вверх-вниз (чтобы выбрать строку в списке), Tab (чтобы перепрыгнуть в поле с новой ценой), изменил и опять Tab (вернулся в список)...
А так-то, конечно, ты прав - без нормального элемента управления Таблица бэйсик сильно ограничивает возможности диалогов...
Цитата: DennDarkk от 20 октября 2012, 19:27буду думать как всё-таки сыграть от последнего значения в последнем столбике
Да нет проблем! Вот только последние столбики в новой накладной и в уже обработанной будут разными... Гляди, не запусти макрос повторно.  ;)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

DennDarkk

А вот тут прочитал про "даблкликнуть" на ячейке с формулой и она автоматом растягивается как для моих документов до последней ячейки перед автосуммой - в макросе эту функцию как включить?

JohnSUN

Ты имеешь в виду с помощью Диспетчера? Эта команда называется .uno:AutoFill. У нее всего один параметр - адрес конечной ячейки (строковый) - EndCell.
То есть как-то так:
dim Args(0) as new com.sun.star.beans.PropertyValue
rem Перейти в ячейку A2
Args(0).Name = "ToPoint"
Args(0).Value = "$A$2"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, Args())
rem Вписать формулу =<предыдущая ячейка>+1
Args(0).Name = "StringName"
Args(0).Value = "=A1+1"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, Args())
rem Залить этой формулой ячейки до A100 включительно
Args(0).Name = "EndCell"
Args(0).Value = "A100"
dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, Args())

А в нормальном программировании используется метод fillAuto(<в какую сторону>,<на сколько>)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

DennDarkk

Не, шо значит "Залить этой формулой ячейки до A100 включительно" - это и так в моём просто-макросе делается, а при "даблклике" заливается только до той ячейки, где я потом первую автосумму ставлю.

JohnSUN

#13
Путаешь... Не "до той ячейки, где я потом первую автосумму ставлю", а "если ячейка слева от текущей ячейки не пустая, то на вся длину колонки слева, иначе если ячейка справа от текущей ячейки не пустая, то на вся длину колонки справа, иначе ничего не растягивать"

(На самом деле там чуток сложнее - учитывается ячейка ниже текущей и еще несколько факторов)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

DennDarkk

#14
Не, почему-то (или я чего неправильно делаю) растягивается до 100-й строки. Вот эта запись меня смущает


rem Вписать формулу =<предыдущая ячейка>+1
Args(0).Name = "StringName"
Args(0).Value = "=A1+1" - это для примера или именно такой должна быть запись в макросе?
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, Args())