【发布时间】:2021-05-10 06:15:16
【问题描述】:
如何将使用 VB.NE 编辑的 Excel 文件保存到已经存在的文件中?每次都有一个对话框:文件已经存在。你真的要覆盖吗?是|否|中止
如果没有此对话框,我如何覆盖?
【问题讨论】:
-
请告诉我们您正在使用的代码! (其中的相关部分,即您进行保存操作的部分。)
如何将使用 VB.NE 编辑的 Excel 文件保存到已经存在的文件中?每次都有一个对话框:文件已经存在。你真的要覆盖吗?是|否|中止
如果没有此对话框,我如何覆盖?
【问题讨论】:
你应该看看设置
DisplayAlerts=false
Application.DisplayAlerts Property
如果您将此属性设置为 False 不想被提示打扰 并在程序运行时发出警报消息 跑步;任何时候消息需要 响应,Microsoft Excel 选择 默认响应。
完成后请记住将其重置为 true。
我们目前的做法如下
object m_objOpt = Missing.Value;
m_Workbook.Application.DisplayAlerts = false;
m_Workbook.SaveAs( fileName, m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt,
XlSaveAsAccessMode.xlNoChange,
XlSaveConflictResolution.xlLocalSessionChanges,
m_objOpt, m_objOpt, m_objOpt, m_objOpt);
【讨论】:
Dim xlWorkBook As Excel.Workbook Dim xlWorkSheet As Excel.Worksheet Dim misValue As Object = System.Reflection.Missing.Value
xlWorkBook.SaveAs(<YourFileName>, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue)
xlWorkBook.Close(True, misValue, misValue)
【讨论】:
您不能先删除文件,然后再覆盖它吗?
【讨论】:
SaveFileDialog 类中有一个属性,称为OverwritePrompt,将其设置为 false。
希望这会有所帮助。
【讨论】:
我解决了在创建工作簿时将 xlApp.Workbooks.Open 的第三个参数设置为 false 的问题。这是 readonly 参数,如果设置为 true,它将要求保存文件。
Sub ExcelMacroExec2()
Dim xlApp, xlBook
Set xlApp = CreateObject("Excel.Application")
xlApp.DisplayAlerts = False
Set xlBook = xlApp.Workbooks.Open("C:\Users\A\myFile.xlsm", 0, False)
xlApp.Run "Macro1"
xlApp.Save
xlBook.Close false
xlApp.Quit
Set xlApp = Nothing
set xlBook = Nothing
End Sub
【讨论】:
我改用 Object.Save() 方法解决了这个问题。即使使用 DisplayAlerts = $false,我也尝试使用 SaveAs 方法,但它仍然不断给我覆盖警告。
代码片段如下:
# Create an Object Excel.Application using Com interface
$objExcel = New-Object -ComObject Excel.Application
# Disable the 'visible' property so the document won't open in excel
$objExcel.Visible = $true
# Override warning messages about existing file
$objExcel.DisplayAlerts = $false
# Open the Excel file and save it in $WorkBook
$WorkBook = $objExcel.Workbooks.Open($FilePath)
# Load the WorkSheet 'BuildSpecs'
$WorkSheet = $WorkBook.sheets.item($SheetName)
# Pause execution to allow data refresh to occur (about 5 minutes to be safe)
Start-Sleep -s 300
# Now the Save the file After Refreshing (need to add a pause for about 5 minutes)
$WorkBook.Save()
# Wait while saving before closing excel object
Start-Sleep -s 30
# Now close the workbook
【讨论】:
在保存命令之前使用 (Application.DisplayAlerts = False) 和之后使用 (Application.DisplayAlerts = True) 避免了对话框:
Workbooks.Open "C:\XML\baseline\RTWP\Analisis.xlsb"
Windows("Analisis.xlsb").Activate
Sheets("Data").Select
Cells.Select
Selection.ClearContents
Workbooks.Open "C:\XML\baseline\RTWP\output\totemplate.csv"
Windows("totemplate.csv").Activate
Sheets("totemplate").Select
Cells.Select
Selection.Copy
Windows("Analisis.xlsb").Activate
Range("A1").Select
ActiveSheet.Paste
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs fileName:="C:\XML\baseline\RTWP\Analisis.xlsb", FileFormat:=xlExcel12, CreateBackup:=False
Application.DisplayAlerts = True
ActiveWorkbook.Close SaveChanges:=False
Windows("totemplate.csv").Activate
ActiveWorkbook.Close SaveChanges:=False
【讨论】: