次のVBAは別BookにあるデータBook(A列、B列にデータのあるAbook)を同時起動させ、このVBAのあるBbookにAbookデータを取り込むものです。
方法として、Abook-1,BBookを開き、BbookのVBAを実行すると、Abook-1のデータがBbookのA列、B列に取り込まれます。
そのあとこの取り込まれたBbookを別の名前(BBook-1等)で保存し、ベースのBbookは取り込まれる前の状態で残ります。
つづけて、ダイアログで次のAbook-2を開き、再度BBookのVBAを実行することでAbook2のデータを取り込んだ別のBbook-2が作成されることになります。
これを連続して行っているのですが、新たに作成されてゆくBbook-xはそのまま開いた状態がたまってゆきあとでまとめて閉じなくてはなりません。
これをその都度閉じてゆくことができるのでしょうか。
(すなわち読み込んだ後保存し、次のAbookを読み込んだらそのBookとベースのBbookだけにしたい)
また、ダイアログでデータブックを開くとそのAbookがアクティブになるため、実行しようとするBbookは隠れているため最小化から開くことになります。
これが面倒なのですが、Bbookをアクティブにすることが可能ですか?
更にダイアログでキャンセルした場合はその連続作業終了ということで、すべてのBookとエクセルを終了できればと思っています。
なお当方VBAに詳しくないため教えていただいたVBAを動かしているだけですが、最終行のThisWorkbook.Close Falseがあるとエクセルの強制終了が発生したので
現在は外してあります。
Sub A01_アクティブBにAのデータをペースト()
Dim thWB As Workbook
Dim Abook As String
Dim Bbook As String
Dim lastRow As Long
Dim orgName As String
Set thWB = ThisWorkbook '←Bbook(マクロブック)のこと
Bbook = thWB.Name
For Each thWB In Workbooks '←今開かれているブック全体が対象
If thWB.Name <> Bbook Then '←もし、開かれているの中でブックがBbook(ThisWorkbook)でなけれれば
Abook = thWB.Name '←そのブックをAbookと言う変数にする
End If
Next thWB
With Workbooks(Abook).Sheets("Sheet1")
lastRow = .Range("B" & Rows.Count).End(xlUp).Row '
.Range("A1", "B" & lastRow).Copy Destination:=Workbooks(Bbook).Worksheets("Sheet1").Range("A1")
End With
ActiveSheet.Shapes.Range(Array("Button 22")).Select
Selection.Delete
Selection.Cut
Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.ClearContents
orgName = ThisWorkbook.FullName
Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("A1").Value
Workbooks(Abook).Close SaveChanges:=False
Workbooks.Open Filename:=orgName '基本book
Application.Dialogs(xlDialogOpen).Show "*.xlsx"
'ThisWorkbook.Close False---これがあるとエラーになる
End Sub
↧