powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Макрос
10 сообщений из 10, страница 1 из 1
Макрос
    #35510671
ledirina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне надо написать макрос, который считает AVERAGE в поле в таблице Word,
и если это значение не совпадает с табличным рисует его красным!

Помогите!
...
Рейтинг: 0 / 0
Макрос
    #35511217
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: ledirina
> Мне надо написать макрос, который считает AVERAGE в поле в таблице Word,
> и если это значение не совпадает с табличным рисует его красным!

Очень информативно!
В нужном документе ищеш интересующую таблицу, по каким критериям искать тебе виднее.
Потом делаешь цикл по интересующему столбцу/строке, сумируешь значения и по окончанию
делишь на количество значений. Сравниваешь с исходным результатом и если нужно красишь.
Примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub CheckAverageInTable()
Dim tb As Table
Dim dRez As Double
Dim lSum As Double
Dim i As Long
Const COLUMN_CHEK =  1  ' Проверяю значения первого столбца
lSum =  0 
Set tb = ActiveDocument.Tables( 1 )
For i =  1  To tb.Rows.Count -  1  ' Предполагаю что результат в последней строке

    lSum = lSum + Val(tb.Cell(i, COLUMN_CHEK).Range.Text) 'Если в столбце не целые 
значения, то нужно поменять функцию приведеня типа
Next i
dRez = lSum / (tb.Rows.Count -  1 )
If dRez <> Val(tb.Cell(tb.Rows.Count, COLUMN_CHEK).Range.Text) Then
    tb.Cell(tb.Rows.Count, COLUMN_CHEK).Range.HighlightColorIndex = wdRed
End If
End Sub
>
> Помогите!

;)

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Макрос
    #35511305
ledirina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой...спасибочки, а я вот так сделала!

Dim ss, sss As String
Dim ii, y, z As Integer

y = 12
z = 1

For ii = 4 To Selection.Tables(z).Rows.Count -1

Selection.Tables(z).Rows(ii).Select
ss = Selection.Tables(z).Cell(ii, y).Range.Text
Selection.Tables(z).Cell(ii, y).Range.Delete
Selection.InsertFormula Formula:="=AVERAGE(LEFT)", NumberFormat:=""
sss = Selection.Tables(z).Cell(ii, y).Range.Text
Selection.Tables(z).Cell(ii, y).Range.Text = ss
If ss <> sss Then
Selection.Tables(z).Cell(ii, y).Range.Font.Color = wdColorRed
Else
Selection.Tables(z).Cell(ii, y).Range.Font.Color = wdColorBlack

' MsgBox (sss)
End If
Next
' çàïèñü èòîãà
Selection.Tables(z).Rows(ii).Select
ss = Selection.Tables(z).Cell(ii, y).Range.Text
Selection.Tables(z).Cell(ii, y).Range.Delete
Selection.InsertFormula Formula:="=SUM(ABOVE)", NumberFormat:=""
sss = Selection.Tables(z).Cell(ii, y).Range.Text
Selection.Tables(z).Cell(ii, y).Range.Text = ss
If ss <> sss Then
Selection.Tables(z).Cell(ii, y).Range.Font.Color = wdColorRed
End If
End Sub
...
Рейтинг: 0 / 0
Макрос
    #35511384
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: ledirina
> ой...спасибочки, а я вот так сделала!
>
> Dim ss, sss As String
> Dim ii, y, z As Integer

На будущее, после каждой переменной указывай As Тип. Иначе у тебя ss, ii, y имеют тип
Variant, sss - String, a z - Integer

> ss = Selection.Tables(z).Cell(ii, y).Range.Text
> Selection.Tables(z).Cell(ii, y).Range.Delete
> Selection.InsertFormula Formula:="=AVERAGE(LEFT)", NumberFormat:=""
> sss = Selection.Tables(z).Cell(ii, y).Range.Text

Можно и так :)

З.Ы. Нажми "Цитировать" на моем сообщении и посмотри теги оформления кода

--
С уважением Горбонос Игорь Леонидович




Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Макрос
    #35511409
ledirina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
> Автор: ledirina
> ой...спасибочки, а я вот так сделала!
>
> Dim ss, sss As String
> Dim ii, y, z As Integer

На будущее, после каждой переменной указывай As Тип. Иначе у тебя ss, ii, y имеют тип
Variant, sss - String, a z - Integer

> ss = Selection.Tables(z).Cell(ii, y).Range.Text
> Selection.Tables(z).Cell(ii, y).Range.Delete
> Selection.InsertFormula Formula:="=AVERAGE(LEFT)", NumberFormat:=""
> sss = Selection.Tables(z).Cell(ii, y).Range.Text

Можно и так :)

З.Ы. Нажми "Цитировать" на моем сообщении и посмотри теги оформления кода

--
С уважением Горбонос Игорь Леонидович


Дык, я ж описала свои переменные...почему ж у меня SS Variant
А я вот бьюсь теперь, после значения в ячейку, добавляет абзац...Таблица плывет



Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Макрос
    #35511546
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: ledirina
>
> Дык, я ж описала свои переменные...почему ж у меня SS Variant
Потому что она будет String только в таком случае:
Dim ss As String, sss As String
Dim ii As Integer, y As Integer, z As Integer
а в твоем случае тип указан только для последней переменной в списке, а для первых
используется "умолчательный тип данных" - Variant

> А я вот бьюсь теперь, после значения в ячейку, добавляет абзац...Таблица
> плывет

Это потому, что Selection.Tables(z).Cell(ii, y).Range.Text в значении уже есть один символ
абзаца, при удалении символ абзаца все равно остается, а при вставке их получается уже 2
символа. Попробуй или использовать Val или отрезать последний символ

>
>


Переборщила с цитированием ;))
--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Макрос
    #35521862
ledirina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Selection.InsertFormula Formula:="=SUM(ABOVE)-4", NumberFormat:="0,00"
а можно ли значение суммы записать в переменную?
...
Рейтинг: 0 / 0
Макрос
    #35522054
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: ledirina
> Selection.InsertFormula Formula:="=SUM(ABOVE)-4", NumberFormat:="0,00"
> а можно ли значение суммы записать в переменную?


Наверное нельзя, а ты не пробовала формулу присваивать не через Selection.InsertFormula, а
использовать:
[src vba]ss = Selection.Tables(z).Cell(ii, y).Range.Text
Selection.Tables(z).Cell(ii, y)).Formula Formula:="=AVERAGE(LEFT)", NumberFormat:=""
'.Range.Delete
'Selection.InsertFormula Formula:="=AVERAGE(LEFT)", NumberFormat:=""
sss = Selection.Tables(z).Cell(ii, y).Range.Text[src]

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Макрос
    #35523009
ledirina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, спасибо...а я не додумалась, как можно вписать формулу
...
Рейтинг: 0 / 0
Макрос
    #35530454
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: ledirina
> Дык, я ж описала свои переменные...почему ж у меня SS Variant


Кстати, вот статейка
"Статья Оптимизация кода в Visual Basic", почитай и пусть перебродит.

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Макрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]