locked
ExcelVBA SaveAsメソッドを使用したファイルアップロードと、シェアポイント上のアクセス許可レベルについて RRS feed

  • 質問

  • ExcelVBAでSaveAsメソッドを使用し、SharePointサーバ上のドキュメントライブラリにファイルを保存するプログラムを作成しました
    普通の投稿ユーザで動作確認してみたところ問題ないように見えたのですが、今回要件としてアクセス許可レベルを追加する必要があり、その際に「アイテムの編集」の設定によって動作に違いが出てしまうことがわかりました

    <アクセス許可レベル>
    ・ アイテムの編集をチェックオン → 正常終了扱いになる
    ・ アイテムの編集をチェックオフ → エラー扱いとなる(ただし、サーバ上にはちゃんとファイルが保存されている)

    ちなみに、表示されるエラーメッセージは「'saveas' メソッドは失敗しました '_Worksheet' オブジェクト 1004」です

    要件の都合上、「アイテムの編集」は今回オフにした状態で運用したいと思っていますが、エラーが出るのは困ります...
    まず、このようになる原因と、回避策があれば教えていただけませんでしょうか

    ※↓私のコーディングの仕方の問題かも知れませんので問題の部分のみ抜粋記載させていただきます

    ' 新ファイルをサーバ上に保存して閉じる
        On Error GoTo ERR_FileSave
        WNbook.SaveAs strCWEFilePath & strFileName1 & "_" & strFileName2 & "_" & strCWEFileName, FileFormat:=1
        WNbook.Close savechanges:=False

    -version--------
    SharePoint2007、Excel2003

    2010年3月5日 6:59

回答

  • こんにちわ。

    原因はわかりませんが、ひょっとしたら、ExcelVBAから保存する際にSharePointの内部動作で2回更新がかかっているのではないでしょうか?

    ※確かエクスプローラービューからファイルアップする際も、何回もイベントが走るみたいなので、追加と編集が走っているのではと思いました。

    ※SQL Serverでトレースするとわかるかもしれません。

    現状の問題を「アイテムの編集をチェックオフ」の状態のままで、ExcelVBAのみで回避するのはかなり難しいです。

    もし仮に、C#等でモジュールを作成できるのであれば、アップロード用のExeモジュールを作成し、ExcelVBAから引数でExeモジュールにURLやファイル名やパスなどを渡して、C#のWebClientオブジェクトでアップロードする方法が考えられますが、いかがでしょうか?


    2010年3月8日 12:26

すべての返信

  • こんにちわ。

    原因はわかりませんが、ひょっとしたら、ExcelVBAから保存する際にSharePointの内部動作で2回更新がかかっているのではないでしょうか?

    ※確かエクスプローラービューからファイルアップする際も、何回もイベントが走るみたいなので、追加と編集が走っているのではと思いました。

    ※SQL Serverでトレースするとわかるかもしれません。

    現状の問題を「アイテムの編集をチェックオフ」の状態のままで、ExcelVBAのみで回避するのはかなり難しいです。

    もし仮に、C#等でモジュールを作成できるのであれば、アップロード用のExeモジュールを作成し、ExcelVBAから引数でExeモジュールにURLやファイル名やパスなどを渡して、C#のWebClientオブジェクトでアップロードする方法が考えられますが、いかがでしょうか?


    2010年3月8日 12:26
  • こんにちは。フォーラムオペレーターの高橋春樹です。

    tamaki9さん
    アドバイスの投稿有難うございました。

    SZMSFUser200023さん
    MSDNフォーラムのご利用有難うございます。
    tamaki9さんからアドバイスを頂いたと思うのですが如何でしょうか?

    今回、tamaki9さんからの投稿が、有用な情報だと思いましたので、一旦、回答マークを付けさせてもらいました。

    SZMSFUser200023さんの現在の状況も気になるので、是非tamaki9さんのアドバイスに返信して頂ければと思います。

    尚、回答マークは問題解決を意味するものではないので、その他アドバイスがありましたら
    ご投稿の程、宜しくお願いします。


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    2010年3月19日 6:24
  • tamaki9さまフォーラムオペレーターの高橋春樹さま ご連絡遅くなり申し訳ありません。

    その後アクセス許可レベルを細かく検証した結果、ご指摘の通りに原因特定し自己解決しておりました。

    残念ながら今回費用面、開発力含めC#まで手を出す事が出来ず、且つアクセス許可レベルを変えることも運用要件上不可能であったことから、

    Save as直前でドキュメントライブラリへの接続チェックを噛ませ、接続可能と判断された場合にのみSave asで発生するエラーをスルーすることとしました。

    あまり宜しくない解決方法だとは思いますが、今のところ問題なく動作しております。

    アドバイスありがとうございました。

    また、今まで返信確認せずに申し訳ありませんでした。

    また何かありましたらよろしくお願いいたします。

    2010年4月2日 7:38