bash
MAC OSXでVBAを使用してファイルを実行するにはどうすればよいですか
次のコードを試しました
location = FolderPath(ThisWorkBook.FullName)
これは、現在のディレクトリからファイル名を引いたものを返します。
に続く
Shell(location &"runmybatch.sh")
これを行ったのは、bash スクリプトが Excel スプレッドシートと同じフォルダー内にあるためです。
これを難しくしているいくつかの驚きがあります!
それ以外は、 Shellコマンドを使用して bash スクリプトを実行できるはずです。ここでは、開始するための段階的な手順を示します。
#!/bin/bash open /Applications/Calculator.app/
Shell ActiveWorkbook.Path & ":test.sh"
シェルコマンドがうまくいかなかったのですが、Excel2011のapplescriptでうまくいったことは次のとおりです。
script_s = "do shell script ""/Users/user/path/to/script/rubyscript_09.rb"""
MacScript script_s
スクリプトに''のシバンを使用させる必要があることがわかりました#!/usr/bin/env ruby
(rubyバージョンマネージャーのインストール後)
呼び出し元ファイルのフォルダーのサブフォルダーにあるファイルをアドレス指定するには、次を使用します。
FilePathName_s = ThisWorkbook.Path & ":subfolder:filename"
これにより、'sのパスが返されます。これは、の' s:
に変換する必要があると思います。これは、AppleScript、、またはVBAを使用して実行できます。/
do shell script
quoted form of POSIX path of FilePathName_s
FilePathName_s = "/" & Replace(FilePathName_s, ":", "/")
私は FolderPath コマンドを使用しませんでした。私には利用できないようですので、後で調査します。以下は、OSX Excel から .sh ファイルを実行できることを確認するためにテストしたサンプル コードです。
テストに使用した .sh ファイルはデスクトップに配置され、「open /Applications/Calculator.app」という行のみが含まれています。
OSX 上の Excel から .sh を呼び出す VBA コードは次のとおりです。
Dim DesktopFolder As String
DesktopFolder = MacScript("return (path to desktop folder) as string")
Dim ScriptFile As String
ScriptFile = DesktopFolder & "test.sh"
RetVal = Shell(ScriptFile, vbNormalFocus)
特定のフォルダーでのみ機能するかどうかを確認することにしたので、.sh ファイルを /tmp フォルダーに移動し、ファイルを実行できませんでした。パスをどのようにエンコードしても、単に「ファイルが見つかりません」というエラーが発生しました。最終的に、OSX の /tmp ファイルは /private/tmp にマップされるシンボリック リンクであることがわかりました。そのパスを使用すると、すべて正常に動作するように見えます。
Dim ScriptFile As String
ScriptFile = "Macintosh HD:private:tmp:test.sh"
RetVal = Shell(ScriptFile, vbNormalFocus)
とにかく、それが少し役立つことを願っています。私はより良い方法を探し続けます.ファイルの場所が確実に何であるかを動的に見つけるために何かが必要です.
また、単純な bash スクリプトをグローバル パス (/usr/bin) に配置し、すべてのユーザーが読み取りと実行のアクセス許可を持っていたにもかかわらず、簡単な bash スクリプトを動作させるのに苦労しました。スクリプトが失敗する原因は 2 つあります。AppleScript 環境とユーザーの bash 環境の違いによるアクセス許可とパスです。Office 2011 for Mac の VBA シェル関数での議論は、私の問題を解決するのに役立つことがわかりました。これが私が最終的に落ち着いたプロセスです。
Excel は根底にある詳細を隠していたので、AppleScript Editor を使用することをお勧めします。トラブルシューティング中に、私が見た意味のない Excel エラーよりも優れた洞察が得られることを願っています。
AppleScript Editor を使用して、スクリプトが実際にどのユーザーとしても、どのような環境変数が使用されていても機能することを確認します。
二重引用符を二重にせずに、単純なスクリプトを新しいファイルに入力します-私の読み取り
do shell script "parseCsvAndOpen.sh"
シンプルなスクリプトを AppleScript Editor から vba にコピーして、まだ機能することを確認します
二重引用符を二重引用符で囲み、MacScript コードの後に二重引用符で囲むことができました。
MacScript "do shell script ""parseCsvAndOpen.sh"""
それは確かに 1 つ、2 つ、そして 3 つの二重引用符文字です! (おそらく二重引用符をエスケープします)
MS Office for Mac がインストールされていないため、提案した回答をテストできません。Bash のバイナリ (つまり /bin/bash) を呼び出して、実行するスクリプトの名前を引数として渡すことができるはずだと思います。これにより、許可ビットに関する問題が回避され、2 番目の引数のパス名が通常の Unix スタイルの / で区切られたものになることが保証されます。最初の引数については、PATH 環境変数を使用する必要があるため、パスを指定せずに名前で bash を呼び出すだけで十分な場合があります。
全体として、まだテストしていないので、これを試してみます:
Shell("bash runmybatch.sh")
または、作業ディレクトリが正しくないために機能しない場合は、
Shell("bash '" & location & "/runmybatch.sh'")
ここで、場所はワークブックのディレクトリへの / 区切りのパスです。一重引用符は、パス内のスペースやその他のエキゾチックな文字を処理する必要があります。
必要なことは、VBA マクロに次のコマンドを記述することです。
Shell "C:Path\to\script\location\script.sh"
(パスを二重引用符で囲むことを忘れないでください)
スクリプトの場所を取得する最善の方法は、マクロを記録して、bash スクリプトが存在するフォルダーと同じフォルダーにブックを保存することです。そうすれば、Excel がそのパスをどのように呼び出し、上記のシェル コマンドにコピー/貼り付けするかを後で確認できます。