エクセルのマクロについて

Anonymous
2019-06-05T14:36:34+00:00

エクセル2010のマクロについて質問です。

拙い文章で分かりづらいこともあるかと思いますが、ご教示いただけると助かります。

職場のエクセルで、シートを保護し、共有ファイルにして、複数人が同時に入力できるようにしています。

ソートしたい範囲に保護されたセルが入っているため、ソートのマクロが使えなかったので、以下のように組んでみましたが、上手く行きませんでした。

sub sample()

'共有を解除する

 Application.DisplayAlerts = False

 ActiveWorkbook.UnprotectSharing

 ActiveWorkbook.ExclusiveAccess

'シートの保護を解除する

 ActiveSheet.Unprotect

'ソートをする 

 Range("A1:B100").Sort(Range("A1"))

'シートを保護する

 ActiveSheet.protect,allowfiltering:=True

'共有にする

 Application.DisplayAlerts = False

 ActiveWorkbook.ProtectSharing

End Sub

このようにすると動きますが、その後に他の箇所を編集して上書き保存をして、閉じた後に再度ファイルを開いても、反映されないという現象が起きてしまいます。

また、マクロ実行後に上書き保存してから、一度エクセルを閉じて再度ファイルを開くと、共有ファイルではなくなってしまっています。

どのようにすれば良いか、教えていただきたいです。

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

6 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2019-06-07T15:07:49+00:00

    Excel2010は、現在使用していないので、検証できませんが、

    Windows10 Excel2013で下記を作成して検証しました。何かヒントになればと思います。

    共有ファイルであれば実行されます。この場合、ソートを行って共有ファイルで保存しています。

    Sub sample()

    Dim wb As Workbook, Book_Name As String

        Set wb = ThisWorkbook

        Book_Name = ThisWorkbook.Name

        Application.DisplayAlerts = False '確認メッセージを非表示にする

        If wb.MultiUserEditing = True Then    ' 共有モードなら

            wb.UnprotectSharing ’共有保護解除

            wb.ExclusiveAccess  ’排他モードへ

            ActiveSheet.Unprotect ’シート保護解除

            'ソートをする

            ActiveSheet.Range("A1:B100").CurrentRegion.Sort key1:=ActiveSheet.Range("B1") ', Header:=xlYes

      ’その他作業

            ActiveSheet.Protect , AllowFiltering:=True 'シートを保護するオートフィルOK

            wb.SaveAs FileName:=wb.FullName, AccessMode:=xlShared  '共有モードで保存

            wb.ProtectSharing '共有を保護する**(なぜか、保存前に設定すると事象発生)**

            'ブックを閉じる(このまま閉じると、なぜか共有保護が設定されていない)

           '手動で保存する時、ダイアログが出力されますが、こちらが無難

            '        Workbooks(Book_Name).Close '実行すると共有保護が掛かっていない事がある

        End If

        Application.DisplayAlerts = True  '確認メッセージを表示する

        Set wb = Nothing

    End Sub

    なぜかの部分を検証すれば、特にこれ ActiveWorkbook.ProtectSharing 

    良い回避法や正しい書き方が分かるかもしれません。

    エラー処理の追加や 特定シートへの処理の場合は、ActiveSheet部分は明示的

    また、VBAなどの技術的な質問に関しては、VBAフォーラムへの投稿の方が回答を得られやすいと思います。

    この回答は役に立ちましたか?

    3 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  2. Anonymous
    2019-06-07T02:02:24+00:00

    こんにちは、ShingoKoshuさん

    事象の検証や確認を行っておりませんが、示されているマクロコードで気になる点がありますので、ご確認ください。

    sampleコードはご使用のコードを抜粋、省略したのかも知れませんが、そのままであれば、

    ’共有にする 以下のところに問題があります。

    '共有にする

     Application.DisplayAlerts = False  ’あっても動くが、不要、上記ですでに設定されています。

     ActiveWorkbook.ProtectSharing

     Application.DisplayAlerts = true   '追加、マクロが終了した後の作業などに影響しないように設定を戻します。

    end sub

    このあたりが、

    >その後に他の箇所を編集して上書き保存などに影響しているのではないでしょうか

    この回答は役に立ちましたか?

    2 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  3. Anonymous
    2019-06-07T09:57:22+00:00

    茂樹平林さん、ご回答ありがとうございます。

    エクセル2010の誤りでした。

    どちらにしても上手くいきませんでした。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2019-06-07T09:54:18+00:00

    Qchan1962さん、回答ありがとうございます。

    ご指摘いただいた箇所を訂正してみましたが、上手くいきませんでした。

    ちなみにエクセル2010でした。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  5. Anonymous
    2019-06-06T02:35:01+00:00

    ウィンドーズ10で、エクセル2013を使用してますがマクロが使用できない。

    ちなみに、win7でエクセル07では、可能です。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません