powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Обновление данных листа после изменения ComboBox
5 сообщений из 5, страница 1 из 1
Обновление данных листа после изменения ComboBox
    #38956827
VadimSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На листе имеются ячейки 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
Обновление данных листа после изменения ComboBox
    #38956951
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При связи контрола с ячейкой листа через свойство LinkedCell событие листа Worksheet_Change не возникает.
Но можно вызвать код обработки события принудительно из Sub ComboBox2_KeyDown таким образом:
Worksheet_Change Range(ComboBox2.LinkedCell)
...
Рейтинг: 0 / 0
Обновление данных листа после изменения ComboBox
    #38957173
VadimSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZVI, а как это сделать на моем примере
...
Рейтинг: 0 / 0
Обновление данных листа после изменения ComboBox
    #38957628
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В процедуре ComboBox2_KeyDown нужно добавить строку
Worksheet_Change Range(ComboBox2.LinkedCell) перед End With или после End With, в зависимости от того, что ожидается.
...
Рейтинг: 0 / 0
Обновление данных листа после изменения ComboBox
    #38957748
VadimSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использовал другой вариант. Все работает как надо
Код: 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
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Обновление данных листа после изменения ComboBox
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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