私のアプリケーションでは、マクロを含む.xlsmファイル(データを.xlsmファイルにコピーする)と、そのマクロを実行する.xlsxファイルを開きます。私のファイルがと呼ばれているFileWithMacro.xlsm
としましょうFileThatExecutesMacro.xlsx
。このアプリケーションはサーバー上で必要ですが、ローカルで開発しました。アプリケーションをデバッグするために、ファイルをに配置しますC:\Users\myUser\Documents\
。
私はFileWithMacro.xlsm
このように開いています:
Excel.Application excel = new Excel.Application();
Excel.Workbook workbook = excel.Workbooks.Open(serverPath + "FileWithMacro.xlsm");
Excel._Worksheet worksheet = workbook.Sheets["FileThatExecutesMacro"];
その後、マクロを実行するメソッドを呼び出します。
RunMacro(serverPath + "FileThatExecutesMacro.xlsx");
私の方法は次のようになります。
private static void RunMacro(string source)
{
Excel.Application excel = new Excel.Application();
Excel.Workbook workbook = excel.Workbooks.Open(source);
Excel._Worksheet worksheet = workbook.Sheets[1];
worksheet.Activate();
try
{
excelThatRunsMacro.Run("FileWithMacro.xlsm!MyMacro");
workbook.Save();
excelThatRunsMacro.Quit();
}
// and so on
}
ローカルでは、マクロは問題なく機能します。すべてのパスを変更し、コードの出力をサーバー(\\ myServer \ someUrl ...)にコピーすると、次の例外が発生します。
'C:\ Users \ myServerUser \ Documents \ FileWithMacro.xlsm'が見つかりませんでした。
すべてのパスを正しいサーバーの場所に変更しましたが(コードとマクロにローカルパスがなくなったと確信しています)。自分のフォルダbin
とobj
フォルダを削除してプロジェクトを再構築しましたが、何も変わりませんでした。新しいプロジェクトを作成し、ローカルパスを使用せずにビルドしたのですが、同じエラーが発生しました。私は何が間違っているのですか?あるexcel.Run
マクロ検索、デフォルトでDocuments
フォルダを?
それともWindows("FileWithMacro.xlsm").Activate
、マクロの行が原因で問題が発生しますか?マクロを手動で実行すると、正常に機能します。コードを実行すると機能しません。
なぜ例外が発生したのかわかりませんでした。ただし、回避策を見つけました。マクロを実行する前FileWithMacro.xlsm
に、エラーメッセージの場所にをコピーします。その後、今までと同じようにコードを使用すると、FileWithMacro.xlsm
がすでに使用されているというメッセージが表示されます。これを修正するExcel.Application
には、メソッドにを渡して、新しいインスタンスを作成する代わりにこのインスタンスを使用する必要がありました。
private static void RunMacro(Excel.Application excel, string source)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加