2015年8月30日日曜日

エクセル VBA ファイル Open/Close

エクセルファイルをOpen/Closeします。
Function ファイル読込(BkName As String, ObjBk As Workbook)
    Application.ScreenUpdating = False
    Set ObjBk = Workbooks.Open(FileName:=BkName, Notify:=False)
'   ObjBk.Windows.Application.Visible = True ' これは使わない。
    Windows(ObjBk.Name).Visible = True
    Application.ScreenUpdating = True
End Function
BkNameにフルパスを含むファイル名を入れて関数を呼びます。
ObjBkにWorkbookのファイルポインタを入れて返します
非表示でOpenするときにはVisibleをFalseにします。
(デフォルトでTrueなのですが、説明のために。) 保存終了にするときはSaveChangesをTrueにします。


Function ファイル終了(ObjBk As Workbook)
    Windows(ObjBk.Name).Visible = False
    ObjBk.Close SaveChanges:=False
End Function
非表示でOpenしたファイルを保存終了すると、次からも非表示になってしまいます。
そうなった場合、開いてVisibleをTrueにしてやる必要があります。 

エクセルは二重起動/ネットワーク共有がうまく制御できるので、チェックしてからOpenします。
戻り値は関数名に入れるらしいです。
Function ファイルチェック(FilePath As String, FileName As String) As Boolean
    Dim wb As Workbook
        
    ファイルチェック = True
    If Dir(FilePath & "\" & FileName) <> "" Then
        For Each wb In Workbooks
            If wb.Name = FileName Then
                MsgBox FileName & "と同名のファイルが開いてます。ので開けません。"
                ファイルチェック = False
                Exit Function
            End If
        Next wb
        
        On Error Resume Next
        Open FilePath & "\" & FileName For Append As #1
        Close #1
        If Err.Number > 0 Then
            MsgBox "どなたかが処理中です、時間を空けて再度お願いします。"
            ファイルチェック = False
            Exit Function
        End If
        On Error GoTo 0
    Else
        MsgBox "ファイルが存在しません。", vbExclamation
        ファイルチェック = False
    End If
End Function

0 件のコメント:

コメントを投稿