2016-05-03 8 views
0

私は.batファイルを持っています。これをExcelワークブックから取り出した.vbsを実行するために使用しています。しかし、私の.vbsファイルの問題は、それが、私はそれが必要な特定のブックを参照していないということです特定のワークブックのバッチから.vbsを実行します。

echo Starting program 

start C:\Users\midi\Desktop\Refresh_Data_Connection.vbs 

echo Finish program 

は現在、私の.batファイルは次のようになります。どのように.vbsを設定して、デスクトップに保存されている特定のワークブックを変更できますか?ヘルプ/フィードバックや正しい方向へのプッシュは、本当に役立つでしょう、事前に感謝!

私のVBSは次のとおりです。

Sub RefreshConns() 


With Application 
    .EnableEvents = False 
    .ScreenUpdating = False 
End With 
Sheets("Run Macro").Activate 
Dim connName As String ' connection name 
Dim connStr As String ' connection string 
Dim sqltext ' SQL text 

Dim TempconnName As String ' temporary connection name 
Dim TempconnStr As String ' temporary connection string 
Dim Tempsqltext ' temporary SQL text 
Dim i As Integer 
Dim SiteName As String 

SiteName = ActiveSheet.Cells(1, 2) 
'MsgBox (SiteName) 
For i = 5 To 11 
connName = ActiveSheet.Cells(i, 1).Value 
connStr = ActiveSheet.Cells(i, 2).Value 
sqltext = ActiveSheet.Cells(i, 4).Value 
'MsgBox (connName) 

TempconnStr = Replace(connStr, "SiteNameVBA", SiteName) 
'Debug.Print (ActiveWorkbook.Connections(connName).ODBCConnection.Connection) 
'MsgBox (TempconnStr) 
'Tempsqltext = Replace(sqltext, "SiteNameVBA", SiteName) 

'On Error Resume Next 
ActiveWorkbook.Connections(connName).ODBCConnection.CommandText = sqltext 
ActiveWorkbook.Connections(connName).ODBCConnection.Connection = "ODBC;" & TempconnStr 
ActiveWorkbook.Connections(connName).Refresh 

Next i 

With Application 
    .EnableEvents = True 
    .ScreenUpdating = True 
End With 
End Sub 


Public Function ZeroToBlank(x As String) As String 
If x = "0" Then 
    ZeroToBlank = "" 
Else 
    ZeroToBlank = x 
End If 
End Function 
+2

あなたのvbsコードを見ずに言うのは難しいです。 – SomethingDark

+0

これは公正で、今私のVBを含むように更新! – midiman

答えて

1
Set xlBook = GetObject("C:\Users\User\Documents\Super.xls") 
For each wsheet in xlbook.worksheets 
    msgbox wsheet.name 
next 

です。 VBSにはExcelの定数が存在しないことを覚えておいてください.VBSはバリアントしか持たないので、dim x as somethingはありません。だからちょうどdim x。新しいExcelを起動し、Excel、それの値に置き換え定数(43)を示すするために、Excel

Set GetExcelApp = GetObject("", "Excel.Application") 
Msgbox GetExcelApp 

の実行中のコピーに

他の方法。

set xlapp = createobject("Excel.Application") 
xlapp.Workbooks.Open "C:\Users\User\Documents\Super.xls" 
'43 is 95/97 look up xlExcel9795 in object browser to see other options 
xlapp.ActiveWorkbook.SaveAs "C:\Users\User\Documents\Super.xls", 43 
+0

ので、例の代わりに: "文字列 '接続名として"暗黙のconnNameは "dim connName文字列'接続名"でしょうか?ここで混乱のためにお詫び申し上げます、私は前にvbsに直接作業する必要はなかった。 – midiman

+1

いいえ、 'dim connName'(vbsとexcelのvbaでは' variantとして 'を意味します)だけです。 ExcelのVBAはこのプログラミングスタイルもサポートしています( 'as stringはExcelではオプションです)。 VBScriptはExcelに貼り付けることができますが、通常は逆の方法ではありません。 –

+0

ありがとう!私は、VBのコードに別のエラーがあるが、適切なドキュメントの別の質問にそれを投稿します。 – midiman

2

一つの方法は、setxを使用してシステム環境変数を宣言することです。 管理権限を使用してバッチを実行すると、これを試してみてください。もし

setx PATHFILE "/path/file.xls" /M 

チェックが宣言されています

set | find "PATHFILE" 

そして、あなたのVBSであなたのワークブックを開くための機能Environ()でそれを読む:

Workbooks.Open Environ("PATHFILE") 

編集

システム環境変数(/m引数)を使用する必要はありませんが、ユーザー環境のみを使用できます。ユーザーとシステム環境の変数を読み取るためにプログラムを再起動する必要があることを覚えておく必要があります。

+0

私もこの方法を試してみましたが、成功しました!ありがとう、 – midiman

関連する問題