我很擅长使用VBA或其他任何东西将Excel数据移动到外部程序。我做了一些研究,但是我找不到任何真正的答案。
在Excel工作表上,我从第84行开始有多个(从1到1,000左右)行。测量信息:姓氏,名字,性别,身高,体重等。我需要在Oracle Applications表单。
这是我创建的代码,它完成了工作,但它只处理第一行。除了测量行之外,还必须处理初始数据行。我在代码中添加了换行符,以尝试显示Oracle表单中每一行的布局。此外,每行以不同的数字开头。它从10开始,以10的增量增加。
需要长字符串才能访问表单中的另一组列。如果您手动执行此操作,则可以使用下拉菜单,但我认为在VBA中不可能。可能吗?或者使用VBA以外的其他方式做得更好?
Sub MoveToOracle()
AppActivate "Oracle Applications - cbsProd (11.5.10.2)"
Application.Wait (Now + TimeValue("0:00:01"))
SendKeys ("10")
SendKeys ("{TAB}")
SendKeys ("A")
SendKeys ("{TAB}")
SendKeys Range("E1")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("ENV")
SendKeys ("{DOWN}")
SendKeys ("20")
SendKeys ("{TAB}")
SendKeys ("1")
SendKeys ("{TAB}")
SendKeys ("FN{F3}")
SendKeys ("{TAB}")
SendKeys Range("A2")
SendKeys ("{TAB}")
SendKeys Range("B2")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys ("{TAB}")
SendKeys Range("C2")
SendKeys ("{TAB}")
SendKeys Range("D2")
SendKeys ("{TAB}")
SendKeys Range("E2")
SendKeys ("{TAB}")
SendKeys Range("F2")
SendKeys ("{TAB}")
SendKeys Range("G2")
End Sub
编辑:不会从Excel工作簿中读取读取订单号。每个新行都需要以10为增量的唯一编号开始,从10开始。我不知道如何使用SendKeys循环访问Excel数据。
另外,我几乎不习惯使用Excel。我没有dev访问权限来创建或管理数据库。
答案 0 :(得分:0)
据我所知,VBA没有可用于与oracle表单进行交互的公共API,所以你最好的选择就是这样。
编辑:
编辑:
或者,您可以为此创建临时数据库。将数据从Excel工作表导出到该临时数据库,然后从中读取数据。 excel中内置了一个导出函数,该表单应该很容易填充后面的oracle数据库。
答案 1 :(得分:0)
Sub MoveToOracle()
' Oracle Applications Forms is a java VM window
' VBA code interaction with Controls within the VM window is by the use of sendkeys
' One commercial alternate application is Data Load.
'
AppActivate "Oracle Applications - cbsProd (11.5.10.2)"
' API SetForegroundWindow preferred over AppActivate
Text string for 1 st row in Oracle Applications
Let Field_Text = "10" & "{TAB}" & "A" & "{TAB}" & Range("E1").Value & "{TAB}" & "{TAB}" & "{TAB}" & "ENV" & "{DOWN}"
' When using sendkeys the NUMLOCK is toggled on / off with each call of SendKeys
' NUMLOCK ON
Let SendKeysString = Field_Text & "{NUMLOCK}"
SendKeys Field_Text
' Preferred dedicated pause sub using API sleep
' Author Kevin zorvek Posted on 2007-06-22 http://www.experts-exchange.com/
' Pause 0.6 seconds here for Oracle Applications before continuing
' Allows for Oracle Applications to catch up
' NUMLOCK ON
' Place pause code here
Let SendKeysString = vbNullString
AppActivate "Oracle Applications - cbsProd (11.5.10.2)"
' Text string for 2 nd row in Oracle Applications
Let Field_Text = "" ' Empty variable
Let Field_Text = "20" & "{TAB}" & "1" & "{TAB}" & "FN{F3}" & "{TAB}" & Range("A2").Value & "{TAB}" & Range("B2").Value
Let Field_Text = Field_Text & "{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}"
Let Field_Text = Field_Text & Range("C2").Value & "{TAB}" & Range("D2").Value & "{TAB}" & Range("E2").Value & "{TAB}" & Range("F2").Value & "{TAB}" & Range("F2").Value
Let Field_Text = Field_Text & "{NUMLOCK}"
SendKeys Field_Text
' Pause 0.6 seconds here for Oracle Applications before continuing
' Allows for Oracle Applications to catch up
' NUMLOCK ON
' Place pause code here
Let SendKeysString = vbNullString
End Sub