金蝶二次开发提示下标越界

thgnm 2017-07-03 11:59:17
代码如下:
Case "数据导入"
'此处添加处理 数据导入 菜单对象的 Click 事件

With m_BillTransfer


m_BillTransfer.SetGridText 1, FItemID, "1.01.01.001"
m_BillTransfer.SetGridText 2, FItemID, "1.01.000.00002"
m_BillTransfer.SetGridText 3, FItemID, "1.01.01.001"
m_BillTransfer.SetGridText 4, FItemID, "1.01.01.001"

End With

Case Else

代码如上,在运行的时候,第一行是没问题的,但是到了第二行的时候就提示:


请问要怎么解决?谢谢
...全文
2455 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
脆皮大雪糕 2017-07-05
  • 打赏
  • 举报
回复
目测第一行正常,第二行填入了物料编码,但是并没有显示物料名称,并且楼主说了在第二行出错。推测该控件填入物料ID以后自动到物料表里查找相应记录填写后续字段,但由于第二行的物料编码错了,找不到记录,引起控件内部报错。
of123 2017-07-04
  • 打赏
  • 举报
回复
查 FItemID 值。SetGridText 的第二个参数是列的入口点。
赵4老师 2017-07-04
  • 打赏
  • 举报
回复
注释掉所有On Error Resume Next语句,在VBA IDE中运行, 出错后点击调试,光标会停在出错的那条语句处, 或者 事先在怀疑可能有逻辑错误的语句处设置断点,运行经过断点时中断, 此时可以在立即窗口中使用 ?变量名 或 ?函数名(函数参数) 或 过程名(参数) 辅助调试。
weyciy 2017-07-04
  • 打赏
  • 举报
回复
确定 你的 vsEntry控件 有4行?
thgnm 2017-07-04
  • 打赏
  • 举报
回复
引用 3 楼 of123 的回复:
查 FItemID 值。SetGridText 的第二个参数是列的入口点。


这个Fitemid是通过:
FItemID = GetCtlIndexByFld("FItemID", True)
以及:
Public Function GetCtlIndexByFld(ByVal fldName As String, Optional ByVal isEntry As Boolean = False) As Long
Dim ctlIdx As Long
Dim i As Integer
Dim isFind As Boolean
Dim vValue As Variant
fldName = UCase(fldName)
isFind = False
With m_BillTransfer
If isEntry Then
For i = LBound(.EntryCtl) To UBound(.EntryCtl)
If UCase(.EntryCtl(i).FieldName) = fldName Then
ctlIdx = .EntryCtl(i).FCtlOrder
isFind = True
Exit For
End If
Next i
Else
For i = LBound(.HeadCtl) To UBound(.HeadCtl)
If UCase(.HeadCtl(i).FieldName) = fldName Then
ctlIdx = .HeadCtl(i).FCtlIndex
isFind = True
Exit For
End If
Next i
End If
End With
If isFind = True Then
GetCtlIndexByFld = ctlIdx
Else
GetCtlIndexByFld = 0
End If
End Function
来获取的,是物料编码的列,我如果直接用数字,如:

也是一样的报错,都是在第二行的时候提示下标越界
舉杯邀明月 2017-07-03
  • 打赏
  • 举报
回复
“第二行”不是已经成功执行了吗! 数据都设置到表格上去了………… 你的“FItemID”是啥东东! 凭你贴出来的这点代码,根本不可能有谁“猜”出你的错误是什么原因造成!

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧