【发布时间】:2020-11-04 23:05:25
【问题描述】:
我编写了一些用于确定设备尺寸的工作簿。我通过 VBA 将设计的详细信息导出到 CSV 文件,以便更轻松地重新加载。下面附上代码。 该脚本大部分时间都可以工作,但是如果我尝试在保存一个 CSV 文件后不久尝试加载一个 CSV 文件,excel 有时会崩溃然后重新启动等。我有 4 个针对不同设备的不同大小的工作簿,每个都基于相同的 VBA 代码,它们都有同样的问题。
需要注意的是,当我保存 CSV 文件时,我会在文件名的末尾添加文本,以识别大小的设备类型,并防止将其识别为 excel 文件。这是由导出脚本完成的。例如“Filename.csv”被保存为“Filename.csv.WHRU”
'''''''''''''''''''''''''''''''''''''''''
工作表(12).激活
将 fStr 变暗为字符串 使用 Application.FileDialog(msoFileDialogFilePicker) .显示
If .SelectedItems.Count = 0 Then
MsgBox "Cancel Selected"
Exit Sub
End If
'fStr is the file path and name of the file
fStr = .SelectedItems(1)
End With
With ThisWorkbook.Sheets(12).QueryTables.Add(Connection:= _
"TEXT;" & fStr, Destination:=ThisWorkbook.Sheets(12).Cells(3, 7))
.Name = "CAPTURE"
.FieldNames = True
.RefreshStyle = xlOverwriteCells
.TextFileCommaDelimiter = True
.Refresh BackgroundQuery:=False
End With
For Each Cn In ThisWorkbook.Connections
Cn.Delete
Next Cn
For Each Cn In Sheets(12).QueryTables
Cn.Delete
Next Cn
'''''''''''''''''''''''''''''''''''''''''
【问题讨论】:
-
让我们首先在每个表单/模块/类的顶部添加
Option Explicit。您可以通过选择Tools->Options->Require Variable Declaration来默认此设置。现在,继续Debug->Compile VBAProject,直到所有错误都消失。我相当确定您正在重用变量,例如Cn,而没有正确声明/设置它们。保存文件的代码在哪里? -
另外,
Worksheets(12)并不总是与Sheets(12)相同。Sheets(3)可能是一张图表,然后把一切都搞砸了。 -
我浏览并更正了 Worksheets 与 Sheets。它出现在许多地方。我还声明了所有变量。同时我删除了 querytable.connection 定义中的“_”所有这三个项目结合起来解决了这个问题。