2017-05-01 26 views
2

私はいくつかのスレッドを読んで、Shellを使ってVBAからPythonを呼び出すことができることを発見しました。VBA - 呼び出しPythonスクリプト

は、これは私が持っているものです。

Private Sub CommandButton1_Click() 

    Ret_Val = Shell("C:\Users\....\Anaconda3\python.exe C:\Users\...\REL.py", vbNormalFocus) 

    If Ret_Val <> 0 Then 
     MsgBox "ok!", vbOKOnly 
    End If 

End Sub 

私はOKメッセージ、および開閉秒以内のウィンドウを得ますか。だから私の推測ではPythonを起動していますが、スクリプトは動作しません。

だから私はスパイダーでコードを書いたので、私は多分動作しないことを考えて、私はスパイダーを起動する必要があるかもしれません:

Ret_Val = Shell("C:\Users\...\Anaconda3\Scripts\spyder.exe C:\Users\...\REL.py", vbNormalFocus) 

これはあまりにも多くの時間がかかり、それがどのような私ではないスパイダーを、開きます。欲しいです。また、それが開かれると、スクリプトを起動しません。

何か問題はありますが、それがVBAコードなどのスクリプトに関連しているかどうかはわかりません。スクリプトは、VBAなしでSpyderから実行すると動作します。

これは、Pythonコードの簡単な例です:

# -*- coding: utf-8 -*- 
""" 
Created on Fri Apr 21 08:24:05 2017 

@author: xxxxxx 
""" 
import pandas as pd 
import numpy as np 
import datetime 

RW = pd.read_excel('Raw_data.xlsx', skipinitialspace=True) 
RW=pd.DataFrame(RW, columns = ['Task Id', 'TIDmodRW', 'Start Date', 'End Date', 'Machine', 'Boards']) 

writerRW = pd.ExcelWriter('RW_test2.xlsx', engine='xlsxwriter') 
RW.to_excel(writerRW, sheet_name='sheet1') 
writerRW.save() 
+1

これを[mcve]にするサンプルのPythonスクリプトを提供しないのはなぜですか? –

+0

質問に追加しました。私はそれを単純に保つためにカットしましたが、それは優れたものを書いていません。コードはSpyderで動作します – Filippo

+0

おそらく、エラーハンドラが例外を出力し、ウィンドウの前に結果を表示できるように 'input("任意のキーを押して ")'を持つPythonスクリプトにエラー処理を追加することができます閉じます。 'print()'を賢明に使うことで、エラーを投げているPythonコードの行を特定できますか? –

答えて

1

ビルトインosモジュールのpath.dirname()自動的に入力Excelファイルを見つけるためにあなたのPythonスクリプトの電流経路を検出する(ワークブックを想定して使用することを検討してください.pyスクリプトと同じディレクトリにあります)。次に、OSに依存しないpath.join()を使用して、完全なディレクトリ参照のためにすべてのファイル文字列を連結します。この方法では、バックスラッシュ(Windows)やスラッシュ(Linux/Mac)は必要ないため、オペレーティングシステム間で動作する必要があります。

ExcelファイルとPythonファイルが存在するフォルダ、またはSpyder、VBA、またはコマンドラインを含む呼び出しメソッドが何であれ、スクリプトは完全にローカルワークブックに読み書きを実行する必要があります。

import os            # ADD IMPORT 
import pandas as pd 
import numpy as np 
import datetime 

cd = os.path.dirname(os.path.abspath(__file__))   # LOCATE CURRENT DIR 

# CONCATENATE CURRENT DIRECTORY TO EXCEL BASE FILE NAME 
RW = pd.read_excel(os.path.join(cd, 'Raw_data.xlsx'), skipinitialspace=True) 
RW = pd.DataFrame(RW, columns = ['Task Id', 'TIDmodRW', 'Start Date', 
           'End Date', 'Machine', 'Boards']) 

writerRW = pd.ExcelWriter(os.path.join(cd, 'RW_test2.xlsx'), engine='xlsxwriter') 
RW.to_excel(writerRW, sheet_name='sheet1') 
writerRW.save() 
関連する問題