私はこれが正確な問題であるという不確実性を持ってこれを書いています. より確実にするために、Spyderで問題をデバッグしてみましたが、役に立ちませんでした。
問題は、このオプションを使用すると、スクリプトが Spyder 内のインタープリターからは正常にWorkbook.set_mock_caller(path)
実行されますが、VBA 内からは正常に実行されないことです。
空の選択になってget_selection()
いるのではないかと思いますが、途中でコードを停止できないため、確実にわかりません。
いずれにせよ、私のスクリプトはパッケージを使用する最初の試みであるため、以前に使用したことがある人にとってはそれほど複雑ではありません。関数が行うことは、Excel 選択テーブルを最初の列で統合し、残りの列を一緒に追加することです。
def xl_consolidate():
thisWB = xl.Workbook.caller()
thisSlctn = thisWB.get_selection(asarray=True, atleast_2d=True)
thisTable = thisSlctn.value
(m,n) = thisSlctn.shape
r = thisSlctn.row
c = thisSlctn.column
tableDict = dict()
tableVals = thisTable[:, 1:].astype(np.float)
for i in range(m):
thisKey = thisTable[i, 0]
if thisKey not in tableDict:
tableDict[thisKey] = tableVals[i, :]
else:
tableDict[thisKey] += tableVals[i, :]
modTable = sorted(tableDict.keys(), key = lambda k:(-tableDict[k][0], k))
modTable = [np.hstack((key, tableDict[key])) for key in modTable]
thisSlctn.clear()
xl.Range((r, c)).value = modTable
sorted
関数でエラーが発生し、次のように表示されます。
Error
modTable = sorted(tableDict.keys(), key = lambda k:(-tableDict[k][0], k))
IndexError: index 0 is out of bounds for axis 0 with size 0
VBAから関数を呼び出すときに選択しました。
追加の質問として、VBA から実行したときにコードをデバッグできるかどうかを知りたいです。これは私がそれに取り組むのに役立ちます。
ご協力ありがとうございました