Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как подружить индекс строки с её значением в ListBox? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как подружить индекс строки с её значением в ListBox? (Макросы/Sub)
Как подружить индекс строки с её значением в ListBox?
Максим123 Дата: Понедельник, 30.01.2017, 12:58 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Всем здравствуйте!
Помогите пожалуйста в решении следующей задачки.
Не знаю правильно ли назвал тему. Проблем вот в чём.
На форме есть ListBox, значения в который заносятся из таблицы
согласно условию
[vba]
Код
If Worksheets("Лист1").Cells(i, 2) <> "да" Then
        UserForm1.ListBox1.AddItem Worksheets("Лист1").Cells(i, 1)
        End If
[/vba]
Далее значения из ListBoxа периодически необходимо удалять,
для этого на форму добавил кнопку, по клику на которую выбранные
значения из ListBoxа удаляются, а в таблице рядом со значени(ями)ем
удалённым(и) из ListBoxа должно отмечаться "да". Вот с этим "должно" я
бьюсь и всё ни как... Заранее спасибо за помощь.
К сообщению приложен файл: 32123.xlsm (20.3 Kb)
 
Ответить
СообщениеВсем здравствуйте!
Помогите пожалуйста в решении следующей задачки.
Не знаю правильно ли назвал тему. Проблем вот в чём.
На форме есть ListBox, значения в который заносятся из таблицы
согласно условию
[vba]
Код
If Worksheets("Лист1").Cells(i, 2) <> "да" Then
        UserForm1.ListBox1.AddItem Worksheets("Лист1").Cells(i, 1)
        End If
[/vba]
Далее значения из ListBoxа периодически необходимо удалять,
для этого на форму добавил кнопку, по клику на которую выбранные
значения из ListBoxа удаляются, а в таблице рядом со значени(ями)ем
удалённым(и) из ListBoxа должно отмечаться "да". Вот с этим "должно" я
бьюсь и всё ни как... Заранее спасибо за помощь.

Автор - Максим123
Дата добавления - 30.01.2017 в 12:58
K-SerJC Дата: Понедельник, 30.01.2017, 13:15 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
обратная связь не сохраняется, если только вы в коде предусмотрите массив, в котором будете хранить привязку номера строки и номер индекса добавленного элемента


Благими намерениями выстелена дорога в АД.
 
Ответить
Сообщениеобратная связь не сохраняется, если только вы в коде предусмотрите массив, в котором будете хранить привязку номера строки и номер индекса добавленного элемента

Автор - K-SerJC
Дата добавления - 30.01.2017 в 13:15
bmv98rus Дата: Понедельник, 30.01.2017, 13:26 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4108
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
Максим123,
[vba]
Код
Private Sub CommandButton1_Click()

Dim j As Variant

For j = UserForm1.ListBox1.ListCount - 1 To 0 Step -1
    If UserForm1.ListBox1.Selected(j) = True Then
        Set Mycell = Worksheets("Ëèñò1").Columns("A:A").Find(What:=UserForm1.ListBox1.List(j), LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, SearchFormat:=False)
        If Not Mycell Is Nothing Then Mycell.Offset(, 1).Value = "да"
       UserForm1.ListBox1.RemoveItem (j)
    End If

Next j
[/vba]


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Понедельник, 30.01.2017, 13:27
 
Ответить
СообщениеМаксим123,
[vba]
Код
Private Sub CommandButton1_Click()

Dim j As Variant

For j = UserForm1.ListBox1.ListCount - 1 To 0 Step -1
    If UserForm1.ListBox1.Selected(j) = True Then
        Set Mycell = Worksheets("Ëèñò1").Columns("A:A").Find(What:=UserForm1.ListBox1.List(j), LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, SearchFormat:=False)
        If Not Mycell Is Nothing Then Mycell.Offset(, 1).Value = "да"
       UserForm1.ListBox1.RemoveItem (j)
    End If

Next j
[/vba]

Автор - bmv98rus
Дата добавления - 30.01.2017 в 13:26
Максим123 Дата: Понедельник, 30.01.2017, 14:11 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Как раз первоначальная мысль и была сделать посредством поиска, но не хватило знаний и ума.)
bmv98rus спасибо за решение.
 
Ответить
СообщениеКак раз первоначальная мысль и была сделать посредством поиска, но не хватило знаний и ума.)
bmv98rus спасибо за решение.

Автор - Максим123
Дата добавления - 30.01.2017 в 14:11
K-SerJC Дата: Понедельник, 30.01.2017, 14:55 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
нюанс работы с поиском - он находит первую запись

т.е. в вашей таблице все значения должны быть уникальными, иначе да будет прописываться только возле первого.


Благими намерениями выстелена дорога в АД.
 
Ответить
Сообщениенюанс работы с поиском - он находит первую запись

т.е. в вашей таблице все значения должны быть уникальными, иначе да будет прописываться только возле первого.

Автор - K-SerJC
Дата добавления - 30.01.2017 в 14:55
bmv98rus Дата: Понедельник, 30.01.2017, 16:15 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4108
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
K-SerJC,

Это верно.

Максим123,

Если есть дубликаты, то можно предусмотреть продолжение поиска слежующего, если "да" уже стоит, но нужно ли - вам решать. В любом случае если будет
такое

то опрдеелить что это второй Сидоров, а не первый сложнее, хотя и можно. [vba]
Код
Private Sub CommandButton1_Click()
Dim j As Variant
For j = UserForm1.ListBox1.ListCount - 1 To 0 Step -1
    If UserForm1.ListBox1.Selected(j) = True Then
        Set aftercell = Range("A1")
        For i = 0 To j
            If UserForm1.ListBox1.List(i) = UserForm1.ListBox1.List(j) Then
                Set mycell = Nothing
                Set mycell = Worksheets("Лист1").Columns("A:A").Find(What:=UserForm1.ListBox1.List(j), After:=aftercell, LookIn:=xlFormulas, _
                    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, SearchFormat:=False)
                If Not mycell Is Nothing Then
                    Set aftercell = mycell
                    If mycell.Offset(, 1).Value = "да" Then i = i - 1
                End If
            End If
        Next i
        If Not mycell Is Nothing Then mycell.Offset(, 1).Value = "да"
        UserForm1.ListBox1.RemoveItem (j)
    End If
Next j
End Sub
[/vba]
К сообщению приложен файл: 9321532.jpg (37.8 Kb) · Copy_of_32123.xlsm (23.0 Kb)


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Понедельник, 30.01.2017, 16:29
 
Ответить
СообщениеK-SerJC,

Это верно.

Максим123,

Если есть дубликаты, то можно предусмотреть продолжение поиска слежующего, если "да" уже стоит, но нужно ли - вам решать. В любом случае если будет
такое

то опрдеелить что это второй Сидоров, а не первый сложнее, хотя и можно. [vba]
Код
Private Sub CommandButton1_Click()
Dim j As Variant
For j = UserForm1.ListBox1.ListCount - 1 To 0 Step -1
    If UserForm1.ListBox1.Selected(j) = True Then
        Set aftercell = Range("A1")
        For i = 0 To j
            If UserForm1.ListBox1.List(i) = UserForm1.ListBox1.List(j) Then
                Set mycell = Nothing
                Set mycell = Worksheets("Лист1").Columns("A:A").Find(What:=UserForm1.ListBox1.List(j), After:=aftercell, LookIn:=xlFormulas, _
                    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, SearchFormat:=False)
                If Not mycell Is Nothing Then
                    Set aftercell = mycell
                    If mycell.Offset(, 1).Value = "да" Then i = i - 1
                End If
            End If
        Next i
        If Not mycell Is Nothing Then mycell.Offset(, 1).Value = "да"
        UserForm1.ListBox1.RemoveItem (j)
    End If
Next j
End Sub
[/vba]

Автор - bmv98rus
Дата добавления - 30.01.2017 в 16:15
Максим123 Дата: Понедельник, 30.01.2017, 16:35 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
bmv98rus, ещё раз спасибо. Да действительно, такая проблема могла возникнуть.
 
Ответить
Сообщениеbmv98rus, ещё раз спасибо. Да действительно, такая проблема могла возникнуть.

Автор - Максим123
Дата добавления - 30.01.2017 в 16:35
Максим123 Дата: Понедельник, 30.01.2017, 17:31 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Возникла другая проблема, после переноса кода в основной документ выдал сообщение "переменная не определена " и выделяет
первую объектную переменную aftercell. Проверил несколько раз, всё вроде правильно, ни чего не пойму. В чём может быть причина?
 
Ответить
СообщениеВозникла другая проблема, после переноса кода в основной документ выдал сообщение "переменная не определена " и выделяет
первую объектную переменную aftercell. Проверил несколько раз, всё вроде правильно, ни чего не пойму. В чём может быть причина?

Автор - Максим123
Дата добавления - 30.01.2017 в 17:31
_Boroda_ Дата: Понедельник, 30.01.2017, 17:36 | Сообщение № 9
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Сотрите сверху строку кода (она сама там появилась, Вы не виноваты)
[vba]
Код
Option Explicit
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеСотрите сверху строку кода (она сама там появилась, Вы не виноваты)
[vba]
Код
Option Explicit
[/vba]

Автор - _Boroda_
Дата добавления - 30.01.2017 в 17:36
Pelena Дата: Понедельник, 30.01.2017, 17:38 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 19185
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Видимо, надо описать
[vba]
Код
Dim aftercell as Range
[/vba]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеВидимо, надо описать
[vba]
Код
Dim aftercell as Range
[/vba]

Автор - Pelena
Дата добавления - 30.01.2017 в 17:38
Максим123 Дата: Понедельник, 30.01.2017, 17:47 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Спасибо, помогло!)
 
Ответить
СообщениеСпасибо, помогло!)

Автор - Максим123
Дата добавления - 30.01.2017 в 17:47
Alex_ST Дата: Понедельник, 30.01.2017, 22:04 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3208
Репутация: 609 ±
Замечаний: 0% ±

2003
Сотрите … Option Explicit
Ай-яй-яй, Саша! Чему учишь?
Вот Лена молодец!
... надо описать
Код
Dim aftercell as Range



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Сотрите … Option Explicit
Ай-яй-яй, Саша! Чему учишь?
Вот Лена молодец!
... надо описать
Код
Dim aftercell as Range

Автор - Alex_ST
Дата добавления - 30.01.2017 в 22:04
Pelena Дата: Понедельник, 30.01.2017, 22:10 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 19185
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
[offtop]С некоторых пор стала всегда использовать Option Explicit yes [/offtop]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение[offtop]С некоторых пор стала всегда использовать Option Explicit yes [/offtop]

Автор - Pelena
Дата добавления - 30.01.2017 в 22:10
bmv98rus Дата: Понедельник, 30.01.2017, 22:22 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4108
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
[offtop] Alex_ST,

вот значит это
[vba]
Код
Dim j As Variant
[/vba] не смущает, а ... :-)[/offtop]


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение[offtop] Alex_ST,

вот значит это
[vba]
Код
Dim j As Variant
[/vba] не смущает, а ... :-)[/offtop]

Автор - bmv98rus
Дата добавления - 30.01.2017 в 22:22
_Boroda_ Дата: Понедельник, 30.01.2017, 22:23 | Сообщение № 15
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Но тогда не только aftercell, но и остальную кучу переменных тоже объявить нужно

Ай-яй-яй, Саша! Чему учишь?
Конечно плохому. А как иначе?

На самом деле я очень люблю использовать всяческие переменные в коде и на больших макросах у меня их количество запросто за сотню переваливает. Я сам-то в них не путаюсь, для меня мои названия понятны - привык за много лет, что, например, r0_ - номер первой строки диапазона, а r1_ - номер последней. А вот всю это кучу объявлять у меня просто терпения не хватает. Объявляю только то, что мне действительно нужно (типа As Range), чтобы потом автоподстановкой пользоваться при написании или при тормозах, но это реже, при тормозах я лучше постараюсь код оптимизировать.
Я прекрасно понимаю, что это методически неверно, то так вот исторически сложилось.
Да и память дисциплинирует :D
Dim j As Variant
не смущает, а ... :-)
Все верно, не должно смущать. Объявлять типом Вариант хотя бы для того нужно, чтобы потом случайно дрогнувшей рукой не поставить вместо переменной j например jj. И долго искать потом в коде косяк.
Но кто бы говорил, конечно. Я сам такой, о чем выше и написал уже.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНо тогда не только aftercell, но и остальную кучу переменных тоже объявить нужно

Ай-яй-яй, Саша! Чему учишь?
Конечно плохому. А как иначе?

На самом деле я очень люблю использовать всяческие переменные в коде и на больших макросах у меня их количество запросто за сотню переваливает. Я сам-то в них не путаюсь, для меня мои названия понятны - привык за много лет, что, например, r0_ - номер первой строки диапазона, а r1_ - номер последней. А вот всю это кучу объявлять у меня просто терпения не хватает. Объявляю только то, что мне действительно нужно (типа As Range), чтобы потом автоподстановкой пользоваться при написании или при тормозах, но это реже, при тормозах я лучше постараюсь код оптимизировать.
Я прекрасно понимаю, что это методически неверно, то так вот исторически сложилось.
Да и память дисциплинирует :D
Dim j As Variant
не смущает, а ... :-)
Все верно, не должно смущать. Объявлять типом Вариант хотя бы для того нужно, чтобы потом случайно дрогнувшей рукой не поставить вместо переменной j например jj. И долго искать потом в коде косяк.
Но кто бы говорил, конечно. Я сам такой, о чем выше и написал уже.

Автор - _Boroda_
Дата добавления - 30.01.2017 в 22:23
bmv98rus Дата: Понедельник, 30.01.2017, 22:41 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4108
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
[offtop]
А вот всю это кучу объявлять у меня просто терпения не хватает.
Вот тут полностью солидарен, особенно когда короткий пример делается, а не полновесный продукт и время тратить не хочется, да и все что умещается на один скрин обозреть проще.
Но с другой стороны, вырабатывается привычка и Alex_ST прав, к слову снимаю шляпу, с точки зрения чистоплотности чувствуется правильный подход.
Объявлять типом Вариант
Я имел в виду именно при условии отстуствия Option Explicit.[/offtop]


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение[offtop]
А вот всю это кучу объявлять у меня просто терпения не хватает.
Вот тут полностью солидарен, особенно когда короткий пример делается, а не полновесный продукт и время тратить не хочется, да и все что умещается на один скрин обозреть проще.
Но с другой стороны, вырабатывается привычка и Alex_ST прав, к слову снимаю шляпу, с точки зрения чистоплотности чувствуется правильный подход.
Объявлять типом Вариант
Я имел в виду именно при условии отстуствия Option Explicit.[/offtop]

Автор - bmv98rus
Дата добавления - 30.01.2017 в 22:41
_Boroda_ Дата: Понедельник, 30.01.2017, 23:16 | Сообщение № 17
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Я имел в виду именно при условии отстуствия Option Explicit.

А, ну тогда конечно как-то настораживает


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Я имел в виду именно при условии отстуствия Option Explicit.

А, ну тогда конечно как-то настораживает

Автор - _Boroda_
Дата добавления - 30.01.2017 в 23:16
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как подружить индекс строки с её значением в ListBox? (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!