点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,大家
我们有数千个日记帐分录要发布到SAP Business One中。 因此,我们决定编写一个小程序来完成这项工作。
我们不是使用Visual Studio开发完整的附件,而是决定使用Excel Visual Basic( VBA)处理DI API。
这是我们的策略:
- 我们有一个Excel工作表,其中包含所有日记帐分录的数据。
- Excel中的每一行代表一个日记帐分录。
- 列的范围代表标题数据。
- 另一列范围表示JE中第一行的条目。
- 类似于JE中第二行和第三行中的条目。
- 当我们按下Excel工作表中的按钮时,将执行VBA,并且我们使用循环来确保日记条目逐一发布。
- 每次发布日记帐时,Excel行都被染成红色。
- 不幸的是,该应用程序无法正常工作。
我们的问题:
如果Excel工作表仅包含1行(1 JE),则将其发布而不会出现问题。
但是,如果Excel工作表包含几行(几个JE),则仅成功发布第一行。 无法发布第二行(第二JE)。 显示此消息:
我们不理解这个问题,因为我们没有尝试过将Dr和Cr张贴在一行中。
无论如何,如果我们删除Excel的第一行,则拒绝发布的第二行现已成功发布。
因此,似乎在执行循环时会出现错误。
希望有人可以提供帮助。
谢谢
利昂
--------------------------------------------------- ----------------------
以下是我们的Excel工作表的图片:
--------------------------------------------------- --------------------------
这是我们的VBA代码:
未显示连接详细信息,但它们可以正常工作。
Dim oCompany作为SAPbobsCOM.Company 公开子CreateOrder_Click() 尽可能长的Dim lRetCode Dim sErrMsg作为字符串 答案为整数 昏暗计数器为整数:计数器= 1 Dim RowNo作为整数:RowNo = 13 '连接到SBO 登录'//我们没有显示代码,但是可以正常工作 '声明销售订单DI API对象 作为SAPbobsCOM.JournalEntries的昏暗对象 设置oJE = oCompany.GetBusinessObject(oJournalEntries) 如果(Worksheets(" JEsalesINV")。Cells(RowNo,1)="")然后 MsgBox"没有更多条目可发布!",vbExclamation 退出子 万一 答案= MsgBox("发布日记条目?",vbYesNo + vbQuestion + vbDefaultButton2) 如果答案= vb否 退出子 万一 '================================================= =================== 'Journal Entry工作表= JEsalesINV '================================================= =================== 同时执行(Worksheets(" JEsalesINV")。Cells(RowNo,1)<>""和Counter <= 10) NoOfRows = Worksheets(" JEsalesINV")。Cells(RowNo,10).Text '//有些JE有2行,有些3 选择Case NoOfRows'//日记帐分录中的行数 情况2'//如果日记帐分录中有2行 '----------------------- 标题日记帐分录 '---------------------- oJE.ReferenceDate = Worksheets(" JEsalesINV")。Cells(RowNo,3).Text oJE.DueDate = Worksheets(" JEsalesINV")。Cells(RowNo,4).Text oJE.TaxDate = Worksheets(" JEsalesINV")。Cells(RowNo,5).Text oJE.Memo = Worksheets(" JEsalesINV")。Cells(RowNo,6).Text oJE.Reference = Worksheets(" JEsalesINV")。Cells(RowNo,7).Text oJE.Reference2 = Worksheets(" JEsalesINV")。Cells(RowNo,8).Text '--------------------------------------- '日记帐分录-第1和2行的详细信息 '--------------------------------------- oJE.Lines.AccountCode = Worksheets(" JEsalesINV")。Cells(RowNo,11).Text oJE.Lines.LineMemo = Worksheets(" JEsalesINV")。Cells(RowNo,12).Text oJE.Lines.Debit = Worksheets(" JEsalesINV")。Cells(RowNo,13).Text oJE.Lines.Reference1 = Worksheets(" JEsalesINV")。Cells(RowNo,14).Text oJE.Lines.Reference2 = Worksheets(" JEsalesINV")。Cells(RowNo,15).Text oJE.Lines.ReferenceDate1 = Worksheets(" JEsalesINV")。Cells(RowNo,3).Text oJE.Lines.TaxDate = Worksheets(" JEsalesINV")。Cells(RowNo,5).Text oJE.Lines.DueDate = Worksheets(" JEsalesINV")。Cells(RowNo,4).Text oJE.Lines.TaxGroup =" O1.1" oJE.Lines.Add oJE.Lines.AccountCode = Worksheets(" JEsalesINV")。Cells(RowNo,17).Text oJE.Lines.LineMemo = Worksheets(" JEsalesINV")。Cells(RowNo,18).Text oJE.Lines.Credit = Worksheets(" JEsalesINV")。Cells(RowNo,19).Text oJE.Lines.Reference1 = Worksheets(" JEsalesINV")。Cells(RowNo,20).Text oJE.Lines.Reference2 = Worksheets(" JEsalesINV")。Cells(RowNo,21).Text oJE.Lines.ReferenceDate1 = Worksheets(" JEsalesINV")。Cells(RowNo,3).Text oJE.Lines.TaxDate = Worksheets(" JEsalesINV")。Cells(RowNo,5).Text oJE.Lines.DueDate = Worksheets(" JEsalesINV")。Cells(RowNo,4).Text oJE.Lines.Add lRetCode = oJE.Add 如果lRetCode <> 0然后 sErrMsg = oCompany.GetLastErrorDescription MsgBox sErrMsg 退出子 否则,如果iRetCode = 0,则 '//在Excel中发布行后,我们将行涂成红色 行数(行数)。选择 Selection.Interior.Color = vbRed 计数器=计数器+ 1 行号=行号+ 1 万一 情况3'//如果日记帐分录中有3行 '----------------------- 标题日记帐分录 '---------------------- oJE.ReferenceDate = Worksheets(" JEsalesINV")。Cells(RowNo,3).Text oJE.DueDate = Worksheets(" JEsalesINV")。Cells(RowNo,4).Text oJE.TaxDate = Worksheets(" JEsalesINV")。Cells(RowNo,5).Text oJE.Memo = Worksheets(" JEsalesINV")。Cells(RowNo,6).Text oJE.Reference = Worksheets(" JEsalesINV")。Cells(RowNo,7).Text oJE.Reference2 = Worksheets(" JEsalesINV")。Cells(RowNo,8).Text '------------------------------------------- '日记帐分录-第1,2和3行的详细信息 '-------------------------------------------- oJE.Lines.AccountCode = Worksheets(" JEsalesINV")。Cells(RowNo,11).Text oJE.Lines.LineMemo = Worksheets(" JEsalesINV")。Cells(RowNo,12).Text oJE.Lines.Debit = Worksheets(" JEsalesINV")。Cells(RowNo,13).Text oJE.Lines.Reference1 = Worksheets(" JEsalesINV")。Cells(RowNo,14).Text oJE.Lines.Reference2 = Worksheets(" JEsalesINV")。Cells(RowNo,15).Text oJE.Lines.ReferenceDate1 = Worksheets(" JEsalesINV")。Cells(RowNo,3).Text oJE.Lines.TaxDate = Worksheets(" JEsalesINV")。Cells(RowNo,5).Text oJE.Lines.DueDate = Worksheets(" JEsalesINV")。Cells(RowNo,4).Text oJE.Lines.TaxGroup =" O1.1" oJE.Lines.Add oJE.Lines.AccountCode = Worksheets(" JEsalesINV")。Cells(RowNo,17).Text oJE.Lines.LineMemo = Worksheets(" JEsalesINV")。Cells(RowNo,18).Text oJE.Lines.Credit = Worksheets(" JEsalesINV")。Cells(RowNo,19).Text oJE.Lines.Reference1 = Worksheets(" JEsalesINV")。Cells(RowNo,20).Text oJE.Lines.Reference2 = Worksheets(" JEsalesINV")。Cells(RowNo,21).Text oJE.Lines.ReferenceDate1 = Worksheets(" JEsalesINV")。Cells(RowNo,3).Text oJE.Lines.TaxDate = Worksheets(" JEsalesINV")。Cells(RowNo,5).Text oJE.Lines.DueDate = Worksheets(" JEsalesINV")。Cells(RowNo,4).Text oJE.Lines.Add oJE.Lines.AccountCode = Worksheets(" JEsalesINV")。Cells(RowNo,23).Text oJE.Lines.LineMemo = Worksheets(" JEsalesINV")。Cells(RowNo,24).Text oJE.Lines.Credit = Worksheets(" JEsalesINV")。Cells(RowNo,25).Text oJE.Lines.Reference1 = Worksheets(" JEsalesINV")。Cells(RowNo,26).Text oJE.Lines.Reference2 = Worksheets(" JEsalesINV")。Cells(RowNo,27).Text oJE.Lines.ReferenceDate1 = Worksheets(" JEsalesINV")。Cells(RowNo,3).Text oJE.Lines.TaxDate = Worksheets(" JEsalesINV")。Cells(RowNo,5).Text oJE.Lines.DueDate = Worksheets(" JEsalesINV")。Cells(RowNo,4).Text oJE.Lines.Add lRetCode = oJE.Add 如果lRetCode <> 0然后 sErrMsg = oCompany.GetLastErrorDescription MsgBox sErrMsg 退出子 否则,如果iRetCode = 0,则 行数(行数)。选择 Selection.Interior.Color = vbRed 计数器=计数器+ 1 行号=行号+ 1 万一 结束选择 循环capture.jpg (22.9 kB)
您好,Leon,
每次循环时,都需要再次重新初始化JournalEntries对象。
移动行代码:
要进入循环,可以在将值分配给NoOfRows变量之前添加此行。
希望有帮助。
亲切的问候,
Diego Lother
嗨,首先,对您建议的智能解决方案表示了很多赞赏。
我有很大的差距要解决:如何将SBO库引用到VBA环境中?
预先感谢您
Hi Diego,
非常感谢您的回答。
它创造了奇迹!
现在,我的程序可以正常运行了。
它在不到5分钟的时间内发布了1000个J.Entries!
最好的问候
Leon
嗨,大家好...
您可以赞这个Excel工作表吗? 从旧版系统导入大量数据到内部日记条目中,我们面临着一些困难。
最诚挚的问候,
Wagner
罪恶 a>
44分钟前首先,您对您建议的智能解决方案表示赞赏。
我有很大的差距要解决:如何将SBO库引用到VBA环境中?
提前谢谢
----
嗨,
打开Excel,VBA屏幕
选择工具>参考
> SAP Business One DI API版本9
希望有帮助
一周热门 更多>