2014-06-12 20 views
0

我想要使用Windows 8 Location API來從內置傳感器獲取GPS座標,並將這些座標返回給MS Access。但是,由於API中使用的不支持的變體類型,Access無法可靠地使用其對象。我試圖想出一個使用VBScript文件的解決方法,並以某種方式將值返回給MS Access(使用2010和2013)。我能想到的最簡單的方法是吐出一個txt文件,通過Access讀取然後刪除。VBS文件僅在雙擊時才起作用

當我從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確實出現了。

我在使用VBA的訪問執行該生產線是:

Shell "Wscript """ & CurrentProject.Path & "\gpscoordinates.vbs""", 1 

它運行VBS文件,但不獲取創建的文本文件,我想不通爲什麼。任何幫助將非常感激!

+2

您使用一個變量稱爲'CurrentDirectory' 。它的價值在哪裏設定? – Bond

+1

由於未初始化的變量「CurrentDirectory」,我懷疑該文件實際*是*創建的,但不在您期望的位置。 –

+0

嗯,我想這是我研究時會發生的事情,但不要徹底閱讀。出於某種原因,我認爲CurrentDirectory是一個可用常量來引用文件的當前位置。這是我告訴自己總是使用Option Explicit的地方......現在我通過創建一個Wscript.Shell來限定它。現在我看到,雙擊該文件時,活動目錄就是文件所在的位置,但是當我從VBA運行時,它是My Documents文件夾(我在那裏找到了該文件)。所以現在我的問題是如何指定VBS文件本身的目錄位置? – user3240517

回答

1

如果你想在該腳本所在的同一文件夾中創建輸出文件,您可以使用WScript對象的ScriptFullName屬性:

outputFolder = fs.GetParentFolderName(WScript.ScriptFullName) 
f = fs.BuildPath(outputFolder, "gpsTempFile.txt") 
相關問題