1

私が書こうとしている PowerShell スクリプトの目的は、Excel ドキュメントを開いてマクロを実行することです。(マクロは個人用ワークブック ファイルに保存され、personal.xlsb正常に実行されます)

問題 - Excel ファイルを PowerShell コードで開くと問題なく開きますが、 を呼び出してマクロを実行するとRun("NameOfMacro")、マクロが見つからないというエラーが表示されます。開いている Excel ファイルでマクロを検索しようとしましたが、マクロ リストに表示されません。これは、personal.xlsbファイルがロードされていないことが原因のようです。

そのため、Excel ファイルを閉じて手動で開きましたが、マクロがまだ見つかりません。次に、ファイルを手動で開き、personal.xlsbマクロが存在することに気付きますが、マクロは、Excel ファイルまたはその後開いた他の Excel ファイルにはまだ表示されません。ファイルの読み込みが突然停止し
た理由を理解しようとしてイライラする時間の後。personal.xlsb別のことに気付きexcel.exeました-PowerShellコードによって(タスクマネージャーウィンドウを介して)開始されたプロセスを強制終了し、Excelドキュメントを開くと、マクロが利用可能になります!!

だから私は問題をこれに絞り込みました - Personal.xlsbPowerShell経由でExcelファイルを開いたときに開かれていない/ロードされていないため、マクロは利用できません。

なぜこれが起こっているのか、これを解決するために何をする必要があるのか​​ 誰にも分かりますか?

コード参照

$excel = New-Object -comobject Excel.Application
$FilePath = "D:\DailyReport.xls"
$workbook = $excel.Workbooks.Open($FilePath)
$excel.Visible = $true
$worksheet = $workbook.worksheets.item(1)
$excel.Run("SelectDataFromReport")

私が得るエラー -

"31" 個の引数を指定して "Run" を呼び出し中に例外が発生しました: "マクロ 'SelectDataFromReport' を実行できません。このワークブックでマクロを使用できないか、すべてのマクロが無効になっている可能性があります。"
18行目 char:11 + $excel.Run <<<< ("SelectDataFromReport") + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException

ちなみに、私はデフォルトで 64 ビットの PowerShell コンソールを使用していますが、32 ビットのコンソールでもコードを実行しようとしましたが、違いはありませんでした。Excel では、その場所を信頼できる場所として追加し、Excel ファイルをデフォルトで編集モードで開くことを許可しました。

4

2 に答える 2

2

次のように、personal.xlsb 内でマクロを呼び出すことができます。

$excel = New-Object -comobject Excel.Application
$wbPersonalXLSB = $excel.workbooks.open("$env:USERPROFILE\Application Data\Microsoft\Excel\XLSTART\PERSONAL.XLSB")
$FilePath = "D:\DailyReport.xls"
$workbook = $excel.Workbooks.Open($FilePath)
$excel.Visible = $true
$worksheet = $workbook.worksheets.item(1)
$excel.Run("PERSONAL.XLSB!SelectDataFromReport")
$wbPersonalXLSB.Close()
$workbook.save()
$workbook.close()
$excel.quit()
于 2013-09-02T23:26:57.987 に答える