Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2012, 16:28   #1
andrew__86
 
Регистрация: 23.01.2012
Сообщений: 8
По умолчанию Автосумма

Приветствую всех. Нужно сделать в ворде автосумму. Чтобы посчитать например весь столбец можно с помощью Selection.InsertFormula Formula:="=SUM(ABOVE)", NumberFormat:="". Вопрос в том, как сделать чтобы считались только выделенные ячейки?
andrew__86 вне форума Ответить с цитированием
Старый 26.01.2012, 16:42   #2
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,060
По умолчанию

В ворде таблица проходим по всем ячейкам, если выделено, значит она наша
считываем в память заносим число и двигаемся дальше
Ципихович Эндрю на форуме Ответить с цитированием
Старый 26.01.2012, 17:07   #3
andrew__86
 
Регистрация: 23.01.2012
Сообщений: 8
По умолчанию

Тоесть нужен цикл?
andrew__86 вне форума Ответить с цитированием
Старый 26.01.2012, 19:10   #4
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,060
По умолчанию

естественно
Ципихович Эндрю на форуме Ответить с цитированием
Старый 27.01.2012, 05:26   #5
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Если ячейки выделены не подряд, то не получится, т.к. макросом нельзя получить список этих ячеек или, перебирая, определить, что ячейка выбрана. А если ячейки выбраны подряд, тогда можно так:
Код:
Sub SelCellsSum()
  Dim Rng As Range
  Dim i As Long, j As Long, k As String
  i = Selection.Cells(1).RowIndex
  j = Selection.Cells(Selection.Cells.Count).RowIndex
  k = Chr(64 + Selection.Columns.Last.Index)
  Set Rng = Selection.Columns.Last.Cells(Selection.Columns.Last.Cells.Count).Range
  Rng.Delete
  Rng.Collapse wdCollapseStart
  ActiveDocument.Fields.Add Rng, wdFieldEmpty, "=SUM(" & k & i & ":" & k & j & ")"
End Sub
Формула будет вставлена в последнюю ячейку столбца, в котором находятся выбранные ячейки. Работать будет для таблиц с не более, чем с 26-ю столбцами.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 27.01.2012, 05:29   #6
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,060
По умолчанию

>Если ячейки выделены не подряд, то не получится
А что можете их выделить не подряд?
Ципихович Эндрю на форуме Ответить с цитированием
Старый 27.01.2012, 06:32   #7
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Конечно, могу. С зажатым Ctrl
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 27.01.2012, 10:33   #8
andrew__86
 
Регистрация: 23.01.2012
Сообщений: 8
По умолчанию

i - первая ячейка j - последняя, а что делает код написанный дальше, как считается сумма, по идее должен быть цикл?
И ещё, что изменить в коде, чтобы считались ячейки в строке?
andrew__86 вне форума Ответить с цитированием
Старый 28.01.2012, 00:41   #9
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Никакого цикла. Сумма, как и раньше, считается формулой. Например, SUM(A1:A4) посчитает сумму первых четырёх ячеек первого столбца.
немного изменю. Теперь будет считать и по строкам и/или по столбцам, в зависимости от выбранных ячеек
Код:
Sub SelCellsSum()
  Dim Rng As Range
  Dim i As Long, j As Long, k As String, n As String
  i = Selection.Cells(1).RowIndex
  j = Selection.Cells(Selection.Cells.Count).RowIndex
  k = Chr(64 + Selection.Columns.First.Index)
  n = Chr(64 + Selection.Columns.Last.Index)
  'Ячейка для вывода результата.
  If Selection.Columns.Count = 1 Then
    'Если выбран один столбец, то в последнюю ячейку столбца
    Set Rng = Selection.Columns.Last.Cells(Selection.Columns.Last.Cells.Count).Range
  ElseIf Selection.Rows.Count = 1 Then
    'Если выбрана одна строка, то в последнюю ячейку строки
    Set Rng = Selection.Rows.Last.Cells(Selection.Rows.Last.Cells.Count).Range
  Else
    'Если выбрано несколько строк и столбцов, то в последнюю ячейку таблицы.
    Set Rng = Selection.Tables(1).Range.Cells(Selection.Tables(1).Range.Cells.Count).Range
  End If
  Rng.Delete
  Rng.Collapse wdCollapseStart
  'Формула для вычисления суммы диапазона
  ActiveDocument.Fields.Add Rng, wdFieldEmpty, "=SUM(" & k & i & ":" & n & j & ")"
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 28.01.2012, 12:26   #10
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,060
По умолчанию

было
4
46
53
23
Последнюю в столбце он стёр и написал сумму без последней = 103
Непорядок
Ципихович Эндрю на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автосумма "динамическая" (значения берутся с разных листов) AKSENOV048 Microsoft Office Excel 2 22.09.2011 13:26
Автосумма(Си) kilgoreq Помощь студентам 2 04.11.2010 20:20