我正在尝试使用Windows 8 Location API从内置传感器获取GPS坐标,并将这些坐标返回到MS Access。但是,由于API中使用了不受支持的变体类型,Access无法可靠地使用其对象。我试图使用VBScript文件提出解决方法,并以某种方式将值返回到MS Access(使用2010和2013)。我能想到的最简单的方法是吐出一个txt文件,由Access读取然后删除。
当我从Windows资源管理器(双击文件)运行它时,我的VBS文件工作正常,但是当从VBA代码运行它时,我找不到让它正常工作的方法。这是VBS文件:
Dim latlongfactory
Dim rptLong, rptLat
Dim report
Dim keepSleeping
Dim fs, f
Dim ts
Set latlongfactory = Wscript.CreateObject("LocationDisp.LatLongReportFactory", "llf_")
Set fs = Wscript.CreateObject("Scripting.FileSystemObject")
f = fs.BuildPath(CurrentDirectory, "gpsTempFile.txt")
keepSleeping = True
latlongfactory.ListenForReports(1000)
Sub llf_NewLatLongReport(report)
rptLong = report.Longitude
rptLat = report.Latitude
keepSleeping = False
End Sub
Do While keepSleeping
Wscript.Sleep(20)
Loop
Set ts = fs.CreateTextFile(f, True)
ts.WriteLine rptLat & "," & rptLong
ts.Close
Set fs = Nothing
Set latlongfactory = Nothing
set report = Nothing
当通过VBA运行时,它不再创建文本文件,我不完全确定原因。我尝试在脚本末尾添加一个Msgbox,以查看代码是否正在运行。 Msgbox确实出现了。
我用来在Access VBA中执行的行是:
Shell "Wscript """ & CurrentProject.Path & "\gpscoordinates.vbs""", 1
它运行VBS文件,但文本文件没有被创建,我无法弄清楚原因。任何帮助将不胜感激!
答案 0 :(得分:1)
如果要在脚本所在的同一文件夹中创建输出文件,可以使用WScript
对象的ScriptFullName
属性:
outputFolder = fs.GetParentFolderName(WScript.ScriptFullName)
f = fs.BuildPath(outputFolder, "gpsTempFile.txt")