UserForm ListBox问题

时间:2012-12-11 22:15:49

标签: excel-vba vba excel

我创建了一个'RightToLeft'属性为True的用户表单。 我创建了一个列表框,'TextAlign'属性为'3 - fmTextAlignRight'。 列表框包含两个列和行,其文本长于列表框大小,因此我设置了“ColumnWidths”属性以查看所有文本。

我有两个问题:

  1. 打开用户窗体时,我看到第二列的末尾而不是第一列。
  2. First Problem

    1. 我有一个SpinButton,它在行之间交换。 当我的行数超过列表框高度时,当我在限制中的行之间交换时,我会看到两行具有相同的值。
    2. Second Problem

      我的旋转按钮的VBA代码:

      Private Sub SpinButton1_SpinDown()
          Call SwapBetweenTwoLines(False, ListBox1)
      End Sub
      
      Private Sub SpinButton1_SpinUp()
          Call SwapBetweenTwoLines(True, ListBox1)
      End Sub
      
      Sub SwapBetweenTwoLines(up As Boolean, listbox)
          Dim index As Integer, new_index As Integer
          index = listbox.ListIndex
          If (((up = True) And (index > 0)) Or _
              ((up = False) And (index < listbox.ListCount - 1))) Then
              If (up = True) Then
                  new_index = index - 1
              Else
                  new_index = index + 1
              End If
      
              Dim key As String, value As String
              key = listbox.Column(0, index)
              value = listbox.Column(1, index)
              listbox.Column(0, index) = listbox.Column(0, new_index)
              listbox.Column(1, index) = listbox.Column(1, new_index)
              listbox.Column(0, new_index) = key
              listbox.Column(1, new_index) = value
              listbox.Selected(new_index) = True
          End If
      End Sub
      

      感谢您的帮助...

1 个答案:

答案 0 :(得分:0)

好吧,我已成功解决了第二个问题。

我应该在插入值之前写下最后一个命令(listbox.Selected(new_index)= True),而不是之后。

有没有人能解决第一个问题?

...谢谢