VBS文件仅在双击时才有效

时间:2014-06-12 15:29:29

标签: vbscript access-vba

我正在尝试使用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文件,但文本文件没有被创建,我无法弄清楚原因。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

如果要在脚本所在的同一文件夹中创建输出文件,可以使用WScript对象的ScriptFullName属性:

outputFolder = fs.GetParentFolderName(WScript.ScriptFullName)
f = fs.BuildPath(outputFolder, "gpsTempFile.txt")