Excel VBA 强化脆弱的功能



我创建了一个电子表格来跟踪我妻子的学生数据。有2个版本,大师版和教师版。唯一的区别是教师版本隐藏了几个选项卡和按钮。

每天结束时,她都会收集教师版本,并使用附加到按钮的宏将其数据合并到主版本中。它经常导致 Excel 崩溃。似乎尝试合并 U 盘上的工作簿是使其崩溃的可靠方法,但我尚未确定其他情况。

她的技术不够熟练,无法逐步完成代码,直到它爆炸,当她这样做时我不能在那里。

以前强化代码的尝试涉及摆脱Activesheet或Activeworkbook的任何实例,并始终使用对工作表的直接引用(即Sheet1,但重命名为有意义的名称 - 在下面的示例中"合并"(。

下面的函数 LoadTeacherData 为每个要合并的工作簿调用一次。它所做的只是复制教师数据选项卡上的现有记录,将它们复制到主合并选项卡,然后从源中删除它们。我认为,当它崩溃时,它会在选择要加载的文件后立即崩溃。

Sub LoadTeacherData()
Dim wb_td As Workbook
Dim td As Worksheet
Dim newdata As Range
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Excel files", "*.xlsm"
If .Show = -1 Then
file_name = .SelectedItems(1)
Else
Exit Sub
End If
End With
Application.ScreenUpdating = False
Set wb_td = Workbooks.Open(Filename:=file_name, UpdateLinks:=False, ReadOnly:=False)
If wb_td Is Nothing Then
MsgBox "Unable to open file, check path", vbOKOnly
Exit Sub
End If
file_name = wb_td.Name
Set td = wb_td.Worksheets("data")
row = LastRow(td, "C")
col = LastCol(td, 1)
Set newdata = td.Range("a2", td.Cells(row, col))
newdata.Copy Destination:=Merge.Cells(LastRow(Merge, "C") + 1, 1)
newdata.Clear
MsgBox (row - 1 & " records merged")
wb_td.Close
ThisWorkbook.Activate
ThisWorkbook.Save
Application.ScreenUpdating = True

End Sub

Function LastRow(ByRef ws As Worksheet, ByVal colname As String)
LastRow = ws.Range(colname & ws.Rows.Count).End(xlUp).row
End Function
Function LastCol(ByRef ws As Worksheet, ByVal rownum As Long)
LastCol = ws.Cells(rownum, ws.Columns.Count).End(xlToLeft).Column
End Function

我怀疑它与打开文件时的权限有关。她的 excel 版本配置为每次打开文件时都必须启用内容。

您可能正在处理损坏的文件。 查看工作簿.open 方法。在损坏负载下有几个选项可能会有所帮助。试试这个并尝试一下,看看其他方法是否在你的情况下效果更好。

Set wb_td = Workbooks.Open(Filename:=file_name, UpdateLinks:=False, ReadOnly:=False, corruptload:=xlRepairFile)

最新更新