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

Вход

Регистрация

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

 

= Мир MS Excel/Drag and drop - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Drag and drop
Мур Дата: Среда, 22.01.2014, 12:22 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 438
Репутация: 19 ±
Замечаний: 0% ±

Приветствую участников!
В прилагаемом примере элемент списка из ListBox1 методом Drag and drop
переносится в один из текстовых полей. В то же время данный элемент сохраняется в
в ListBox1.
Вопрос: что надо изменить, чтобы после переноса элемента он удалялся из исходного
ListBox1 ??? или хотябы менял цвет или вроде того...

В том же примере, как добиться, чтобы в textBox можно было вставить только один элемент, а не как в примере???
К сообщению приложен файл: 2086734.xlsm (17.3 Kb)
 
Ответить
СообщениеПриветствую участников!
В прилагаемом примере элемент списка из ListBox1 методом Drag and drop
переносится в один из текстовых полей. В то же время данный элемент сохраняется в
в ListBox1.
Вопрос: что надо изменить, чтобы после переноса элемента он удалялся из исходного
ListBox1 ??? или хотябы менял цвет или вроде того...

В том же примере, как добиться, чтобы в textBox можно было вставить только один элемент, а не как в примере???

Автор - Мур
Дата добавления - 22.01.2014 в 12:22
nilem Дата: Среда, 22.01.2014, 14:20 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
если отказаться от RowSource, то можно попробовать так:
[vba]
Код
Option Explicit
Dim arr

Private Sub UserForm_Initialize()
arr = Application.Transpose(Range("A1", Cells(Rows.Count, 1).End(xlUp)))
Me.ListBox1.RowSource = ""
Me.ListBox1.List = arr
End Sub

Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)
Dim MyDataObject As DataObject
Dim Msg As String
Dim Effect As Integer
If Button = 1 Then
     Set MyDataObject = New DataObject
     MyDataObject.SetText ListBox1.Value
     Effect = MyDataObject.StartDrag(fmDropEffectMove)    'fmDropEffectCopy
     arr = Filter(arr, ListBox1.Value, False, vbTextCompare)
     Me.ListBox1.List = arr
     If Effect = 0 Then MsgBox (Msg)
End If
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеесли отказаться от RowSource, то можно попробовать так:
[vba]
Код
Option Explicit
Dim arr

Private Sub UserForm_Initialize()
arr = Application.Transpose(Range("A1", Cells(Rows.Count, 1).End(xlUp)))
Me.ListBox1.RowSource = ""
Me.ListBox1.List = arr
End Sub

Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)
Dim MyDataObject As DataObject
Dim Msg As String
Dim Effect As Integer
If Button = 1 Then
     Set MyDataObject = New DataObject
     MyDataObject.SetText ListBox1.Value
     Effect = MyDataObject.StartDrag(fmDropEffectMove)    'fmDropEffectCopy
     arr = Filter(arr, ListBox1.Value, False, vbTextCompare)
     Me.ListBox1.List = arr
     If Effect = 0 Then MsgBox (Msg)
End If
End Sub
[/vba]

Автор - nilem
Дата добавления - 22.01.2014 в 14:20
Мур Дата: Среда, 22.01.2014, 15:26 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 438
Репутация: 19 ±
Замечаний: 0% ±

Большое спасибо! попробовал Ваш код, все работает...буду использовать его...

Скажите, как запретить ввод в textbox второго значения...?


Сообщение отредактировал Мур - Среда, 22.01.2014, 15:29
 
Ответить
СообщениеБольшое спасибо! попробовал Ваш код, все работает...буду использовать его...

Скажите, как запретить ввод в textbox второго значения...?

Автор - Мур
Дата добавления - 22.01.2014 в 15:26
nilem Дата: Среда, 22.01.2014, 17:53 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Мур,
мне кажется, лучше вот такой вариант (выбираем месяц, нажимаем кнопку; текстбоксы заполняются последовательно)
[vba]
Код
Private Sub CommandButton1_Click()
If Me.ListBox1.ListIndex < 0 Then MsgBox "Не выбран месяц", 64: Exit Sub
Dim i&
For i = 1 To 4
     If Len(Me("Textbox" & i)) = 0 Then
         Me("Textbox" & i).Value = ListBox1.Value
         arr = Filter(arr, ListBox1.Value, False, vbTextCompare)
         Me.ListBox1.List = arr
         Exit For
     End If
Next
End Sub
[/vba]
возможно, не так изящно, как с ListBox1_MouseMove, зато надежно и проверено, на века :)
К сообщению приложен файл: Copy_2086734.xlsm (23.3 Kb)


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеМур,
мне кажется, лучше вот такой вариант (выбираем месяц, нажимаем кнопку; текстбоксы заполняются последовательно)
[vba]
Код
Private Sub CommandButton1_Click()
If Me.ListBox1.ListIndex < 0 Then MsgBox "Не выбран месяц", 64: Exit Sub
Dim i&
For i = 1 To 4
     If Len(Me("Textbox" & i)) = 0 Then
         Me("Textbox" & i).Value = ListBox1.Value
         arr = Filter(arr, ListBox1.Value, False, vbTextCompare)
         Me.ListBox1.List = arr
         Exit For
     End If
Next
End Sub
[/vba]
возможно, не так изящно, как с ListBox1_MouseMove, зато надежно и проверено, на века :)

Автор - nilem
Дата добавления - 22.01.2014 в 17:53
Мур Дата: Четверг, 23.01.2014, 09:58 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 438
Репутация: 19 ±
Замечаний: 0% ±

nilem, И СНОВА СПАСИБО!!!
 
Ответить
Сообщениеnilem, И СНОВА СПАСИБО!!!

Автор - Мур
Дата добавления - 23.01.2014 в 09:58
Мур Дата: Четверг, 23.01.2014, 17:51 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 438
Репутация: 19 ±
Замечаний: 0% ±

Покапаля на форуме и в нете в других метстах и не нашел ничего по теме
перенос методом Drag and drop из Listbox в Listbox.
Кто-нибудь знает как?
 
Ответить
СообщениеПокапаля на форуме и в нете в других метстах и не нашел ничего по теме
перенос методом Drag and drop из Listbox в Listbox.
Кто-нибудь знает как?

Автор - Мур
Дата добавления - 23.01.2014 в 17:51
SkyPro Дата: Четверг, 23.01.2014, 18:04 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Вот так вроде работает:
Создайте форму с двумя листбоксами:[vba]
Код
Private mobjFromList As MSForms.ListBox
Private mlFrom As Long
     
Private Sub UserForm_Initialize()
      Dim L As Long
      For L = 0 To 50
          Me.ListBox1.AddItem "Item " & L
      Next
End Sub
     
Private Sub ListBox1_MouseMove(ByVal Button As Integer, _
      ByVal Shift As Integer, _
      ByVal X As Single, _
      ByVal Y As Single)
        
      Dim objData As DataObject
      Dim lEffect As Long
        
      Const lLEFTMOUSEBUTTON As Long = 1
        
      If Button = lLEFTMOUSEBUTTON Then
          Set objData = New DataObject
          Set mobjFromList = Me.ListBox1
          objData.SetText Me.ListBox1.Text
          mlFrom = Me.ListBox1.ListIndex
          lEffect = objData.StartDrag
      End If
End Sub
     
Private Sub ListBox1_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, _
      ByVal Data As MSForms.DataObject, _
      ByVal X As Single, _
      ByVal Y As Single, _
      ByVal DragState As MSForms.fmDragState, _
      ByVal Effect As MSForms.ReturnEffect, _
      ByVal Shift As Integer)
        
      Cancel = True
      Effect = fmDropEffectMove
End Sub
     
Private Sub ListBox1_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, _
      ByVal Action As MSForms.fmAction, _
      ByVal Data As MSForms.DataObject, _
      ByVal X As Single, _
      ByVal Y As Single, _
      ByVal Effect As MSForms.ReturnEffect, _
      ByVal Shift As Integer)
     
      Dim lTo As Long
     
      With Me.ListBox1
          lTo = .TopIndex + Int(Y * 0.85 / .Font.Size)
          If lTo >= .ListCount Then lTo = .ListCount
          Cancel = True
          Effect = fmDropEffectMove
          .AddItem Data.GetText, lTo
          If mobjFromList = Me.ListBox1 And lTo < mlFrom Then
              mobjFromList.RemoveItem (mlFrom + 1)
          Else
              mobjFromList.RemoveItem mlFrom
          End If
          Set mobjFromList = Nothing
      End With
End Sub

'---------------------
Private Sub listbox2_MouseMove(ByVal Button As Integer, _
      ByVal Shift As Integer, _
      ByVal X As Single, _
      ByVal Y As Single)
        
      Dim objData As DataObject
      Dim lEffect As Long
        
      Const lLEFTMOUSEBUTTON As Long = 1
        
      If Button = lLEFTMOUSEBUTTON Then
          Set objData = New DataObject
          Set mobjFromList = Me.ListBox2
          objData.SetText Me.ListBox2.Text
          mlFrom = Me.ListBox2.ListIndex
          lEffect = objData.StartDrag
      End If
End Sub
     
Private Sub listbox2_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, _
      ByVal Data As MSForms.DataObject, _
      ByVal X As Single, _
      ByVal Y As Single, _
      ByVal DragState As MSForms.fmDragState, _
      ByVal Effect As MSForms.ReturnEffect, _
      ByVal Shift As Integer)
        
      Cancel = True
      Effect = fmDropEffectMove
End Sub
     
Private Sub listbox2_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, _
      ByVal Action As MSForms.fmAction, _
      ByVal Data As MSForms.DataObject, _
      ByVal X As Single, _
      ByVal Y As Single, _
      ByVal Effect As MSForms.ReturnEffect, _
      ByVal Shift As Integer)
     
      Dim lTo As Long
     
      With Me.ListBox2
          lTo = .TopIndex + Int(Y * 0.85 / .Font.Size)
          If lTo >= .ListCount Then lTo = .ListCount
          Cancel = True
          Effect = fmDropEffectMove
          .AddItem Data.GetText, lTo
          If mobjFromList = Me.ListBox2 And lTo < mlFrom Then
              mobjFromList.RemoveItem (mlFrom + 1)
          Else
              mobjFromList.RemoveItem mlFrom
          End If
          Set mobjFromList = Nothing
      End With
End Sub
[/vba]
Код не мой. Взято отсюда и скопирована часть внутри.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Четверг, 23.01.2014, 18:05
 
Ответить
СообщениеВот так вроде работает:
Создайте форму с двумя листбоксами:[vba]
Код
Private mobjFromList As MSForms.ListBox
Private mlFrom As Long
     
Private Sub UserForm_Initialize()
      Dim L As Long
      For L = 0 To 50
          Me.ListBox1.AddItem "Item " & L
      Next
End Sub
     
Private Sub ListBox1_MouseMove(ByVal Button As Integer, _
      ByVal Shift As Integer, _
      ByVal X As Single, _
      ByVal Y As Single)
        
      Dim objData As DataObject
      Dim lEffect As Long
        
      Const lLEFTMOUSEBUTTON As Long = 1
        
      If Button = lLEFTMOUSEBUTTON Then
          Set objData = New DataObject
          Set mobjFromList = Me.ListBox1
          objData.SetText Me.ListBox1.Text
          mlFrom = Me.ListBox1.ListIndex
          lEffect = objData.StartDrag
      End If
End Sub
     
Private Sub ListBox1_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, _
      ByVal Data As MSForms.DataObject, _
      ByVal X As Single, _
      ByVal Y As Single, _
      ByVal DragState As MSForms.fmDragState, _
      ByVal Effect As MSForms.ReturnEffect, _
      ByVal Shift As Integer)
        
      Cancel = True
      Effect = fmDropEffectMove
End Sub
     
Private Sub ListBox1_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, _
      ByVal Action As MSForms.fmAction, _
      ByVal Data As MSForms.DataObject, _
      ByVal X As Single, _
      ByVal Y As Single, _
      ByVal Effect As MSForms.ReturnEffect, _
      ByVal Shift As Integer)
     
      Dim lTo As Long
     
      With Me.ListBox1
          lTo = .TopIndex + Int(Y * 0.85 / .Font.Size)
          If lTo >= .ListCount Then lTo = .ListCount
          Cancel = True
          Effect = fmDropEffectMove
          .AddItem Data.GetText, lTo
          If mobjFromList = Me.ListBox1 And lTo < mlFrom Then
              mobjFromList.RemoveItem (mlFrom + 1)
          Else
              mobjFromList.RemoveItem mlFrom
          End If
          Set mobjFromList = Nothing
      End With
End Sub

'---------------------
Private Sub listbox2_MouseMove(ByVal Button As Integer, _
      ByVal Shift As Integer, _
      ByVal X As Single, _
      ByVal Y As Single)
        
      Dim objData As DataObject
      Dim lEffect As Long
        
      Const lLEFTMOUSEBUTTON As Long = 1
        
      If Button = lLEFTMOUSEBUTTON Then
          Set objData = New DataObject
          Set mobjFromList = Me.ListBox2
          objData.SetText Me.ListBox2.Text
          mlFrom = Me.ListBox2.ListIndex
          lEffect = objData.StartDrag
      End If
End Sub
     
Private Sub listbox2_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, _
      ByVal Data As MSForms.DataObject, _
      ByVal X As Single, _
      ByVal Y As Single, _
      ByVal DragState As MSForms.fmDragState, _
      ByVal Effect As MSForms.ReturnEffect, _
      ByVal Shift As Integer)
        
      Cancel = True
      Effect = fmDropEffectMove
End Sub
     
Private Sub listbox2_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, _
      ByVal Action As MSForms.fmAction, _
      ByVal Data As MSForms.DataObject, _
      ByVal X As Single, _
      ByVal Y As Single, _
      ByVal Effect As MSForms.ReturnEffect, _
      ByVal Shift As Integer)
     
      Dim lTo As Long
     
      With Me.ListBox2
          lTo = .TopIndex + Int(Y * 0.85 / .Font.Size)
          If lTo >= .ListCount Then lTo = .ListCount
          Cancel = True
          Effect = fmDropEffectMove
          .AddItem Data.GetText, lTo
          If mobjFromList = Me.ListBox2 And lTo < mlFrom Then
              mobjFromList.RemoveItem (mlFrom + 1)
          Else
              mobjFromList.RemoveItem mlFrom
          End If
          Set mobjFromList = Nothing
      End With
End Sub
[/vba]
Код не мой. Взято отсюда и скопирована часть внутри.

Автор - SkyPro
Дата добавления - 23.01.2014 в 18:04
Мур Дата: Пятница, 24.01.2014, 12:35 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 438
Репутация: 19 ±
Замечаний: 0% ±

Благодарю! все пока работает....
 
Ответить
СообщениеБлагодарю! все пока работает....

Автор - Мур
Дата добавления - 24.01.2014 в 12:35
Мур Дата: Воскресенье, 26.01.2014, 13:13 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 438
Репутация: 19 ±
Замечаний: 0% ±

Приветствую участников!
Один и тот же макрос вешаю на кнопку и на графический объект, в последнем случае выдает ошибку...
Почему? Что не так???
К сообщению приложен файл: ____3.xlsm (29.1 Kb)
 
Ответить
СообщениеПриветствую участников!
Один и тот же макрос вешаю на кнопку и на графический объект, в последнем случае выдает ошибку...
Почему? Что не так???

Автор - Мур
Дата добавления - 26.01.2014 в 13:13
Мур Дата: Воскресенье, 26.01.2014, 13:17 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 438
Репутация: 19 ±
Замечаний: 0% ±

Сейчас открываю приложенный пример из форума -- работает не пойму в чем дело...
Пересохронил к себе -- опять выдает ошибку....


Сообщение отредактировал Мур - Воскресенье, 26.01.2014, 13:19
 
Ответить
СообщениеСейчас открываю приложенный пример из форума -- работает не пойму в чем дело...
Пересохронил к себе -- опять выдает ошибку....

Автор - Мур
Дата добавления - 26.01.2014 в 13:17
  • Страница 1 из 1
  • 1
Поиск:

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