【VBA】異なるブックからリンク貼り付けのツボは「.Activate」
出席簿の備考欄も自動入力できるようにして、電子出席簿はほぼ完成したのですが、勤務校では保健日誌ともデータ照合して数字に根拠を持たせるようにしています。
「出欠整合性チェックブック」を作って、各クラスの出席簿と保健日誌の出欠状況数のリンクをコピーしてきて、両者を比較できるようにしています。
マクロでこの処理をする時、ネットでコードを探して組んだのですが、うまくいきませんでした。結論は、「シートをアクティブにしながら処理をしないとリンク貼り付けは正確にできない」ということです。
後で説明するコードを実行するとブック選択ダイアログが開きます。
単数ブック選択にしているので、ブックを1つ指定して「開く」をクリックすると、
リンク貼り付けが自動でできます。
で、リンク元は1入力~12入力というシート名で、それぞれのセルD224~AH279の範囲を、現ブックの1~12シートの、セルD60以降にリンク貼り付けするために書いたコードが次です。
----------------------------------------------------
Sub 異なるブックからリンク貼り付け()
Dim cpm,btn As Variant
Dim i, n As Integer
Dim wb As Variant
Dim sh, ash As Worksheet
ChDir ThisWorkbook.Path '★現在フォルダーを起点フォルダーに設定
cpm = Application.GetOpenFilename(FileFilter:="Microsoft Excelブック,*", _
Title:="読み込むブックを1つ選択してください!", MultiSelect:=False) '単数ブック読み込み
Set ash = ActiveSheet '現シートをセットしておく
btn = cpm 'キャンセル判定に使用
If btn = False Then
MsgBox "処理を中止しました。"
ash.Activate
Range("H8").Select
Exit Sub
Else
On Error Resume Next '''''必要
Application.DisplayAlerts = False '警告停止
Application.ScreenUpdating = False
Workbooks.Open cpm '読込ファイル
Set wb = Workbooks.Open(cpm) ''''''''''''''''''''''''★読込ファイルをオブジェクトセット
n = 60 '転記先行番号
For i = 1 To 12 'シート名は月数字
'リンク転記元
wb.Sheets(CStr(i) & "入力").Activate '''''''''''''''''''★読込シートをアクティベート★
Sheets(CStr(i) & "入力").Range("D224:AH279").Copy
ThisWorkbook.Sheets(CStr(i)).Activate ''''''''''''''★現シートをアクティベート
ActiveSheet.Protect userinterfaceonly:=True ''''''''''''''★現シートをマクロ操作OKで保護
ActiveSheet.Cells(n, "D").Select
ActiveSheet.Paste Link:=True
Application.CutCopyMode = False
ActiveSheet.DisplayPageBreaks = False ''''''''''''''★改ページ非表示★
ActiveSheet.Cells(1, "A").Select''''''''''''A1セルを選択して処理を終わる
Next
wb.Close (False) ''''''''''コピー元閉じる
Application.DisplayAlerts = True '警告復旧
Application.ScreenUpdating = True
MsgBox "処理完了!"
ash.Activate
Range("H8").Select
End If
End Sub
------------------------------------------
今回は単数ブックからリンク貼り付けする例ですが、
せっかくなら、複数ブック読み込みにして希望のブックを全部、見かけ上開かずに読み込んで自動処理したいですよね。
その時には、ブックを切り替えていくので、赤文字コードのように、それぞれをActivateして切り替えていかないとうまくリンク貼り付けできませんでした。
備忘録として書いておきますが、もし異なるブックからリンクを引っ張ってきたいんだけどうまくいかない方がおられましたら参考にしてみてください。
だいぶ寒さが緩んできました。連休明けはちょっとは暖かいかな・・・。
では、また!