Excel 用户表单列表框问题

Excel 用户表单列表框问题,excel,vba,Excel,Vba,我创建了一个userform,它的'RightToLeft'属性为True。 我已经创建了一个列表框,其中“TextAlign”属性为“3-fmTextAlignRight”。 listbox包含两列和两行,其中文本长度超过listbox大小,因此我设置了“ColumnWidths”属性以查看所有文本 我有两个问题: 当userform打开时,我看到的是第二列的末尾,而不是第一列。 我有一个SpinButton,可以在行之间交换。 当我的行数超过listbox高度时,当我在限制中的行之间交换时,

我创建了一个userform,它的'RightToLeft'属性为True。 我已经创建了一个列表框,其中“TextAlign”属性为“3-fmTextAlignRight”。 listbox包含两列和两行,其中文本长度超过listbox大小,因此我设置了“ColumnWidths”属性以查看所有文本

我有两个问题:

当userform打开时,我看到的是第二列的末尾,而不是第一列。 我有一个SpinButton,可以在行之间交换。 当我的行数超过listbox高度时,当我在限制中的行之间交换时,我会看到两行具有相同的值。 旋转按钮的我的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

谢谢你的帮助……

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

我应该在插入值之前编写最后一个命令listbox.Selectednew\u index=True,而不是在插入值之后

有人能解决第一个问题吗


感谢…

+1用一些图片和细节阐明您的答案。如果您保持默认对齐方式,或从左到右对齐,是否正常?@Benjy进行交换,您能否为我们提供微调器按钮的VBA代码?我已将excel文件上载到SkyDrive。谢谢