Microsoft 製品に組み込まれている Visual Basic の実装。
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フォーラムへの投稿の方が回答を得られやすいと思います。