Суммирование ячеек с удалением

Автор Oldsav, 2 ноября 2017, 10:40

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

Oldsav

Добрый день, возникла необходимость в быстром суммировании двух ячеек с записью суммы в одну и удалением данных из другой.
Пример:
В ячейке А1 число 2;
В ячейке А2 число 2;
Удерживая горячую клавишу(например альт) кликаем по А1 затем по А2, в результате получаем в А2 сумму т.е 4, а из А1 данные удаляются.
Итог:
В ячейке А1 пусто;
В ячейке А2 число 4;

bormant

#1
Встали в A1, нажали Ctrl+X,
встали в A2, нажали Ctrl+Shift+V, выбрали справа "(*) Сложить", Enter. (При последующих вызовах эта настройка не сбрасывается, достаточно будет Ctrl+Shift+V, Enter).
Автору на яд. Поддержать форум.

Oldsav

А можно это как то через макрос? В екселе использовал такой:
Лист1:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
On Error Resume Next
If KeyPressed(VK_CONTROL) Then
    If Not fCell Is Nothing Then
        Target.Areas(Target.Count) = Target.Areas(Target.Count) + fCell
        fCell.ClearContents
        Set fCell = Target.Areas(Target.Count)
    End If
Else
        Set fCell = Target
End If
Application.ScreenUpdating = True
End Sub




Модуль1:
'============= Функции для определения нажатой клавиши =================================
Public Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As VirtualKeys) As Integer
Public Enum VirtualKeys    ' Virtual Keys, Standard Set
    VK_CONTROL = &H11
End Enum
'==========================================================================================
Public fCell As Range

Public Function KeyPressed(ByVal VKey As VirtualKeys) As Boolean
    KeyPressed = IIf(GetKeyState(VKey) < 0, True, False)
End Function

JohnSUN

О, ну это ж в Экселе...

А здесь можно просто запустить макрорекордер и записать что-то вроде
Sub AddToOther
Dim document   as object
Dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dispatcher.executeDispatch(document, ".uno:Cut", "", 0, Array()) ' Вырезали текущую ячейку (или несколько?)

dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "By" : args2(0).Value = 1
args2(1).Name = "Sel" : args2(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args2()) ' Сдвинулись вправо

rem Специальная вставка - с сложением
dim args3(4) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Flags" : args3(0).Value = "SVD"
args3(1).Name = "FormulaCommand" : args3(1).Value = 1
args3(2).Name = "SkipEmptyCells" : args3(2).Value = false
args3(3).Name = "AsLink" : args3(3).Value = false
args3(4).Name = "MoveMode" : args3(4).Value = 4
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args3())

dispatcher.executeDispatch(document, ".uno:deselect", "", 0, args3()) ' Снять выделение

End Sub

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

Oldsav

#4
Цитата: JohnSUN от  3 ноября 2017, 09:00
записать что-то вроде

Отлично, то что нужно.
А вот как сделать что бы вместо перемещения со сложением вправо(dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args2()) ' ) было перемещение в ячейку в которой установлен курсор мыши?

economist

Ума не приложу - в каких случаях подобное поведение нужно?
Есть формулы, функции, условное форматирование. Можно просто обесцветить шрифт. Можно скрыть ненужный столбец.   
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Oldsav

Цитата: economist от  3 ноября 2017, 14:51
Ума не приложу - в каких случаях подобное поведение нужно?
Есть формулы, функции, условное форматирование. Можно просто обесцветить шрифт. Можно скрыть ненужный столбец.   
Ненужный столбец скрыть невозможно, а вот данные из одной ячейки нужно переместить в другую без потери последней. Те сложить данные: пример есть круг ф20ст3; и есть круг ф20ст20, нужно нормы с первого перекинуть на второй, но во втором тоже есть данные и они не должны потерятся. Тк материалы взаимозаменяемые