Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Макрос / 10 сообщений из 10, страница 1 из 1
28.08.2008, 13:04
    #35510671
ledirina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос
Мне надо написать макрос, который считает AVERAGE в поле в таблице Word,
и если это значение не совпадает с табличным рисует его красным!

Помогите!
...
Рейтинг: 0 / 0
28.08.2008, 15:26
    #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
28.08.2008, 15:56
    #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
28.08.2008, 16:22
    #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
28.08.2008, 16:29
    #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
28.08.2008, 17:18
    #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
04.09.2008, 11:07
    #35521862
ledirina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос
Selection.InsertFormula Formula:="=SUM(ABOVE)-4", NumberFormat:="0,00"
а можно ли значение суммы записать в переменную?
...
Рейтинг: 0 / 0
04.09.2008, 11:55
    #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
04.09.2008, 16:46
    #35523009
ledirina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос
да, спасибо...а я не додумалась, как можно вписать формулу
...
Рейтинг: 0 / 0
09.09.2008, 17:33
    #35530454
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос
> Автор: ledirina
> Дык, я ж описала свои переменные...почему ж у меня SS Variant


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

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

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


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