Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Обновление данных листа после изменения ComboBox / 5 сообщений из 5, страница 1 из 1
12.05.2015, 19:11
    #38956827
VadimSh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных листа после изменения ComboBox
На листе имеются ячейки G1 (фамилия), K1 (имя), I1 (отчество), N1 (фамилия, инициалы). При обновлении любой из ячеек лист автоматически переименовывается, листы сортируются и обновляется оглавление листов.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
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


Модератор: Учимся использовать тэги оформления кода - FAQ

Добавил поле со списком ComboBox, связанное с K1 с возможностью подстановки и добавления новых имен. Но при изменении ComboBox2 листы не переименовывается, не сортируются и не обновляется оглавление. Подскажите пожалуйста чего не хватает для обновления.
...
Рейтинг: 0 / 0
13.05.2015, 02:46
    #38956951
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных листа после изменения ComboBox
При связи контрола с ячейкой листа через свойство LinkedCell событие листа Worksheet_Change не возникает.
Но можно вызвать код обработки события принудительно из Sub ComboBox2_KeyDown таким образом:
Worksheet_Change Range(ComboBox2.LinkedCell)
...
Рейтинг: 0 / 0
13.05.2015, 11:26
    #38957173
VadimSh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных листа после изменения ComboBox
ZVI, а как это сделать на моем примере
...
Рейтинг: 0 / 0
13.05.2015, 15:02
    #38957628
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных листа после изменения ComboBox
В процедуре ComboBox2_KeyDown нужно добавить строку
Worksheet_Change Range(ComboBox2.LinkedCell) перед End With или после End With, в зависимости от того, что ожидается.
...
Рейтинг: 0 / 0
13.05.2015, 16:42
    #38957748
VadimSh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных листа после изменения ComboBox
Использовал другой вариант. Все работает как надо
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
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


Но выдает ошибку на строчку
Код: vbnet
1.
Range(addr).Parent.Name = Range("N1").Value


при копировании листа:
Run-time error '1004'.
Нельзя присвоить листу имя, совподающее с именем другого листа, библиотеки объектов или книги, на которую ссылается VisualBasic.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Обновление данных листа после изменения ComboBox / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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