Excel VBA 2016 32 位 - 用户窗体 - 运行时错误 9 - 错误消息"Script out of Range"



我在新工作簿中创建了一个新的项目用户形式,并从另一个项目中复制了下面的代码,该项目与此代码完美运行。我将代码复制到了这个新的工作簿项目中,但是即使我修改了文本框名称,我也会继续遇到运行时错误。

代码的目的是在文本框 txt_work_order_no 中自动生成一个工作订单号,然后由" swc"前缀,然后按年,月,然后按数字格式。最终输出应该看起来像SWC201706-00001(每次打开表单时增加(。

 Private Sub UserForm_Initialize()
 '** WORK ORDER NUMBER IN TEXTBOX
                    Me.txt_Work_Order_No.Enabled = True
                        Dim irow As Long
                        Dim ws As cnServiceLog
                        Set ws = cnServiceLog
                       'find last data row from database'
                       irow = ws.Cells(Rows.Count, 1).End(xlUp).Row
                       Me.txt_Work_Order_No = "SWC" & Year(Date) & Format(Month(Date), "00") & "-" & Format(Split(ws.Cells(irow, 1).Value, "-")(1) + 1, "00000")

我介入了代码,并闯入了给我悲伤的代码线,我评论了其余部分,一切都很好,但是显然它不希望我想做。

导致运行时错误的区域是在双零之后(月(日期," 00"(

之后

me.txt_work_order_no =" swc"&年(日期(&格式(月(日期(," 00"(&" - "&格式(split(ws.cells(irow,1(.value," - "((1( 1," 00000"(

我希望有人能够帮助我。...我已经搜索了几天的互联网,但仍然无法解决似乎遇到的任何问题。带着感激之情,theshybutterfly

通常,我想问题是当您拆分ws.Cells(irow,1)时,您没有任何-值。因此,您超出了数组的范围。首先尝试这样:

Me.txt_Work_Order_No = "SWC" & Year(Date) & Format(Month(Date), "00") & "-" & Format(Split(ws.Cells(irow, 1).Value, "-")(0) + 1, "00000")

如果起作用,请尝试根据数组的Ubound为(0)值放置一个变量。这样的东西:

Dim lngUbound as long
lngUbound = ubound(Split(ws.Cells(irow,1),"-")
Me.txt_Work_Order_No = "SWC" & Year(Date) & Format(Month(Date), "00") & "-" & Format(Split(ws.Cells(irow, 1).Value, "-")(lngUbound) + 1, "00000")

上面代码的想法是,您没有猜测您始终具有至少一个-,因此,当您按照此标志拆分时,您始终将创建数组的最后一项拿走。播放代码,它应该起作用。

相关内容

最新更新