Страница: 1 |
Страница: 1 |
Вопрос: Задал шеф задачку...
Добавлено: 18.03.06 14:35
Автор вопроса: azot | Web-сайт:
в excel 2002. есть форма. есть лист1. есть столбец A c данными в яйчейках.
задача шефа:
при наведении мышки на яйчеку в столбце A, в появившемся примечании должна появиться сумма всех выше стоящих яйчеек. т.е. если мышку навели на яйчеку А12, то во всплывающем примечании сумма (A1:A12). все должно работать при изменении любой из яйчеек столбца A.
помогите, а то до зарплаты не доживу.
непосредственно из excel'я и будут вносится изменения. надо что бы работало непосредственно в excel'е.
мои наметки:
в Woprksheets_Change ...
...
Range("a5").Comment.Text Text:=Str(Range("a5").Value + Range("a6").Value)
Range("a7").Comment.Text Text:=Str(Range("a5").Value + Range("a6").Value + Range("a7").Value)
Range("a8").Comment.Text Text:=Str(Range("a5").Value + Range("a6").Value + Range("a7").Value + Range("a8").Value)
и т.д.
или добавить комментарий если его нет в этой яйчейке и это надо запихнуть в цикл...
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #1
Добавлено: 18.03.06 15:42
Используй встроенную функцию SUM, а в качестве параметра задашь необходимый тебе диапазон ячеек..
Номер ответа: 2
Автор ответа:
azot
Вопросов: 1
Ответов: 5
Web-сайт:
Профиль | | #2
Добавлено: 18.03.06 16:49
Проблема в организации цикла... Я не могу ни как его правильно оформить...
Номер ответа: 3
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #3
Добавлено: 18.03.06 17:21
Dim r As Range, i As Long
Set r = Application.Intersect(Target, Me.Columns(1))
If Not r Is Nothing Then
For i = 1 To r.Rows(r.Rows.Count).Row
If Not Me.Cells(i, 1).Comment Is Nothing Then Me.Cells(i, 1).Comment.Delete
Me.Cells(i, 1).AddComment CStr(Application.WorksheetFunction.Sum(Me.Range(Me.Cells(1, 1), Me.Cells(i, 1))))
Next
End If
End Sub
Номер ответа: 4
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #4
Добавлено: 18.03.06 17:30
То есть наоборот.
Dim r As Range, i As Long
Set r = Application.Intersect(Target, Me.Columns(1))
If Not r Is Nothing Then
For i = r.Rows(r.Rows.Count).Row To Me.Cells(r.Rows(r.Rows.Count).Row, 1).End(xlDown).Row
If Not Me.Cells(i, 1).Comment Is Nothing Then Me.Cells(i, 1).Comment.Delete
Me.Cells(i, 1).AddComment CStr(Application.WorksheetFunction.Sum(Me.Range(Me.Cells(1, 1), Me.Cells(i, 1))))
Next
End If
End Sub
Номер ответа: 5
Автор ответа:
azot
Вопросов: 1
Ответов: 5
Web-сайт:
Профиль | | #5
Добавлено: 18.03.06 18:26
1. было бы все хорошо, но при выполнении виснет excel...
2. если колонка на a, а к примеру d.
Номер ответа: 6
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #6
Добавлено: 18.03.06 19:04
1. Почему у меня нет?
2. А к примеру у колонки d номер какой?
Номер ответа: 7
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #7
Добавлено: 18.03.06 19:16
1. Потому что я тестил первый вариант, а не второй. А второй не виснет, он просто начинает пытаться повесить 65536 каментов, когда редактируется последняя заполненная ячейка столбца A.
Dim r As Range, i As Long
Set r = Application.Intersect(Target, Me.Columns(1))
If Not r Is Nothing Then
For i = r.Rows(r.Rows.Count).Row To Application.WorksheetFunction.Min(Me.Cells(1, 1).End(xlDown).Row, Me.Cells(1, 1).CurrentRegion.Rows.Count)
If Not Me.Cells(i, 1).Comment Is Nothing Then Me.Cells(i, 1).Comment.Delete
Me.Cells(i, 1).AddComment CStr(Application.WorksheetFunction.Sum(Me.Range(Me.Cells(1, 1), Me.Cells(i, 1))))
Next
End If
End Sub
Номер ответа: 8
Автор ответа:
azot
Вопросов: 1
Ответов: 5
Web-сайт:
Профиль | | #8
Добавлено: 18.03.06 19:46
столбец D - range("d:d"
Номер ответа: 9
Автор ответа:
azot
Вопросов: 1
Ответов: 5
Web-сайт:
Профиль | | #9
Добавлено: 18.03.06 19:59
Спасибо, последний вариант работает!
При изменении в столбце А данных все работает,но, если
пример:
в яйчеке 3 столбца A (А3) задана формула, к примеру =sum(b1:b5), то макрос работает не верно...
Остается еще одни вопрос: если нужно другой столбец, не А так сделать.
Номер ответа: 10
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #10
Добавлено: 19.03.06 05:50
Макрос работает верно. Вызывает вопрос только очерёдность срабатывания. Возможно, формула вычисляется после макроса. И тогда есть смысл вызывать calculate самому из тела макроса. Как вариант.
Если шеф задал задачку, значит он задал её сотруднику, который по идее такие задачки решает.
Если же указанный сотрудник не в состоянии заменить номер с 1 на 4, значит никакой он не сотрудник, решающий задачки, а в лучшем случае ученик среднего звена, получивший домашнее задание по теме, которую успешно прогулял.
Номер ответа: 11
Автор ответа:
azot
Вопросов: 1
Ответов: 5
Web-сайт:
Профиль | | #11
Добавлено: 19.03.06 11:05
спасибо за помощь, но вобще-то я 3D-графикой занимаюсь. http://www.vbnet.ru/forum/images/110.gif
А шефу на это положить...