エクセルで楽々校務

学校現場で使えるエクセルファイルや小技の紹介をしています。掘り出し物があるかもしれません。あと、今までの実践での疑問点もつぶやきます。

【VBA】異なるブックからリンク貼り付けのツボは「.Activate」

出席簿の備考欄も自動入力できるようにして、電子出席簿はほぼ完成したのですが、勤務校では保健日誌ともデータ照合して数字に根拠を持たせるようにしています。

「出欠整合性チェックブック」を作って、各クラスの出席簿と保健日誌の出欠状況数のリンクをコピーしてきて、両者を比較できるようにしています。

マクロでこの処理をする時、ネットでコードを探して組んだのですが、うまくいきませんでした。結論は、「シートをアクティブにしながら処理をしないとリンク貼り付けは正確にできない」ということです。

 

f:id:exeladmin:20210111021323p:plain

後で説明するコードを実行するとブック選択ダイアログが開きます。

単数ブック選択にしているので、ブックを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して切り替えていかないとうまくリンク貼り付けできませんでした。

備忘録として書いておきますが、もし異なるブックからリンクを引っ張ってきたいんだけどうまくいかない方がおられましたら参考にしてみてください。

 

だいぶ寒さが緩んできました。連休明けはちょっとは暖かいかな・・・。

では、また!