2017-08-23 4 views
1

現在作業中のフォルダに手動で移動するのにうんざりしていて、SASでホットキーを作成したいと思っています。私はSASの中から現在のフォルダを開くコマンドを設計しました。しかし、私はそれをホットキーで実行することはできません。私が作成したSAS - ホットキーからマクロを呼び出す際にエラーが発生しました(SAS内からCWDを開きます)

stolen)マクロは:

%macro GetPwd(); 
    %qsubstr(
     %sysget(SAS_EXECFILEPATH) 
    , 1 
    , %length(%sysget(SAS_EXECFILEPATH))-%length(%sysget(SAS_EXECFILENAME)) 
) 
%mend; 

私は私のautocallライブラリにGetPwd.sas上記のように保存されています。対話モードで

、私は現在のSASの作業フォルダにWindowsエクスプローラを開くには、次を使用することができます。私はKEYSメニューに上記の電話をかけるとき

/*The Call:*/ 
%sysexec(start explorer.exe "%GetPwd()" && exit); 

問題が発生します。

enter image description here

私はホットキー(SHF F9)を介してコールを発行すると、Windowsのエクスプローラは「コンピュータ」に開き、私はSASで次のエラーを取得する:

WARNING: Argument 2 to macro function %QSUBSTR is out of range. 
WARNING: Argument 3 to macro function %QSUBSTR is out of range. 

なぜこのエラーがときに発生ん電話はホットキーから発行され、エディタを介して提出されたときには発生しませんか?


私が使用してSAS一時フォルダの場所を開くのと同様の作業で成功を収めている:

%sysexec(start explorer.exe "%sysfunc(pathname(work))" && exit); 

は、上記KEYSメニュー画像にF9を参照してください。

+1

今私はSASにアクセスできないのでテストできませんが、 '%sysexec'コールを直接マクロルーチンに入れて、ショートカットに割り当ててみてください。 'submit '%OpenPwd;' ' –

+1

http://support.sas.com/kb/36/613.html – user2877959

答えて

1

@ user2877959に示されているように、直接的な解決策は不可能と思われます。ここでは、私が考えているものは、次善策です。それはkeyboard macrosSAS Abbreviationsの力を組み合わせた「略語マクロ」と呼ばれるトリックを必要とします。これは、拡張エディタが使用されていることを前提としています。

  1. "略" フィールドにTools > Add Abbreviation...
  2. に行くことによって略語を追加\pwdを置きます。 「略語を挿入するテキスト」には、電話を入力してください%sysexec(start explorer.exe "%GetPwd()" && exit);

これは、トリックが表示される場所です。

  1. Tools > Keyboard Macros > Macros...に移動します。 \pwdがリストに表示されます。これは、\pwdが略語として機能するだけでなく、コードスニペットの短縮形であることができるだけでなく、一連のキーボードマクロコマンドのトリガーとしても機能することができることを意味する。
  2. \pwdのエントリを選択し、[編集]を選択します。利用可能なコマンドから、 "Keyboard macro contents:"に以下を割り当て、 "OK"を押します。 \pwd略語が使用されている今
    Move cursor to end of line 
    Insert carriage return 
    Insert the string "%sysexec(start explorer..." 
    Extend selection to beginning of line 
    


、コールは次の行に置き、自動的に強調表示されます。この略語は、コード行の途中であっても、どこにでも発行することができ、すでに書かれたものを混乱させることはありません。行を削除するには、 "Delete line"のキーボードマクロを作成します。これにより、 \pwdで作成された行が削除され、ソースコードが元の状態に戻ります。

1

user2877959がコメントで指摘しているように、すでに保存されているプログラムを使用している場合を除いて、SAS_EXECFILEPATHとSAS_EXECFILENAMEは利用できません。利用できないため、価値がありません。特に、KEYS環境では、それらは利用できません(ファイルに格納されていないためです)。これは、まだ保存されていない新しいエディタウィンドウでコードを実行することで確認できます。

キーボードマクロを使用して、多かれ少なかれあなたが望むものを達成することができます。同じテキストをキーボードマクロに割り当てます。次に、現在のエディタウィンドウでプログラムを呼び出すコードを入力します。このコードは、実行してオプションで削除できます。 (それを/* */ブロックに埋め込むこともできるので、削除する必要はありません)。

また、プログラムの開始時に常に現在の作業ディレクトリを独自のディレクトリに変更することもできます(同じパスでcdコマンドを送信すると)、エクスプローラを開き、それは正しい場所で始まります。または(SASの起動方法によっては)ショートカットでSASを起動し、適切なディレクトリから起動するように設定できます。これは、開始する必要のある場所がほんのわずかである場合にのみ便利です。

関連する問題