Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: VBA MS Office

Программирования для MS Office кроме ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обновление данных листа после изменения ComboBox
 
 автор: Vadim Sh   (12.05.2015 в 19:15)   личное сообщение
67 Кб.
 
 

При обновлении данных ФИО лист автоматически переименовывается, листы сортируются и обновляется оглавление листов.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$G$1" Or Target.Address = "$I$1" Or Target.Address = "$K$1" Then
If Range("N1").Value <> "" Then
If Len(Range("N1").Value) < 30 Then
Target.Parent.Name = Range("N1").Value
End If
End If
End If

Dim i As Integer, j As Integer
For i = 1 To Sheets.Count - 1
For j = i + 1 To Sheets.Count
If UCase(Sheets(i).Name) > UCase(Sheets(j).Name) Then
Sheets(j).Move before:=Sheets(i)
End If
Next j
Next i
End Sub

Private Sub ComboBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case 13
With Sheets("!!!Оглавление").Range("Имена")
If ComboBox2.ListIndex = -1 Then .Offset(.Rows.Count).Resize(1) = ComboBox2.Text
End With
End Select
End Sub

Добавил поле со списком ComboBox, связанное с ячейкой имени с возможностью подстановки и добавления новых имен. Но при изменении ComboBox2 листы не переименовывается, не сортируются и не обновляется оглавление. Подскажите пожалуйста чего не хватает для обновления.









  Ответить  
 
 автор: pashulka   (12.05.2015 в 20:08)   личное сообщение
 
 

Вернитесь к своему первоначальному варианту, т.е. сортировка листов - отдельная процедура Sort_Sheets() и просто вызывайте этот макрос, по мере необходимости (из событий Worksheet_Change и ComboBox2_KeyDown)

P.S. Если же Вас удивляет, что изменение данных в ComboBox2 не вызывает событие Worksheet_Change, то причина этого безобразия кроется в использовании свойства LincedCell ( которое имеет свои особенности, например, приводит к вызову события Worksheet_Calculate )

P.P.S. Вместо Target.Parent.Name можно написать более лаконичное Me.Name или даже просто Name

  Ответить  
 
 автор: Vadim Sh   (13.05.2015 в 16:52)   личное сообщение
62 Кб.
 
 

Другой вариант. Все работает как надо
Private Sub ComboBox2_Change()
bla ("$I$1")
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$G$1" Or Target.Address = "$I$1" Or Target.Address = "$K$1" Then
bla (Target.Address)
End If

End Sub

Private Sub ComboBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case 13
With Sheets("!!!Оглавление").Range("Имена")
If ComboBox2.ListIndex = -1 Then .Offset(.Rows.Count).Resize(1) = ComboBox2.Text
End With
End Select
End Sub

Sub bla(addr As String)
If Range("N1").Value <> "" Then
If Len(Range("N1").Value) < 30 Then
If Range(addr).Parent.Name = Range("N1").Value Then Exit Sub
[color=red] Range(addr).Parent.Name = Range("N1").Value[/color]
End If
End If

Dim i As Integer, j As Integer
For i = 1 To Sheets.Count - 1
For j = i + 1 To Sheets.Count
If UCase(Sheets(i).Name) > UCase(Sheets(j).Name) Then
Sheets(j).Move before:=Sheets(i)
End If
Next j
Next i
End Sub
Но выдает ошибку при копировании листа:
Run-time error '1004'.
Нельзя присвоить листу имя, совподающее с именем другого листа, библиотеки объектов или книги, на которую ссылается VisualBasic.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList