1つのブックから別のブックにデータを転送するマクロを作成しました。ソースブックが開かれていない場合はマクロが開き、データがコピーされて閉じられ、ユーザーは何が起こったのか分かりません。今問題がある - ソースブックが既に開かれている場合は、操作後に開いたままにする必要があります。だから、私は私がここにあり、この機能を使用する場合の声明を発表した。Excel vbaでソースブックを変更した後でワークブックが開いているかどうかをチェック
Function IsWorkBookOpen(FileName As String)
Dim ff As Long, ErrNo As Long
On Error Resume Next
ff = FreeFile()
Open FileName For Input Lock Read As #ff
Close ff
ErrNo = Err
On Error GoTo 0
Select Case ErrNo
Case 0: IsWorkBookOpen = False
Case 70: IsWorkBookOpen = True
Case Else: Error ErrNo
End Select
End Function
、それは最初の時間を動作しますが、私は再びマクロを起動した場合、それはファイルのような役割を果たし最初の時間が開いていない直後とそれは操作を終了したときに
If IsWorkBookOpen(ActiveSheet.Range("AA1").Value) Then
Set Invoice = Workbooks(ActiveSheet.Range("AA4").Value)
openF = True
Else
openF = False
Set Invoice = Workbooks.Open(ActiveSheet.Range("AA1").Value, True, True)
End If
For Each sheet In Invoice.Worksheets
If sheet.Range("B2").Value = "active" Then
newD = vbNull
lRow = sheet.Cells(2000, 7).End(xlUp).Row
counter = sheet.Cells(2000, 1).End(xlUp).Row
totalR = num
For k = 7 To counter
If sheet.Cells(k, 6).Value = "n" Then
sheet.Range("A" & k, "F" & k).Copy
rep.Range("A" & num, "F" & num).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
rep.Cells(num, 7) = newD
If Year(rep.Cells(num, 7).Value) = Year(1) Then rep.Cells(num, 7).Clear
newD = DateAdd("d", sheet.Cells(3, 2).Value, newD)
num = num + 1
End If
Next k
rep.Cells(num, 4) = "Total"
rep.Cells(num, 5) = Application.Sum(rep.Range("E" & totalR, "E" & (num - 1)))
rep.Cells(num, 5).NumberFormat = "$#,###0"
num = num + 3
End If
Next sheet
If openF = False Then
Invoice.Close False
Set Invoice = Nothing
End If
Application.ScreenUpdating = True
...それを閉じた質問です:関数がオープン」としてそれを見ないように、マクロコードの最初のラウンドは何とかステータスやソースブックの名前を変更しません'?
あなたが表示しているコードは、すべてのブックを開いたり閉じたりしません。したがって、その部分を追加する必要があります。開閉を扱う重要な部分がありません。 –
私はコードを編集してオープニングとクロージングの部分を表示しました。そのために残念。 – Bobster