共用フォルダ内のファイルをWorkbooks.openで開きデータを転記するVBAを作成しました。もしすでにファイルが開かれている場合は転記の処理は実行せずメッセージが出るようにしたいです。 ファイル「個別」(VBA作成)に入力したデータをファイル「一覧表」に転記するVBAです。通常の動きは問題ないですが、ファイル「一覧表」が他ですでに開かれている時に実行するとエラー9「インデックスが有効範囲にない」がでます。 マクロ実行時にすでにファイル「一覧表」が他で開かれている場合は、処理は実行しないで「しばらくしてから使用」等のメッセージを出したいです。 ファイル「一覧表」が開いているかどうかの確認をして処理を分岐するのかと思いますが、どの箇所にどのように入れたらいいのか中々考えつきません。 お解りになる方、ご教授お願いいたします。 Private Sub CommandButton2_Click() Dim swb As Workbook Dim sws As Worksheet Dim dwb As Workbook Dim dws As Worksheet Dim dFolder As String Dim dFile As String Dim LastRow As Long Dim i As Long Dim j As Long Dim dwsName As String If ComboBox1.Value = "" Then MsgBox "選択なし" Exit Sub End If Set swb = ThisWorkbook Set sws = swb.Worksheets(1) dFolder = "C:\VBA\個別\" dFile = Dir(dFolder & "一覧表.xlsm") Set dwb = Workbooks.Open(dFolder & dFile) Set dws = dwb.Sheets(ComboBox1.Value) dwsName = Me.ComboBox1.Value MyStr = "野菜?" If dwsName = "トマト" Then Quest = MsgBox(MyStr, vbYesNo + vbExclamation) If Quest = vbYes Then With dws LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 .Cells(LastRow, 1).Value = Me.ComboBox1.Text End With Else MsgBox "他を選択" dwb.Close Exit Sub End If ElseIf dwsName <> "" Then With dws LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 .Cells(LastRow, 1).Value = Me.ComboBox1.Text End With End If sLastRow = sws.Cells(sws.Rows.Count, 2).End(xlUp).Row If dws.Cells(LastRow, 2).Value <> "" Then For j = 1 To sLastRow If dws.Cells(LastRow, 1).Value = sws.Cells(j, 2).Value Then sws.Cells(j, 2).Interior.Color = RGB(255, 0, 0) End If Next j End If dwb.Save dwb.close End Sub
Visual Basic