2017-07-14 6 views
0

VBAで開いたブックがあり、ブックを変更してからブックを閉じることができます。これまでのところ私が持っているものです。手動で開かない限り、ブックはVBAで閉じることはありません。

Sub OpenandModify() 
application.screenupdating = false 
workbooks.open Filename:="FilePath\WkbkName.xlsm" 

*Modify Workbook 


Workbooks("WkbkName.xlsm").close SaveChanges:=True 
application.screenupdating = true 
End Sub() 

私はすでに開いているブックでマクロを実行すると、マクロが正常に動作し、前述したワークブックを閉じます。ただし、ワークブックがまだ開いていない場合、ファイルは変更後も開いたままになります(Workbook.Openの問題ではないと思われます)。何か案は?

ありがとうございます。

答えて

0

私のワークブックでもっと遊んだ後。私はその問題を発見したようだ。コードを変更する部分には、WkbkName.xlsm以外のワークブックからワークシートを追加する別のサブルーチンがあります。シートが既に存在する場合、シート(2)として追加され、ブックは閉じません。ワークシートが存在しない場合は、ワークブックが開き、正しく修正され、終了します。私はまだそれがこのように振る舞う理由を理解していないので、誰かが何らかのアイデアを持っていれば、それは大いに評価されるだろう

今のところ、重複したワークシートのチェックを追加し、発生した場合はサブを終了することを計画しています。

+0

私が開いたワークブックは、コードの別のビットを実行するためのWorkbook_Openが含まれてい、それはタイマーを持っていることになっていましたその上に、私の元のコードでのメッセージボックスの使用は、タイマーを台無しにして、問題を引き起こしていた! – OrangeHippo

0

発生した問題のいくつかは、コードが作業中のワークブックと混同している可能性があります。

ワークブックへの参照を保持し、コード全体だけでそれを使用するために変数を使用します。

Sub OpenandModify() 

    Dim wrkBk As Workbook 

    Application.ScreenUpdating = False 
    'Open the workbook and assign it to wrkBk variable. 
    Set wrkBk = Workbooks.Open(Filename:="FilePath\WkbkName.xlsm") 

    'Modify Workbook 
    With wrkBk 
     .Worksheets("Sheet1").Range("A1") = "Modified!" 
    End With 

    wrkBk.Close SaveChanges:=True 
    Application.ScreenUpdating = True 

End Sub 
関連する問題