复制工作表的简单VBA代码导致“Microsoft Excel已停止工作”

时间:2018-04-29 10:50:53

标签: excel-vba vba excel

我检查了其他45个关于“Excel已停止工作”的问题。没有答案的人帮助了我。显然,很多不同的事情都可能导致这个问题。

我有一张59页的工作簿,但我只需要十几张。我编写了一个简单的宏来检查每个工作表的名称,如果名称包含“H2O”或“NG”,则工作表将复制到我之前创建的另一个工作簿,并在宏运行时打开。第一次复制工作表导致Excel关闭并重新启动,并伴有“Microsoft Excel已停止工作”消息。

工作簿有很多工作表,但它在任何工作表上没有Form或Active-X控件或公式,没有表单,只有下面显示的一个宏。我可以手动复制工作表或更改宏以隐藏我不想要的工作表,但是我得到了一个更复杂的宏的错误,它将一个工作表从不同文件夹中的39个工作簿复制到一个工作簿有39张,所以我真的很想知道是什么导致了这一点。 我正在使用Windows 10版本1709运行Microsoft Office 365 ProPlus。宏首先遇到“NG”表,因此导致问题的代码行始终是“Case is =”NG“'之后的代码:

'表格(SheetName)。复制后:=工作簿(“Gas History Henry Mayo.xlsx”)。表格(GasSheetCount)'

Sub CreateWaterAndGasWorkbooks()
    Dim i As Integer
    Dim SheetName As String
    Dim SheetType As String
    Dim WaterSheetCount As Integer
    Dim GasSheetCount As Integer
    WaterSheetCount = 1
    GasSheetCount = 1

    With Range("A1")
    For i = 1 To Sheets.Count
       SheetName = Sheets(i).Name
       SheetType = ""
       If InStr(1, SheetName, "H2O") > 0 Then SheetType = "Water"
       If InStr(1, SheetName, "NG") > 0 Then SheetType = "NG"
       .Cells(i, 1).Value = SheetName 'Just for debug, so I know where
       .Cells(i, 2).Value = SheetType 'I was if it bombs.
       Select Case SheetType
       Case Is = "Water"
          Sheets(SheetName).Copy After:=Workbooks("Water History Henry Mayo.xlsx").Sheets(WaterSheetCount)
          WaterSheetCount = WaterSheetCount + 1
          Windows("Utility Cost Spreadsheets.xlsx").Activate
       Case Is = "NG"
          Sheets(SheetName).Copy After:=Workbooks("Gas History Henry Mayo.xlsx").Sheets(GasSheetCount)
          WaterSheetCount = GasSheetCount + 1
          Windows("Utility Cost Spreadsheets.xlsx").Activate
       Case Else
       'do nothing
       End Select
    Next i
    End With
End Sub

2 个答案:

答案 0 :(得分:0)

尝试使用下面的简短版本,而不使用任何public function addTenancy() { return $this->accepted == 0 && $this->request_sent == 0; } public function hasRequestPending() { return $this->accepted == 0 && $this->request_sent == 1; } public function inTenancy() { return $this->accepted == 1 && $this->request_sent == 0; }

修改后的代码

Activate

答案 1 :(得分:0)

虽然使用VBA时发生了错误,但我怀疑这不是因为代码本身出了什么问题。我一直在搜索,最后发现了一个禁用Excel加载项的建议。我禁用了其中两个(名称管理器实用程序和查找链接),现在我的原始代码和Shari Rado贡献的改进版本都有效。

我在StackOverflow上发现了6个关于“Excel已经停止工作”的讨论,所有这些讨论都有不同的情况(但主要涉及打开或关闭工作簿)&阅读45个答案。没有人建议禁用加载项。所以,如果你是像Shai那样试图帮助那些在这里发布问题的人的人之一,那么你应该将这种方法添加到你的技巧中。在这里,我找到了适合我的答案:

https://www.stellarinfo.com/blog/fix-microsoft-excel-stopped-working-error/