Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Задал шеф задачку... Добавлено: 18.03.06 14:35  

Автор вопроса:  azot | Web-сайт: baxter.promodj.ru
в 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-сайт: baxter.promodj.ru
 Профиль | | #2
Добавлено: 18.03.06 16:49
Проблема в организации цикла... Я не могу ни как его правильно оформить...

Ответить

Номер ответа: 3
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #3 Добавлено: 18.03.06 17:21
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  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
То есть наоборот.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  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-сайт: baxter.promodj.ru
 Профиль | | #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.


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  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-сайт: baxter.promodj.ru
 Профиль | | #8
Добавлено: 18.03.06 19:46
столбец D - range("d:d";)

Ответить

Номер ответа: 9
Автор ответа:
 azot



Вопросов: 1
Ответов: 5
 Web-сайт: baxter.promodj.ru
 Профиль | | #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-сайт: baxter.promodj.ru
 Профиль | | #11
Добавлено: 19.03.06 11:05
спасибо за помощь, но вобще-то я 3D-графикой занимаюсь. http://www.vbnet.ru/forum/images/110.gif
А шефу на это положить...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам