【问题标题】:command button in userform stops working用户窗体中的命令按钮停止工作
【发布时间】:2016-02-08 21:38:22
【问题描述】:

我是 VBA 的新手,并创建了一个带有 3 个命令按钮的多页用户窗体,一个是将页面中的数据添加到 xl 中的工作表中。当我第一次完成它时,它工作得非常好,所以我保存了所有内容,关闭了工作簿,当我重新打开它时,添加命令按钮不起作用。我再次重新启动了整个项目,完全相同的事情再次发生。

谁能给点建议?我现在花了两天时间试图解决这个问题

代码是:

Private Sub cmdAdd_Click()
    Dim addme As Range
    Dim s As Integer
    Dim t As Integer
    Dim u As Integer
    Dim v As Integer

    Set addme = Sheet1.Cells(Rows.Count, 3).End(xlUp).Offset(1, 0)

For s = 0 To Me.ListRegularOrder.ListCount - 1
        If Me.ListRegularOrder.Selected(s) Then
            addme = Me.ListRegularOrder.List(s)
            addme.Offset(0, 1) = Me.ListRegularOrder.List(s, 1)
            addme.Offset(0, 2) = Me.ListRegularOrder.List(s, 2)
            addme.Offset(0, 3) = Me.ListRegularOrder.List(s, 3)
            addme.Offset(0, 4) = Me.ListRegularOrder.List(s, 4)
            addme.Offset(0, 5) = Me.ListRegularOrder.List(s, 5)
            addme.Offset(0, 6) = Me.ListRegularOrder.List(s, 6)
            addme.Offset(0, 7) = Me.ListRegularOrder.List(s, 7)
            addme.Offset(0, 8) = Me.ListRegularOrder.List(s, 8)
            addme.Offset(0, 9) = Me.ListRegularOrder.List(s, 9)
            addme.Offset(0, 10) = Me.ListRegularOrder.List(s, 10)
            addme.Offset(0, 11) = Me.ListRegularOrder.List(s, 11)
            addme.Offset(0, 12) = Me.ListRegularOrder.List(s, 12)
            addme.Offset(0, 13) = Me.ListRegularOrder.List(s, 13)
            addme.Offset(0, 14) = Me.ListRegularOrder.List(s, 14)
            addme.Offset(0, 15) = Me.ListRegularOrder.List(s, 15)
            addme.Offset(0, 16) = Me.ListRegularOrder.List(s, 16)

            Set addme = addme.Offset(1, 0)
        End If
    Next s
    For s = 0 To Me.ListRegularOrder.ListCount - 1
        If Me.ListRegularOrder.Selected(s) Then Me.ListRegularOrder.Selected(s) = False

    Next s

For t = 0 To Me.ListLastOrder.ListCount - 1
        If Me.ListLastOrder.Selected(t) Then
            addme = Me.ListLastOrder.List(t)
            addme.Offset(0, 1) = Me.ListLastOrder.List(t, 1)
            addme.Offset(0, 2) = Me.ListLastOrder.List(t, 2)
            addme.Offset(0, 3) = Me.ListLastOrder.List(t, 3)
            addme.Offset(0, 4) = Me.ListLastOrder.List(t, 4)
            addme.Offset(0, 5) = Me.ListLastOrder.List(t, 5)
            addme.Offset(0, 6) = Me.ListLastOrder.List(t, 6)
            addme.Offset(0, 7) = Me.ListLastOrder.List(t, 7)
            addme.Offset(0, 8) = Me.ListLastOrder.List(t, 8)
            addme.Offset(0, 9) = Me.ListLastOrder.List(t, 9)

            Set addme = addme.Offset(1, 0)
        End If
    Next t
    For t = 0 To Me.ListLastOrder.ListCount - 1
        If Me.ListLastOrder.Selected(t) Then Me.ListLastOrder.Selected(t) = False

    Next t


    For u = 0 To Me.ListHistory.ListCount - 1
        If Me.ListHistory.Selected(u) Then
            addme = Me.ListHistory.List(u)
            addme.Offset(0, 1) = Me.ListHistory.List(u, 1)
            addme.Offset(0, 2) = Me.ListHistory.List(u, 2)
            addme.Offset(0, 3) = Me.ListHistory.List(u, 3)
            addme.Offset(0, 4) = Me.ListHistory.List(u, 4)
            addme.Offset(0, 5) = Me.ListHistory.List(u, 5)
            addme.Offset(0, 6) = Me.ListHistory.List(u, 6)
            addme.Offset(0, 7) = Me.ListHistory.List(u, 7)
            addme.Offset(0, 8) = Me.ListHistory.List(u, 8)
            addme.Offset(0, 9) = Me.ListHistory.List(u, 9)

            Set addme = addme.Offset(1, 0)
        End If
    Next u
    For u = 0 To Me.ListHistory.ListCount - 1
        If Me.ListHistory.Selected(u) Then Me.ListHistory.Selected(u) = False

    Next u


    For v = 0 To Me.ListPriceList.ListCount - 1
        If Me.ListPriceList.Selected(v) Then
            addme = Me.ListPriceList.List(v)
            addme.Offset(0, 1) = Me.ListPriceList.List(v, 1)
            addme.Offset(0, 2) = Me.ListPriceList.List(v, 2)
            addme.Offset(0, 3) = Me.ListPriceList.List(v, 3)
            addme.Offset(0, 4) = Me.ListPriceList.List(v, 4)
            addme.Offset(0, 5) = Me.ListPriceList.List(v, 5)
            addme.Offset(0, 6) = Me.ListPriceList.List(v, 6)
            addme.Offset(0, 7) = Me.ListPriceList.List(v, 7)
            addme.Offset(0, 8) = Me.ListPriceList.List(v, 8)
            addme.Offset(0, 9) = Me.ListPriceList.List(v, 9)
            addme.Offset(0, 10) = Me.ListPriceList.List(v, 10)
            addme.Offset(0, 11) = Me.ListPriceList.List(v, 11)
            addme.Offset(0, 12) = Me.ListPriceList.List(v, 12)
            addme.Offset(0, 13) = Me.ListPriceList.List(v, 13)
            addme.Offset(0, 14) = Me.ListPriceList.List(v, 14)
            addme.Offset(0, 15) = Me.ListPriceList.List(v, 15)

            Set addme = addme.Offset(1, 0)
        End If
    Next v
    For v = 0 To Me.ListPriceList.ListCount - 1
        If Me.ListPriceList.Selected(v) Then Me.ListPriceList.Selected(v) = False
    Next v

End Sub

非常感谢/史蒂夫

【问题讨论】:

  • 您能澄清一下您所说的不起作用吗?是否抛出错误?
  • 这可能看起来太明显了,但是当您保存它时,您是否保存为 Excel 工作簿(例如 XLSX)? XLSX 不能包含代码,您需要代码才能使其工作。如果是这种情况,请将其另存为启用宏的工作簿 (XLSM) 或二进制工作簿 (XLSB)。顺便说一句,如果你这样做了,你应该收到一个警告,说明保存为 XLSX 会从工作簿中删除代码。
  • 嗨,Gareth,感谢您回来
  • 将工作表另存为 xlsm 并启用了所有宏(我所有其他宏工作正常。没有错误消息,按钮正常“按下”但数据未传输到工作表。一切正常开发代码和测试后很好,但是当我保存工作簿并重新启动时,它不再工作(我正在使用 excel 2010 和 windows 7)

标签: excel vba command excel-2010 userform


【解决方案1】:

尝试在代码末尾添加Msgbox "I Worked" 以查看它是否执行。

那么,如果是这样,也许您没有引用正确的数据,也许您的 sheet1 不再是您的 sheet1。更推荐使用

    Set addme = Sheets("NAME_SHEET").Cells(Rows.Count, 3).End(xlUp).Offset(1, 0)

如果代码没有执行,那么您必须检查宏是否仍分配给按钮,或者您的 Excel 是否阻止执行宏。

【讨论】:

  • 嗨格雷厄姆,你是对的,Sheet1 不知何故损坏了,命名实际工作表效果很好。非常感谢您的专家帮助,太棒了。史蒂夫
  • 非常感谢Fnayou,肯定是sheet1变了。非常感谢您的意见,谢谢。史蒂夫
猜你喜欢
  • 1970-01-01
  • 2019-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多