15

bashMAC OSXでVBAを使用してファイルを実行するにはどうすればよいですか

次のコードを試しました

location = FolderPath(ThisWorkBook.FullName) 

これは、現在のディレクトリからファイル名を引いたものを返します。

に続く

Shell(location &"runmybatch.sh")

これを行ったのは、bash スクリプトが Excel スプレッドシートと同じフォルダー内にあるためです。

4

7 に答える 7

3

これを難しくしているいくつかの驚きがあります!

  1. Shell関数は、パスが/ではなく:で区切られていることを想定しています
  2. スクリプトを実行すると、ルート ( / ) ディレクトリが作業ディレクトリになります。

それ以外は、 Shellコマンドを使用して bash スクリプトを実行できるはずです。ここでは、開始するための段階的な手順を示します。

  • デスクトップ ディレクトリに次の bash スクリプトを作成し、test.shという名前を付けます。
#!/bin/bash
open /Applications/Calculator.app/
  • test.sh が実行可能であることを確認します (ターミナル ウィンドウから、chmod +x test.sh ) 。
  • 実行してみてください (ターミナルで./test.shと入力します)。電卓アプリが表示されます。それを終了します。
  • Excel を実行し、新しいワークブックWorkbook1を作成します。
  • この空白のブックをマクロ有効ブックとしてデスクトップディレクトリに保存します。
  • VB を実行: [ツール] > [マクロ] > [Visual Basic Editor ]
  • イミディエイト ウィンドウが表示されていない場合は、[表示] > [イミディエイト ウィンドウ]
  • イミディエイト ウィンドウで、次の VBA コードを入力します。
 Shell ActiveWorkbook.Path & ":test.sh"
  • 電卓アプリが実行されます。
于 2012-06-26T23:46:46.927 に答える
2

シェルコマンドがうまくいかなかったのですが、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 scriptquoted form of POSIX path of FilePathName_sFilePathName_s = "/" & Replace(FilePathName_s, ":", "/")

于 2012-09-07T00:01:23.813 に答える
1

私は 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)

とにかく、それが少し役立つことを願っています。私はより良い方法を探し続けます.ファイルの場所が確実に何であるかを動的に見つけるために何かが必要です.

于 2012-06-23T14:16:57.533 に答える
1

また、単純な bash スクリプトをグローバル パス (/usr/bin) に配置し、すべてのユーザーが読み取りと実行のアクセス許可を持っていたにもかかわらず、簡単な bash スクリプトを動作させるのに苦労しました。スクリプトが失敗する原因は 2 つあります。AppleScript 環境とユーザーの bash 環境の違いによるアクセス許可とパスです。Office 2011 for Mac の VBA シェル関数での議論は、私の問題を解決するのに役立つことがわかりました。これが私が最終的に落ち着いたプロセスです。

Excel は根底にある詳細を隠していたので、AppleScript Editor を使用することをお勧めします。トラブルシューティング中に、私が見た意味のない Excel エラーよりも優れた洞察が得られることを願っています。

  1. AppleScript Editor を使用して、スクリプトが実際にどのユーザーとしても、どのような環境変数が使用されていても機能することを確認します。

    1. Spotlight で、表示されるまで「applescript editor」と入力し、クリックします。
    2. 新しい AppleScript エディタ ファイルを作成する
    3. 二重引用符を二重にせずに、単純なスクリプトを新しいファイルに入力します-私の読み取り

      do shell script "parseCsvAndOpen.sh"
      
    4. スクリプトの「実行」ボタンを押します
    5. 問題を追跡し、変更を加え、AppleScript エディタ内から実行できるようになるまで「実行」ボタンを繰り返し押します
      • ここでの朗報は、StackOverflow または Google に戻って助けを求める必要がある場合に、より狭い検索範囲を使用できることです ;-)
  2. シンプルなスクリプトを AppleScript Editor から vba にコピーして、まだ機能することを確認します

    1. 二重引用符を二重引用符で囲み、MacScript コードの後に​​二重引用符で囲むことができました。

      MacScript "do shell script ""parseCsvAndOpen.sh"""
      

      それは確かに 1 つ、2 つ、そして 3 つの二重引用符文字です! (おそらく二重引用符をエスケープします)

于 2014-01-03T22:50:13.737 に答える
0

MS Office for Mac がインストールされていないため、提案した回答をテストできません。Bash のバイナリ (つまり /bin/bash) を呼び出して、実行するスクリプトの名前を引数として渡すことができるはずだと思います。これにより、許可ビットに関する問題が回避され、2 番目の引数のパス名が通常の Unix スタイルの / で区切られたものになることが保証されます。最初の引数については、PATH 環境変数を使用する必要があるため、パスを指定せずに名前で bash を呼び出すだけで十分な場合があります。

全体として、まだテストしていないので、これを試してみます:

Shell("bash runmybatch.sh")

または、作業ディレクトリが正しくないために機能しない場合は、

Shell("bash '" & location & "/runmybatch.sh'")

ここで、場所はワークブックのディレクトリへの / 区切りのパスです。一重引用符は、パス内のスペースやその他のエキゾチックな文字を処理する必要があります。

于 2012-06-24T14:42:50.783 に答える
0

必要なことは、VBA マクロに次のコマンドを記述することです。

Shell "C:Path\to\script\location\script.sh"

(パスを二重引用符で囲むことを忘れないでください)

スクリプトの場所を取得する最善の方法は、マクロを記録して、bash スクリプトが存在するフォルダーと同じフォルダーにブックを保存することです。そうすれば、Excel がそのパスをどのように呼び出し、上記のシェル コマンドにコピー/貼り付けするかを後で確認できます。

于 2014-09-03T23:46:23.547 に答える