こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

ブックの共有をしているexcelファイルの複製

ブックの共有を設定しているbook1.xlsというexcelファイルがあります。

ブックの共有を行なっているとだんだんデータサイズが肥大化してくるので、その対策として

【1】"book1.xls"のシート単位で全て新しい"book2.xls"にコピーする。
【2】"book1.xls"を別のフォルダへ移動。
【3】"book2.xls"の名前を"book1.xls"に変え、ブックの共有設定を行う。

ということをしています。

これらの作業を自動で行えたらと思うのですが、
タスクスケジューラー?.batファイル?VBA?など、何をどう組み合わせたらよいのかがよくわかりません。

アドバイスよろしくお願いします。

投稿日時 - 2012-10-11 11:05:40

QNo.7742982

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

私のレスが長くて解かり難いのは申し訳ないですが、
もう少し、読み込んでみて頂ければ幸いです。



>『(共有化のままだとマクロ編集できませんから)一旦共有化解除して』
>という部分は手動ということになりますでしょうか。
はい。その通りです。
マクロ実行するためのマクロを作成してマクロ実行するまでの手順を説明したものです。
end-u>必要なら、それをマクロ処理する事もできます。
ここから
end-u>:
end-u>この場合、サイズが肥大化した時に必要に応じて任意で実行するような運用ですね。
ここまでの文章です。



>全て自動で実行ファイルの肥大化を解消する方法がないかと考えているのですが、
>何か良いアドバイスがありましたらよろしくお願いします。
そのニーズに応えるために
end-u>これを定期的に自動実行するようにできなくもないですが。
end-u>例えば..
この文章の後に、タスクスケジュールとVBScriptを使ってExcelを操作する方法を提案しました。
この方法以外に、となるとVBScriptではなくて、Workbook_Openイベントを使う事も考えられますが
Workbook_Openイベントの内容はほぼ<test.vbs>と変わりません。
そのxlsブックをタスクスケジューラに登録するだけですが、
そちらのほうが良いでしょうか。

そうだとしても、提案された内容を一度試してみるというのが普通の対応だと思います。
試してみてどうだったのか、何かエラーが出てうまくいかなかったのか、
または実行環境を考慮するとこの方法は採用できそうもない、とか。
そもそも試し方がわからない、とか。
そういう反応があると前に進み易いのですが。

投稿日時 - 2012-10-25 12:52:41

ANo.1

ファイルを複製するという事は、その時点での共有Bookの変更履歴を破棄しても構わないという事ですね?
そうであれば、一旦Book共有化を解除して、再共有化をする事で変更履歴が破棄されます。
それだけでも肥大したBookサイズはある程度解消すると思います。
まずはそれで試してみられたらどうでしょう。

必要なら、それをマクロ処理する事もできます。
(共有化のままだとマクロ編集できませんから)一旦共有化解除して
[Alt]+[F11]キー同時押し[VisualBasicEditor]を起動し[Alt]→[i]→[m]キー順押し。
標準モジュールが挿入されますから、そこに下記コードをコピーペーストします。

Sub reShare()
  Const copyName = "C:\mydoc\book2.xls" 'CopyBookのフルパス
  Application.DisplayAlerts = False
  With ThisWorkbook
    .SaveCopyAs copyName
    If .MultiUserEditing Then
      .ExclusiveAccess
    End If
    .SaveAs .FullName, accessmode:=xlShared
  End With
  Application.DisplayAlerts = True
End Sub

マクロ実行はExcel画面から[Alt]+[F8]キーでマクロを選択して[実行]します。
この場合、サイズが肥大化した時に必要に応じて任意で実行するような運用ですね。
これを定期的に自動実行するようにできなくもないですが。
例えば..

'<test.vbs>---------------------------------------
Option Explicit

Const thisName = "C:\mydoc\book1.xls" '元のBookのフルパス
Const copyName = "C:\mydoc\book2.xls" 'CopyBookのフルパス
Const xlShared = 2
Dim LogName
Dim XL
Dim wb
Dim msg

Call Main

'-------------------------------------------------
Sub Main()
On Error Resume Next
'LogはTEMP環境変数のフォルダに保存。
LogName = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%") & "\log.log"
If Len(LogName) > 0 Then
Call XLsub
With Err
If .Number <> 0 Then
If Not XL Is Nothing Then
If Not wb Is Nothing Then
wb.Close
Set wb = Nothing
End If
XL.Quit
Set XL = Nothing
End If
msg = .Number & "::" & .Description
.Clear
End If
End With
With CreateObject("scripting.filesystemobject")
If Err.Number = 0 Then
With .OpenTextFile(LogName, 8, True, -1)
.WriteLine Now & vbTab & msg
.Close
End With
End If
End With
End If
End Sub
'-------------------------------------------------
Sub XLsub()
Dim n
Set XL = CreateObject("excel.application")
XL.Visible = True
XL.ScreenUpdating = False
Set wb = XL.Workbooks.Open(thisName)
If Not wb.MultiUserEditing Then
msg = "MultiUserEditing: False"
Else
'他のユーザーが開いていたら処理中止。
n = UBound(wb.UserStatus)
If n <> 1 Then
msg = "UserStatusError: " & n
Else
XL.DisplayAlerts = False
wb.SaveCopyAs copyName
wb.ExclusiveAccess
wb.SaveAs thisName, , , , , , xlShared
XL.DisplayAlerts = True
msg = "Success"
End If
End If
wb.Close False
Set wb = Nothing
XL.Quit
Set XL = Nothing
End Sub
'-------------------------------------------------
'# Call Main をコメントアウトすれば、一応ExcelVBAでも試せるようにはしてます。


以上をテキストファイルで保存して拡張子含め test.vbs という名前に変更します。
この test.vbs をタスクスケジューラに登録すれば良いです。

コード内で、UserStatusプロパティを見て、他ユーザーが使用中だったら中止するようにしてます。
ただ、このUserStatusプロパティに不正値が残って、正確には取れない場合があるかもしれません。
その場合は状況に応じてこのチェックを外すなど、修正してください。

また、タスク登録の際、環境によっては cscript.exe から指定しないといけないかもしれません。
C:\WINDOWS\system32\cscript.exe "C:\mydoc\test.vbs"

投稿日時 - 2012-10-12 19:59:45

お礼

詳細にありがとうございます。

『一旦Book共有化を解除して、再共有化をする事で変更履歴が破棄されます。』
この動きは理解しているのですが、昼間は多くの人が開いているいるため、誰もいない深夜に自動実行したいです。

『(共有化のままだとマクロ編集できませんから)一旦共有化解除して』
という部分は手動ということになりますでしょうか。

全て自動で実行ファイルの肥大化を解消する方法がないかと考えているのですが、何か良いアドバイスがありましたらよろしくお願いします。

投稿日時 - 2012-10-25 10:03:36

あなたにオススメの質問