Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

21 Сентябрь 2017, 11:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice  без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: [Решено] Формулы заменить на макрос.  (Прочитано 992 раз)
0 Пользователей и 1 Гость смотрят эту тему.
bsi
Новичок
*
Offline Offline

Сообщений: 41


« Стартовое сообщение: 1 Февраль 2017, 11:06 »

Привет форумчане. Так как знаний  у меня в программировании нет, прошу строго не судить.
Во вложенном файле в стобцах А, I и J есть формулы. Если у кого-то есть свободное время и желание, то прошу, результат работы формул, сделать макросом. Всем спасибо.

* Вычисление.ods (15.94 Кб - загружено 10 раз.)
« Последнее редактирование: 25 Февраль 2017, 17:48 от bsi » Записан
economist
Ветеран
*****
Online Online

Сообщений: 684


« Ответ #1: 1 Февраль 2017, 12:12 »

bsi - практически всегда правильнее уходить от программирования в сторону использования формул.
Если тут перфекционизм - просто защитите ячейки, скрыв формулу - и НИКТО не догадается, что считает результат не макрос, а формула.

Грамотно написанная формула на защищенном листе - практически неубиваема никакими действиями. Защита листа - должна быть на любой серьезный документ, тупо от кривых рук. У меня есть доплата коллегам за грамотно защищенные ими документы, понемногу работает... 
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
bsi
Новичок
*
Offline Offline

Сообщений: 41


« Ответ #2: 1 Февраль 2017, 12:47 »

Наоборот я хочу уйти от варианта с защитой листа. Меня просили это сделать для великовозрастных женщин, которые очень плохо знают комп. В Excel я это сделал, но у них на компах стоит LO, а тут я в макросах ноль. Длина этой таблицы будет выходить за пределы диапазона, указанного в этом файле, диапазон тут  я указал как пример. Поэтому хотелось бы все макросом.
Записан
rami
Гуру
*******
Online Online

Пол: Мужской
Сообщений: 2 181


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #3: 1 Февраль 2017, 16:36 »

Меня просили это сделать для великовозрастных женщин, которые очень плохо знают комп.
Но они хорошо знают как... Шокирован ой, я просто боюсь за вас.

Вот вариант, но я не уверен, что это правильный путь.

* Вычисление1.ods (15.65 Кб - загружено 8 раз.)
Записан

bsi
Новичок
*
Offline Offline

Сообщений: 41


« Ответ #4: 1 Февраль 2017, 18:11 »

Да, все вроде хорошо, но еще бы так : если в столбце G удаляем данные, то столбцах H, I, J данные доже удалялись, сейчас данные удаляются только в I и J. В Excele у меня вот такой код
Код:
For i = 6 To Range("A" & Rows.Count).End(xlUp).Row
If Cells(i, "G") <> 0 Then
Cells(i, "j") = Cells(i, "G") / 100 * Cells(i, "H") - (Cells(i, "G") / 100 * Cells(i, "H") * 0.13)
Cells(i, "I") = Cells(i, "G") - Cells(i, "J")
Else
Cells(i, "j") = ""
Cells(i, "I") = ""
Cells(i, "H") = ""
End If
Next
Спасибо большое. Как бы в этот макрос вместо формул в столбце А автонумерацию сделать кодом ?
Записан
bsi
Новичок
*
Offline Offline

Сообщений: 41


« Ответ #5: 1 Февраль 2017, 19:30 »

Цитата:
если в столбце G удаляем данные, то столбцах H, I, J данные доже удалялись, сейчас данные удаляются только в I и J
С этим я разобрался и исправил. Осталось заменить формулы на код в столбце А.
Записан
rami
Гуру
*******
Online Online

Пол: Мужской
Сообщений: 2 181


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #6: 1 Февраль 2017, 21:43 »

Осталось заменить формулы на код в столбце А.
Попробуйте добавить в Case 1 строку oEvent.Spreadsheet.getCellByPosition(0,y).Value=y-4      'номер записи в ячейке A:
Код:
Case 1 'Колонка B - значение меняем с помощью функции Upper
oEvent.Spreadsheet.getCellByPosition(0,y).Value=y-4 'номер записи в ячейке A
oEvent.setString(oFuncAcc.callFunction("Upper", Array(oEvent.String)))
Записан

bsi
Новичок
*
Offline Offline

Сообщений: 41


« Ответ #7: 2 Февраль 2017, 09:41 »

Цитата:
Попробуйте добавить в Case 1 строку oEvent.Spreadsheet.getCellByPosition(0,y).Value=y-4
Да нумерация работает, но если внутри заполненного диапазона в столбце В удалить данные или удалить строку внутри заполненного диапазона, то пересчет нумерации не происходит. С формулой IF(ISBLANK(B17);"";COUNTA($B$6:B17)) этого недостатка нет. В Excel у меня такой код
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Автонумерация
Range("A7:A" & Range("B" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC2="""","""",MAX(R1C1:R[-1]C)+1)"
Worksheets("Лист1").Range("A6").Value = 1 End Sub
Записан
rami
Гуру
*******
Online Online

Пол: Мужской
Сообщений: 2 181


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #8: 2 Февраль 2017, 09:50 »

Да нумерация работает, но если внутри заполненного диапазона в столбце В удалить данные или удалить строку внутри заполненного диапазона, то пересчет нумерации не происходит. С формулой IF(ISBLANK(B17);"";COUNTA($B$6:B17)) этого недостатка нет.
У формул есть механизм "зависимых" и "влияющих" ячеек, при изменении ячейки происходит перерасчёт всех связанных формул. В макросе это будет слишком громоздко, нужно будет пересчитывать весь диапазон.
Записан

bsi
Новичок
*
Offline Offline

Сообщений: 41


« Ответ #9: 2 Февраль 2017, 10:36 »

Цитата:
В макросе это будет слишком громоздко
Плоховато.
И еще один вопрос по этой таблице. Есть ли возможность ту сделать, чтобы при активации ячейки в столбце В раскладка клавиатуры автоматом переключалась на латиницу, а при переходе на столбец С вновь включалась кириллица? В Excele это делал так
Код:
Private Declare Function ActivateKeyboardLayout _
    Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long
Const kb_lay_ru As Long = 68748313, kb_lay_en As Long = 67699721
Sub ВключитьРусскуюРаскладку()
    ' Переключить на русский язык
    x = ActivateKeyboardLayout&(kb_lay_ru, 0)
End Sub
Sub ВключитьАнглийскуюРаскладку()
    ' Переключить на английский язык
    x = ActivateKeyboardLayout&(kb_lay_en, 0)
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  'переключение раскладки
    Select Case Target.Column    ' в зависимости от номера столбца активной ячеки
        Case 2: 
            ВключитьАнглийскуюРаскладку
        Case 3:
            ВключитьРусскуюРаскладку
        Case Else:    ' ничего не делаем (оставляем текущую раскладку)
    End Select
End Sub
.
Огромное спасибо за помощь.
Записан
rami
Гуру
*******
Online Online

Пол: Мужской
Сообщений: 2 181


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #10: 2 Февраль 2017, 11:51 »

И еще один вопрос по этой таблице. Есть ли возможность ту сделать, чтобы при активации ячейки в столбце В раскладка клавиатуры автоматом переключалась на латиницу, а при переходе на столбец С вновь включалась кириллица?
Это обсуждали в отдельной теме, но я ничем помочь не могу, у меня Мак и нет ни Excel, ни соответствующих библиотек.
Записан

bsi
Новичок
*
Offline Offline

Сообщений: 41


« Ответ #11: 2 Февраль 2017, 11:56 »

Ещё раз спасибо. Удачного дня.
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!