【问题标题】:"Variable not defined" when running generated script in Excel在 Excel 中运行生成的脚本时出现“变量未定义”
【发布时间】:2018-08-22 22:38:15
【问题描述】:

因此,我的任务是通过从电子表格中提取值、将它们插入 SAP 表单并从 SAP 事务中获取值来将 Excel 与 SAP 连接起来。

我假设我只需要为此运行 VBA 文件。当我运行代码时,我的电子表格已打开并且我已登录到 SAP。

错误是:

变量未定义

代码:

If Not IsObject(application) Then
   Set SapGuiAuto  = GetObject("SAPGUI")
   Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
   Set connection = application.Children(0)
End If
If Not IsObject(session) Then
   Set session    = connection.Children(0)
End If
If IsObject(WScript) Then
   WScript.ConnectObject session,     "on"
   WScript.ConnectObject application, "on"
End If
session.findById("wnd[0]").maximize

Dim objExcel as Object
Dim objSheet as Object

Set objExcel = GetObject(, "Excel.Application")
Set objSheet = objExcel.ActiveWorkbook.ActiveSheet

COL1 = Trim(CStr(objSheet.Range("A1").Value)) 'Column1

session.findById("wnd[0]/tbar[0]/okcd").text = "/nCS15"
session.findById("wnd[0]/tbar[0]/btn[0]").press

session.findById("wnd[0]/usr/ctxtRC29L-MATNR").text = COL1
session.findById("wnd[0]/usr/ctxtRC29L-MATNR").setFocus

【问题讨论】:

  • 你能提供更多关于什么不起作用的细节吗?它是错误的,还是只是不符合您的预期?
  • 欢迎。请记住,我们无法运行您的代码或查看您的屏幕。您的问题没有解释实际问题。你的代码会抛出错误吗?什么错误和什么线?它的行为不符合预期吗?解释会发生什么。请不要写“什么都没有发生”或“它不起作用”。
  • 当您说 VBScript 时,您的意思是从 .vbs 文件还是从 Excel 内部的 VBA 过程运行它?

标签: vba sap-gui


【解决方案1】:

感谢您的反馈。事实证明,我需要在运行脚本之前在 Excel 中声明 SAP 对象。这是适用于 Excel 的脚本。

Dim Application, Connection, Session As Object
Set SapGuiAuto = GetObject("SAPGUI")
Set Application = SapGuiAuto.GetScriptingEngine
Set Connection = Application.Children(0)
Set Session = Connection.Children(0)

If Not IsObject(Application) Then
   Set SapGuiAuto = GetObject("SAPGUI")
   Set Application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
   Set Connection = Application.Children(0)
End If
If Not IsObject(Session) Then
   Set Session = Connection.Children(0)
End If
If IsObject(WScript) Then
   WScript.ConnectObject Session, "on"
   WScript.ConnectObject Application, "on"
End If
Session.findById("wnd[0]").maximize

Dim objExcel As Object
Dim objSheet As Object

Set objExcel = GetObject(, "Excel.Application")
Set objSheet = objExcel.ActiveWorkbook.ActiveSheet

COL1 = Trim(CStr(objSheet.Range("A1").Value)) 'Column1

Session.findById("wnd[0]/tbar[0]/okcd").Text = "/nCS15"
Session.findById("wnd[0]/tbar[0]/btn[0]").press

Session.findById("wnd[0]/usr/ctxtRC29L-MATNR").Text = COL1
Session.findById("wnd[0]/usr/ctxtRC29L-MATNR").SetFocus

【讨论】:

  • 下一个问题的反馈:发布错误!!!像“不工作”和“不运行”这样的词绝对没有任何意义。
  • 很高兴您得到了解决方案,并感谢您将其发布为答案(新贡献者通常只是编辑问题)。顺便说一句,你的前 3 个 IF 语句现在是多余的,如果你删除它们,你应该得到相同的结果。
  • 请记住,您已将 ApplicationConnection 声明为隐式变体并且它们是关键字。请改用 Dim App as Object, Conn as Object
  • @DeanOC 带有隐式变体声明,Ifs 之前只适用于应用程序和连接,因为它们不是变体/对象,如果它们被声明为对象,它们就不会像 Session 那样工作,但是您应该检查 Is Nothing 以确定它们是否设置为任何内容,如果没有,则需要设置它们!
  • 根据您的回答,我假设您遇到错误“未定义变量”,可能是因为您的 VBA 模块顶部有 Option Explicit 行(不是您摘录的一部分)。因此,我更改了问题的标题以使其有意义。
猜你喜欢
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多