gpt4 book ai didi

excel - 访问 : Sheet. 中的 VBA 删除方法在 For Next 循环中不起作用

转载 作者:行者123 更新时间:2023-12-04 21:27:28 24 4
gpt4 key购买 nike

我是一名生命科学家,第一次尝试编写代码并尝试为我的测量数据构建一个 Access 数据库。所以我非常缺乏经验。
我在要用于计算的访问表单中嵌入了一个 Excel 对象。如果不首先删除其旧数据,我就无法使用该对象,我正在使用 For... Next 循环(代码见下文)。它有时会起作用,通常是第一次尝试,有时是前三次尝试。我需要它始终如一地工作。
我已经尝试隔离问题,但归结为 wbAnalysis.Sheets.(iSheetCounter).Delete 行只是......什么都不做?我发现的所有修复程序(激活工作簿、创建 Excel 对象并在那里而不是通过 Excel.Application 禁用错误)似乎都没有任何作用。
该代码不会引发任何类型的错误,它运行得很好,只是不会删除工作表。
任何帮助,将不胜感激!
先感谢您!

Private Sub Form_Load()
Dim wbAnalysis As Excel.Workbook
Dim iSheetCounter As Integer
Dim appExcel As Object

Set wbAnalysis = Me!OLEExcel.Object
Set appExcel = CreateObject("Excel.Application")

For iSheetCounter = 1 To wbAnalysis.Worksheets.Count
If wbAnalysis.Sheets.Count > 1 Then
appExcel.DisplayAlerts = False
wbAnalysis.Sheets(iSheetCounter).Activate
wbAnalysis.Sheets(iSheetCounter).UsedRange.Delete
wbAnalysis.Sheets(iSheetCounter).Delete
appExcel.DisplayAlerts = True
End If
Next iSheetCounter

End Sub

在评论之后,我将代码编辑为如下所示。不幸的是,它仍然只工作大约一半的时间,另一半在没有任何消息框的情况下抛出 Windows 错误声音。
Private Sub btnDelete_Click()

Dim wbAnalysis As Excel.Workbook
Dim iSheetCounter As Integer
Dim appExcel As Object

Set wbAnalysis = Me!OLEExcel.Object
Set appExcel = CreateObject("Excel.Application")

For iSheetCounter = 1 To wbAnalysis.Worksheets.Count
If wbAnalysis.Worksheets.Count > 1 Then
'appExcel.DisplayAlerts = False
wbAnalysis.Sheets(iSheetCounter).Delete
'appExcel.DisplayAlerts = True
End If
Next iSheetCounter

End Sub
这是一个 Excel 实例问题。 'appExcel.DisplayAlerts = False' 行不会为打开 OLE 对象的 Excel 实例关闭 DisplayAlerts。解决方案如下所示:
 Dim wbAnalysis As Excel.Workbook
Dim iSheetCounter As Integer
Dim appExcel As Object
Dim nSheets As Long


Set wbAnalysis = Me!OLEExcel.Object
Set appExcel = CreateObject("Excel.Application")
appExcel.DisplayAlerts = False
Excel.Application.DisplayAlerts = False

nSheets = wbAnalysis.Worksheets.Count

For iSheetCounter = nSheets To 2 Step -1
If wbAnalysis.Worksheets.Count > 1 Then
wbAnalysis.Application.DisplayAlerts = False
wbAnalysis.Worksheets(iSheetCounter).Delete
wbAnalysis.Application.DisplayAlerts = True
End If
Next iSheetCounter

最佳答案

我相信这是由于这条线wbAnalysis.Sheets(iSheetCounter).Delete最初它可以很好地删除工作表,但每次删除工作表时,Worksheets 的长度对象减少。因此,在某个时间点之后,当可用工作表的总数小于 iSheetCounter 时,它不会得到相应的工作表。 .试试下面的代码。这将继续删除第一个可用的工作表,直到只剩下一个工作表。

Private Sub btnDelete_Click()

Dim wbAnalysis As Excel.Workbook
Dim iSheetCounter As Integer
Dim appExcel As Object

Set wbAnalysis = Me!OLEExcel.Object
Set appExcel = CreateObject("Excel.Application")

For iSheetCounter = 1 To wbAnalysis.Worksheets.Count
If wbAnalysis.Worksheets.Count > 1 Then
'appExcel.DisplayAlerts = False
wbAnalysis.Worksheets(1).Delete
'appExcel.DisplayAlerts = True
End If
Next iSheetCounter

End Sub

关于excel - 访问 : Sheet. 中的 VBA 删除方法在 For Next 循环中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68112526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com