• ベストアンサー

Excel2003のVBAでデータリンクの更新をしない。

こんにちわ。 私はWindowsXPのExcel2003のVBAでCSVを読み込んでアンケートの結果を集計するマクロと、その結果を別のブックで保存するマクロを作成しました。2つのマクロがあるブックを閉じて、保存されたブックを開くと「このデータソースには他のリンクが設定されています」といったものが表示され、更新するかしないかを問われます。 そこで、このメッセージを表示しないでリンクの更新を行わないようにすることは可能でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.2

2つのBook間で参照するセルがあるためだと思います。 集計の時に参照が残らないようにVBAを組むか、最後に参照元のあるシートに対して Sheets("シート名").Cells.Copy Sheets("シート名").Cells.PasteSpecial Paste:=xlValues を行って、値のみにするなどの対処をすれば出なくなると思いいます。

tierra31
質問者

補足

ご回答ありがとうございます。 以下のコードではどこに Sheets("シート名").Cells.Copy Sheets("シート名").Cells.PasteSpecial Paste:=xlValues を加えればいのですか? 'シートの保護 Worksheets("適材適所回答").Protect Worksheets("適性検査I、II回答").Protect Worksheets("適性検査III回答").Protect

その他の回答 (2)

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.3

ANo.2です。 補足のどこに入れても多分ダメです。 質問で >保存されたブックを開くと と言っているので、保存するBookに処理が必要です。 ANo.1の補足のプログラムになら、真ん中くらいにある 'コピー先シートの保護 の前に以下を入れてみてください。 For Each sh In NewWkbook.Worksheets sh.Unprotect '無くてもいいかも sh.Cells.Copy sh.Cells.PasteSpecial Paste:=xlValues sh.Protect '無くてもいいかも Next 前後にある[無くてもいいかも]の処理は、シートの保護状態にもよるので、無くてもエラーが出ない場合は削除してください。

tierra31
質問者

補足

すみません。ANo.2の補足が間違っていました・・。 最後に Application.AskToUpdateLinks = False を付け足したらできました!

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>その結果を別のブックで保存する の”別のブック”を開くと >「このデータソースには他のリンクが設定されています」といったものが表示され と言う事ですか? であれば、そのブックの保存の仕方を変更するとか。 (元のブックを参照しているのであれば、しないようにするとか)

tierra31
質問者

補足

ご回答ありがとうございます。 以下のコードならばどのようにするのか教えていただけますか? Application.DisplayAlerts = False Set OldWkbook = ActiveWorkbook ' 'ファイル名を取得 BkName1 = OldWkbook.Sheets(StName1).Range("E1").Value BkName2 = OldWkbook.Sheets(StName1).Range("E2").Value BkName3 = OldWkbook.Sheets(StName1).Range("E3").Value '取得したファイル名 FileName = BkName1 & Format(".") & Format("試験結果") & Format(".") & BkName2 & Format(".") & BkName3 & ".xls" 'シートのコピー OldWkbook.Sheets(Array(StName1, StName2, StName3, StName4, StName5)).copy Set NewWkbook = ActiveWorkbook 'ボタンを削除 For wIx = NewWkbook.Sheets(1).Shapes.Count To 1 Step -1 If Left(NewWkbook.Sheets(1).Shapes(wIx).Name, 6) = "Button" Then 'ボタンのみ削除 NewWkbook.Sheets(1).Shapes(wIx).Delete End If Next NewWkbook.Sheets(1).Name = StName1 'コピー先シートの保護 Sheets(1).Protect Sheets(2).Protect Sheets(3).Protect Sheets(4).Protect Sheets(5).Protect FileName = Application.GetSaveAsFilename(FileName, "xlsファイル (*.xls),*.xls", , "保存ファイル名の確認") If Dir(FileName) <> "" Then 'ファイルが既に存在する場合 If MsgBox("既に指定のファイルが存在します。 置き換えますか?", vbOKCancel, "置き換えの確認") = vbCancel Then NewWkbook.Close savechanges:=False MsgBox "ファイルの置き換えをキャンセルしました", vbInformation, "置き換えのキャンセル" 'シートの保護 Worksheets("適材適所回答").Protect Worksheets("適性検査I、II回答").Protect Worksheets("適性検査III回答").Protect Exit Sub End If '指定ファイル置き換え保存 NewWkbook.SaveAs FileName:=FileName MsgBox "ファイルの置き換えを完了しました", vbInformation, "置き換えの完了" Else 'ファイルを新規保存 NewWkbook.SaveAs FileName:=FileName MsgBox "ファイルを新規保存しました", vbInformation, "ファイルの保存" End If NewWkbook.Close savechanges:=False Application.DisplayAlerts = True 'シートの保護 Worksheets("適材適所回答").Protect Worksheets("適性検査I、II回答").Protect Worksheets("適性検査III回答").Protect

関連するQ&A