私は次のコードを使用して、更新されたブックを保存しています。実行時エラー '1004':SaveAsメソッドのオブジェクト '_Workbook failed
Private Sub cmdSaveUpdatedWB_Click()
On Error GoTo Err_cmdSaveUpdatedWB_Click
gwbTarget.Activate <<<<<<<<<<<<<<<<<<<<<<<
Application.DisplayAlerts = False
gwbTarget.SaveAs txtUpdWorkbookName.Value, FileFormat:=xlOpenXMLWorkbookMacroEnabled
Application.DisplayAlerts = False
frmLoanWBMain.Show
gwbTarget.Close
Set gwbTarget = Nothing
gWBPath = ""
gWBName = ""
lblWorkbookSaved.Enabled = True
cmdUpdateAnotherWorkbook.Visible = True
Exit_cmdSaveUpdatedWB_Click:
Exit Sub
Err_cmdSaveUpdatedWB_Click:
MsgBox "The following error occurred inthe [cmdSaveUpdateWB_Click] event handler." & vbCrLf & _
"Error Number: " & Err.Number & vbCrLf & "Error descriptioin: " & Err.Description
Resume Exit_cmdSaveUpdatedWB_Click
End Sub
[名前を付けて保存]操作が失敗します。私は、その失敗は、ワークブックを保存してフォーカスを失う結果であると判断しました。コードをステップ実行してエラーを取得できます。エラーが生成されたら、エラーメッセージボックスで[デバッグ]を選択し、F5キーを押してコードを実行すると、ブックが正しく保存されます。保存するworbookのActivateメソッドの前後にDebug.Printステートメントを配置すると、アクティブなwokbookは、ブックとワークブックの更新に使用されたフォームを含むブックであることを示します。 ActiveWorkbook.Nameを印刷するImmediate wondowにprintステートメントを配置すると、保存するワークブックの名前(gwbTarget.Name)が表示されます。 F5キーを押すとコードが正しく実行されます。 私は、保存するワークブックがなぜ失われたのか理解できませんでした。遅延、複数の起動文、ワークブックを保存するためのローカル変数、および保存するワークブックの名前を配置しました。なぜこれが起こっているか、どのように修正するのかについての助けや考えがあれば幸いです。
私はいくつか変更を加えました。コードは以下にリストされています...
Private Sub cmdSaveUpdatedWB_Click()
On Error GoTo Err_cmdSaveUpdatedWB_Click
Dim wbSave As Workbook
Set wbSave = gwbTarget
gwbTarget.Activate
Application.DisplayAlerts = False
''''''' gwbTarget.SaveAs txtUpdWorkbookName.Value, FileFormat:=xlOpenXMLWorkbookMacroEnabled
wbSave.SaveAs fileName:=txtUpdWorkbookName.Value, FileFormat:=xlOpenXMLWorkbookMacroEnabled
Application.DisplayAlerts = False
frmLoanWBMain.Show
gwbTarget.Close
Set gwbTarget = Nothing
gWBPath = ""
gWBName = ""
lblWorkbookSaved.Enabled = True
cmdUpdateAnotherWorkbook.Visible = True
Exit_cmdSaveUpdatedWB_Click:
Set wbSave = Nothing
Exit Sub
Err_cmdSaveUpdatedWB_Click:
MsgBox "The following error occurred inthe [cmdSaveUpdateWB_Click] event handler." & vbCrLf & _
"Error Number: " & Err.Number & vbCrLf & "Error descriptioin: " & Err.Description
Resume Exit_cmdSaveUpdatedWB_Click
End Sub
私はコードを以下のように変更しました。リストは、プログラムへの参加時の変数定義とともに、下にあります。 ExcelコードはCitrix環境で実行されていますが、タイミングに影響する可能性がありますが、コードの実行に他の影響はありません。
簡潔にするために、他のコードバージョンを削除しました。次のコードは動作しています。重要な問題は、SaveAsメソッドが呼び出されたときに、保存するワークブックがアクティブブックでなければならないことです。
ます。Private Sub cmdSaveUpdatedWB_Click()
文字列
としてワークシート としてブック として暗いwbSave薄暗いwsActive薄暗いsNWBNameエラー後藤Err_cmdSaveUpdatedWB_ClickでExit_cmdSaveUpdatedWB_Click:
Set wbSave = Nothing
Exit Sub
Err_cmdSaveUpdatedWB_Click: あなたはより多くのあなたのようにそれを作るとうまくいけば、それまでの時間で、この
Private Sub cmdSaveUpdatedWB_Click()
Dim gwbTarget As Workbook
Set gwbTarget = Workbooks("workbook_name.xlsm") 'correct extension needed, workbook must be open
wb.SaveAs Filename:=gwbTarget.Path, FileFormat:=xlOpenXMLWorkbookMacroEnabled
MsgBox "Last saved: " & gwbTarget.BuiltinDocumentProperties("Last Save Time")
End Sub
変更一つのことのようなもので始まらないのはなぜ文字列
として暗いstrErrMsgstrErrMsg = "Error Number: " & Err.Number & " Desc: " & Err.Description & vbCrLf & _
"Source:" & Err.Source & vbCrLf & _
"Updating Workbook: " & vbCrLf & " " & gwbTarget.Name & vbCrLf & _
"Selected Worksheet: " & gwsTrgSheet.Name & vbCrLf & _
"Active Workbook: " & vbCrLf & " " & ActiveWorkbook.Name & vbCrLf & _
"Worksheet: " & ActiveSheet.Name & vbCrLf & _
"Code Segment: cmdSaveUpdatedWB_Click event handler"
RecordErrorInfo strErrMsg
Resume Exit_cmdSaveUpdatedWB_Click
End Subの
「gwbTarget」はどこで宣言していますか?コードが保存されているのと同じブックですか? – CallumDA
コードを含むブックに含まれているコードモジュールで宣言されているグローバル変数です。 – Thope
まず 'activate'文を削除することができます。これは必要ありません。あなたの 'gwbTarget'が' SaveAs'行にブレークポイントを置き、コードがそこで停止したときにあなたのローカルをチェックすることによって定義されているかどうか確認してください。私の推測では、 'gwbTarget'は' Nothing' – CallumDA