Vba excel удалить строку в listbox

SetoFF

0 / 0 / 0

Регистрация: 07.12.2011

Сообщений: 3

1

07.12.2011, 08:40. Показов 23611. Ответов 7

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Visual Basic
1
2
3
4
5
For I = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(I) Then
            ComboBox1.AddItem (ListBox1.List(I))
        End If
    Next I

Скажите пожалуйста, что нужно добавить, чтобы из ListBox’а выделенные строки удалялись?



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

07.12.2011, 10:24

2

Ну если AddItem — «добавить элемент», то как будет «удалить элемент»?

Visual Basic
1
ListBox1.RemoveItem I

При этом цикл лучше пустить в обратную сторону, т.к. при удалении i-го элемента i-тым становится следующий элемент.



1



0 / 0 / 0

Регистрация: 07.12.2011

Сообщений: 3

12.12.2011, 14:55

 [ТС]

3

Что-то у меня не пашет… Можете полностью написать как должно быть?



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

12.12.2011, 15:33

4

Visual Basic
1
2
3
4
5
6
For I = ListBox1.ListCount - 1 To 0 Step -1
    If ListBox1.Selected(I) Then
        ComboBox1.AddItem ListBox1.List(I), 0
        ListBox1.RemoveItem I
    End If
Next I



2



0 / 0 / 0

Регистрация: 06.04.2015

Сообщений: 27

06.04.2015, 16:52

5

А как сделать так, чтобы при удалении из листбокса, удалялась строка в таблице?



0



1337 / 308 / 74

Регистрация: 13.11.2008

Сообщений: 635

06.04.2015, 16:55

6

Для этого изначально надо понимать как эта строка в ListBox попадает. И как её правильно отнести именно к нужной строке, чтобы не удалять то, чего удалять не надо.
Обычно в таких случаях при занесении данных в ListBox делают скрытый столбец, в котором для каждой строки записывается её номер на листе Excel. И потом опираясь на этот номер строка и удаляется.



0



1 / 1 / 0

Регистрация: 05.07.2015

Сообщений: 42

21.12.2015, 20:56

7

Скажите пожалуйста!
Как узнать программно номер выделенной строки Listbox-e?



0



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

21.12.2015, 22:48

8

Antontth, ListBox1.ListIndex



1



 
Цитата
написал:

Цитата
Егор Чернов написал:
визуально, я не вижу никаких проблем

,
Браво, видно профессионала! chatGPT не помог вам, да? Видно сразу кто творит код а кто тупо копи-паст из чата. Но и там проблема. Курите мануалы. Визуально он не видит проблем… Размешили так размешили.

Боже. Скажи мне, ты реально немного с чувством юмора, или же ты ищешь до чего докопаться?
Либо ты блажен, либо у тебя мания преследования ChatGPT
Он по всюду, он везде.
Но я уже написал, у меня даже акка нет на него. Верить или нет, это дело твое.
Я челу вроде тебя, точно ничего доказывать не буду, причина выше.
Ты мне не интересен, ни как человек, ни как личность. Тьфу

Но, если ты включишь немного голову и прочитаешь раз так сотый , ты поймешь суть вопроса.
Вот рассмешил, так рассмешил. Поржали всем коллективом. Продолжай и не останавливайте. А то, нам с коллегами будет скуфно на работке работу работать.

Иди лучше молока попей, дефомин поднимется, полегчает.
И от меня отстань, а то я могу подумать, что ты из тех самых… движение которых запрошено на территории РФ. Бээ

А то смотри, я могу расценить твои действия ка домогательства, а может даже и как на почве твоих сексуальных фантазий, что уже нарушает заоны РФ об ЛГБТ, а значит и

3.1. Создавать сообщения, нарушающие действующее законодательство РФ.

Но, это так, размышление.

Хочешь построить свои домыслы о заговоре мира , в курилке есть тема про ChatGPT, вот иди туда и устраивай холивар.

Изменено: Егор Чернов02.04.2023 16:41:12

I have a listbox that shows up the rows of an excel sheet i need to add a delete button to delete the selected row. i tried this

Private Sub CommandButton3_Click()
Dim i As Integer

For i = 0 To Range("A65356").End(xlUp).Row - 1
    If lstDisplay.Selected(i) Then
        Rows(i).Select
        Selection.Delete
    End If
Next i
End Sub

but when i try to delete for example the the row 10 it’s the 9 that gets deleted it always delets the line before the one selected

any fix ???

Thanks everyone

BigBen's user avatar

BigBen

43.9k6 gold badges27 silver badges40 bronze badges

asked Sep 18, 2019 at 12:47

TenEM's user avatar

2

I’ll have to test this myself, but I guess something along the lines of:

Private Sub CommandButton3_Click()

Dim i As Long, rng As Range
With Me.lstDisplay
    For i = 0 To .ListCount - 1
        If .Selected(i) Then
            If Not rng Is Nothing Then
                Set rng = Union(rng, Sheets("Sheet1").Rows(i + 1))
            Else
                Set rng = Sheets("Sheet1").Rows(i + 1)
            End If
        End If
    Next i
End With

rng.EntireRow.Delete

End Sub

That way you’ll only have to perform deleting rows once.

Btw, I anticipated a multiselect listbox. If it’s not a multiselect it would simplify the code as there is no need to loop the listbox.

answered Sep 18, 2019 at 13:08

JvdV's user avatar

JvdVJvdV

66.6k8 gold badges38 silver badges68 bronze badges

I would suggest you this :

Private Sub CommandButton3_Click()
Dim i As Integer

For i = 1 To Range("A65356").End(xlUp).Row - 1
    If lstDisplay.Selected(i) Then
        Rows(i).Delete
        i = i - 1
    End If
Next i
End Sub

Also Note that Rows(i).Delete is exactly the same as Rows(i).Select Selection.Delete Excepted that Select should be avoided as much as possible

As said @BigBen :

You can use the «Option Base 1» declaration at the top of a code module to change the default lower bound to 1 instead of 0.
For exemple :

Option Base 1 

Dim arValues(10) As String       'contains 10 items (not 11)  

Option Base Doc Here

answered Sep 18, 2019 at 12:57

TourEiffel's user avatar

TourEiffelTourEiffel

3,9682 gold badges16 silver badges42 bronze badges

6

Содержание

  1. Listbox vba excel методы
  2. Объект ListBox (Outlook Forms Script)
  3. Замечания
  4. Стили элемента ListBox
  5. События
  6. Методы
  7. Свойства
  8. Поддержка и обратная связь
  9. Объект ListBox (Access)
  10. Замечания
  11. Пример
  12. События
  13. Методы
  14. Свойства
  15. См. также
  16. Поддержка и обратная связь

Listbox vba excel методы

На этом шаге мы рассмотрим назначение, основные свойства и методы этого элемента .

Элемент управления ListBox (Список) создается с помощью кнопки Список (ListBox) (рисунок 1).

Рис.1. Список в форме

Элемент управления ListBox применяется для хранения списка значений. Из списка пользователь может выбрать одно или несколько значений, которые в последующем будут использоваться в тексте программы.

Приведем наиболее часто используемые свойства элемента управления ListBox .

Свойство Назначение
ListIndex Возвращает номер текущего элемента списка. Нумерация элементов списка начинается с нуля
ListCount Возвращает число элементов списка
TopIndex Возвращает элемент списка с наибольшим номером
ColumnCount Устанавливает число столбцов в списке
TextColumn Устанавливает столбец в списке, элемент которого возвращается свойством Text
Enabled Допустимые значения: True (запрещен выбор значения из списка пользователем) и False (в противном случае)
Text Возвращает выбранный в списке элемент
List Возвращает элемент списка, стоящий на пересечении указанных строки и столбца. Синтаксис:
RowSource Устанавливает диапазон, содержащий элементы списка
ControlSource Устанавливает диапазон (ячейку), куда возвращается выбранный элемент из списка
MultiSelect Устанавливает способ выбора элементов списка. Допустимые значения:

  • fmMultiSelectSingle (выбор только одного элемента);
  • fmMultiSelectMulti (разрешен выбор нескольких элементов посредством либо щелчка, либо нажатием клавиши Пробел );
  • fmMultiSelectExtended (разрешено использование клавиши Shift при выборе ряда последовательных элементов списка).

Selected Допустимые значения: True (если элемент списка выбран) и False (в противном случае). Используется для определения выделенного текста, когда свойство MultiSelect имеет значение fmMultiSelectMulti или fmMultiSelectExtended .
ColumnWidths Устанавливает ширину столбцов списка. Синтаксис:
ColumnHeads Допустимые значения: True (выводятся заголовки столбцов раскрывающегося списка) и False (в противном случае)
ListStyle Допустимые значения:

  • fmListStylePlain (выбранный элемент из списка выделяется цветом);
  • fmListStyleOption (перед каждым элементом в списке располагается флажок и выбор элемента из списка соответствует установке этого флажка).

MatchEntry Выводит первый подходящий элемент из списка при наборе его имени на клавиатуре. Допустимые значения:

  • fmMatchEntryNone (режим вывода подходящего элемента в списке отключен);
  • fmMatchEntryFirstLetter (вводит подходящий элемент по набранной первой букве. В этом случае, предпочтительно, чтобы элементы списка были бы упорядочены в алфавитном порядке)
  • fmMatchEntryComplete (вводит подходящий элемент по полному набранному имени).

BoundColumn Устанавливает тип, возвращаемый свойством Value . А именно,

  • если свойство BoundColumn равно 0, то свойство Value возвращает индекс выбранной строки, т.е. в этом случае оно действует как свойство ListIndex ;
  • если свойство BoundColumn принимает значение из диапазона от 1 до количества столбцов в списке, то свойство Value возвращает элемент из выбранной строки, стоящий в столбце, определенном свойством BoundColumn .

Таблица 1. Основные свойства ListBox

Приведем наиболее часто используемые методы элемента управления ListBox .

Метод Назначение
Clear Удаляет все элементы из списка
RemoveItem Удаляет из списка элемент с указанным номером. Синтаксис:

Параметр index определяет номер удаляемого из списка элемента

AddItem Добавляет элемент в список. Синтаксис:

  • item — элемент (строковое выражение), добавляемый в список;
  • varIndex — номер добавляемого элемента.

Таблица 2. Основные методы ListBox

На следующем шаге мы рассмотрим особености заполнения списка .

Источник

Объект ListBox (Outlook Forms Script)

Отображает список значений и позволяет выбирать одно или несколько значений.

Замечания

Если элемент ListBox привязан к источнику данных, элемент ListBox сохраняет выбранное значение в этом источнике данных.

ListBox может отображаться в виде списка или группы элементов управления OptionButton или CheckBox.

Свойством по умолчанию для ListBox является свойство Value .

Событием по умолчанию для ListBox является событие Click .

В раскрывающийся элемент ListBox невозможно поместить текст.

Стили элемента ListBox

Вы можете выбрать любой из двух стилей представления элемента ListBox. Это выражается свойством ListStyle . Каждый из них реализует собственный способ выбора элементов в списке.

Если стиль равен 0, каждый элемент находится в отдельной строке; пользователь выбирает элемент, выделяя одну или несколько строк.

Если стиль равен 1, в начале каждой строки отображается optionButton или CheckBox . В этом случае для выбора элемента пользователь нажимает кнопку или устанавливает флажок. Флажки отображаются только в том случае, если свойство MultiSelect имеет значение True.

События

Имя Описание
Click Происходит, когда пользователь окончательно выбирает для элемента управления значение, которое содержит несколько возможных значений.

Методы

Имя Описание
AddItem Для элемента ListBox с одним столбцом метод AddItem добавляет элемент в список. Для многоколоний ListBox этот метод добавляет строку в список.
Clear Удаляет все записи в списке в ListBox.
RemoveItem Удаляет строку из списка в ListBox.

Свойства

Имя Описание
BackColor Возвращает или задает значение Long , указывающее цвет фона объекта . Для чтения и записи.
BorderColor Возвращает или задает значение Long , указывающее цвет границы объекта. Для чтения и записи.
BorderStyle Возвращает или задает целое число , указывающее тип границы элемента управления. Для чтения и записи.
BoundColumn Возвращает или задает значение Variant , определяющее источник данных в многоколоний ListBox. Для чтения и записи.
Столбец Возвращает или задает значение Variant , представляющее одно значение, столбец значений или двумерный массив для загрузки в ListBox. Для чтения и записи.
ColumnCount Возвращает или задает значение Long , представляющее количество столбцов, отображаемых в списке. Для чтения и записи.
ColumnHeads Возвращает или задает логическое значение, указывающее, отображается ли одна строка заголовков столбцов. Для чтения и записи.
ColumnWidths Возвращает или задает значение String , указывающее ширину каждого столбца в многоколоний ListBox. Для чтения и записи.
Enabled Возвращает или задает логическое значение, указывающее, может ли элемент управления получать фокус и реагировать на события, созданные пользователем. Для чтения и записи.
ForeColor Возвращает или задает значение Long , указывающее цвет переднего плана объекта. Для чтения и записи.
IMEMode Возвращает или задает целое число , указывающее режим времени выполнения по умолчанию редактора метода ввода (IME) для элемента управления. Для чтения и записи.
IntegralHeight Возвращает или задает логическое значение, указывающее, отображает ли ListBox полные строки текста в списке или частичные строки. Для чтения и записи.
List Возвращает или задает значение Variant , представляющее указанную запись в ListBox. Для чтения и записи.
ListCount Возвращает значение Long , представляющее количество записей списка в элементе управления . Только для чтения.
ListIndex Возвращает или задает значение Variant , представляющее текущий выбранный элемент в элементе ListBox. Для чтения и записи.
ListStyle Возвращает или задает целое число , указывающее визуальный вид списка в ListBox. Для чтения и записи.
Locked Возвращает или задает логическое значение, указывающее, можно ли изменять элемент управления. Для чтения и записи.
MatchEntry Возвращает или задает целое число , указывающее, как ListBox выполняет поиск в списке по типу пользователя. Для чтения и записи.
MouseIcon Возвращает значение String , представляющее полное имя пути настраиваемого значка, назначаемого элементу управления. Только для чтения.
MousePointer Возвращает или задает целое число , указывающее тип указателя, отображаемого при наведении указателя мыши на определенный объект. Для чтения и записи.
MultiSelect Возвращает или задает целое число , указывающее, допускает ли объект несколько выделений. Для чтения и записи.
Selected Возвращает или задает логическое значение, указывающее состояние выделения элементов в ListBox. Для чтения и записи.
SpecialEffect Возвращает или задает целое число , указывающее внешний вид объекта. Для чтения и записи.
Текст Возвращает или задает строку, указывающую текст в элементе ListBox, изменяя выбранную строку в элементе управления . Для чтения и записи.
TextAlign Возвращает или задает целое число , указывающее способ выравнивания текста в элементе управления . Для чтения и записи.
TextColumn Возвращает или задает значение Variant , которое идентифицирует столбец в элементе ListBox для отображения пользователю. Для чтения и записи.
TopIndex Возвращает или задает значение Long , представляющее индекс элемента списка, отображаемого в верхней позиции списка. Для чтения и записи.
Value (Значение) Возвращает или задает значение Variant , указывающее значение в BoundColumn выбранных строк. Для чтения и записи.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Объект ListBox (Access)

Этот объект соответствует элементу управления list box. В элементе управления «Поле списка» отображается список значений или альтернатив.

Замечания

Управление Средство

Во многих случаях быстрее и проще выбрать значение из списка, чем запоминать значение для ввода. Список вариантов также помогает убедиться, что значение, введенное в поле, является правильным.

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

Если поле списка с несколькими столбцами привязано, Microsoft Access сохраняет значения из одного из столбцов.

Используйте поле списка без привязки, чтобы сохранить значение, которое можно использовать с другим элементом управления. Например, можно использовать список без привязки, чтобы ограничить значения в другом списке или в настраиваемом диалоговом окне. Вы также можете использовать поле списка без привязки, чтобы найти запись на основе значения, выбранного в списке.

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

Пример

В этом примере показано, как фильтровать содержимое поля списка при вводе в текстовое поле.

В этом примере в списке с именем ColorID отображается список цветов, хранящихся в таблице Colors . При вводе в текстовое поле FilterBy элементы в ColorID фильтруются динамически.

Для этого используйте событие Change текстового поля, чтобы создать инструкцию SQL, которая будет служить в качестве нового RowSource в списке.

События

Методы

Свойства

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

I have a list box which is based on the worksheet range. I put a button included in my Userform that deletes the selected item inside my listbox whenever it is clicked. And everytime there is a deleted item there, the deleted item should also be removed in my Worksheet range. Here’s my code in removing the item in the listbox:

Private Sub btnRemove_Click()
Dim i As Integer

For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) Then
        ListBox1.RemoveItem (i)
    End If
Next i
End Sub

How to remove the deleted item in the worksheet range? Thank you! :)

asked Oct 26, 2016 at 6:42

kruk22's user avatar

kruk22kruk22

1392 gold badges3 silver badges15 bronze badges

3

since you’re using .RemoveItem() method you must have set your listbox range via its List property and not with RowSource one

then you could use this code in your userform code pane:

Option Explicit

Dim listRng As Range '<-- declare a Userform scoped variable of 'Range' type to track the range whose content you fill your ListBox1 with (for instance, in Userform_Initialize())

Private Sub btnRemove_Click()
    Dim i As Long
    Dim rowsList As String

    For i = ListBox1.ListCount - 1 To 0 Step -1
        If ListBox1.Selected(i) Then
            ListBox1.RemoveItem i
        Else
            rowsList = rowsList & i + 1 & " " '<-- update the rows to be confirmed
        End If
    Next i
    If rowsList <> "" Then UpdateListRange Left(rowsList, Len(rowsList) - 1)
End Sub

Sub UpdateListRange (rowsList As String)
    Dim addr As String
    Dim iRow As Variant
    Dim rowsListArr As Variant

    rowsListArr = Split(rowsList)
    For iRow = UBound(rowsListArr) To LBound(rowsListArr) Step -1
        addr = addr & listRng(rowsListArr(iRow)).address(False, False) & ","
    Next iRow

    If addr <> "" Then addr = Left(addr, Len(addr) - 1)
    Set listRng = listRng.Parent.Range(addr)
End Sub

Private Sub UserForm_Initialize()
    With Worksheets("List").Range("C32:C41") '<-- change "List" to your actual worksheet name with the range whose content you fill ListBox1 list with
        Me.ListBox1.List = Application.Transpose(.Cells) '<-- fill ListBox1 list
        Set listRng = .Cells '<-- set the userform scoped range variable to track the "listbox filling" range
    End With
End Sub

answered Oct 26, 2016 at 7:52

user3598756's user avatar

user3598756user3598756

28.8k4 gold badges17 silver badges28 bronze badges

1

Works fine without the «-1» for whatever reason.

Private Sub btnRemove_Click()
Dim i As Integer

For i = 0 To ListBox1.ListCount 
    If ListBox1.Selected(i) Then
        ListBox1.RemoveItem (i)
    End If
Next i
End Sub

answered Mar 24 at 15:42

SomeBuddy's user avatar

  • Remove From My Forums
  • Question

  • Hi,

    I am wondering how to write the VBA macro when a user select one or many items from the ListBox to be removed. Can anyone help me achieve that?

    Thanks in Advance.

    Chuck

Answers

  • Hello again Chuck,

    The ListBox needs to be in MultiSelect mode.

    The following code is attached to a button that will toggle between MultiSelect and Single Select and changes its caption each time it toggles.

    Private Sub CommandButton5_Click()
        If CommandButton5.Caption = «Set Multi Select» Then
            ListBox1.MultiSelect = 1
            CommandButton5.Caption = «Set Single Select»
        Else
            ListBox1.MultiSelect = 0
            CommandButton5.Caption = «Set Multi Select»
        End If
    End Sub

    You probably should include some code in the Userform Initialize to set the initial caption plus set the single or multiselect mode for the ListBox. Note that the caption is actually the opposite the the current setting so that it displays what
    will be done when clicked. ie. When set to Multi, the caption is Set to Single Select.


    Regards, OssieMac

    • Proposed as answer by

      Tuesday, May 1, 2012 2:30 AM

    • Marked as answer by
      chamdan
      Tuesday, May 1, 2012 2:34 AM

  • Thank you for the tips OssieMac.

    Good night!

    Chuck

    • Marked as answer by
      chamdan
      Thursday, November 8, 2012 1:23 AM

Понравилась статья? Поделить с друзьями:
  • Vba excel удалить содержимое ячеек
  • Vba excel удалить пустые строки в диапазоне
  • Vba excel удалить примечание в ячейке
  • Vba excel удалить последний символ в строке
  • Vba excel файл для добавления