【发布时间】:2020-05-29 08:57:52
【问题描述】:
我想使用一个按钮将一个 txt 文件导入到 excel 中。 我有一个对话框可以选择文件夹名称并显示用户选择的文件夹名称。
如果用户选择取消,则由于类型不匹配而发生错误。我已将变量声明为 VARIANT
看看代码:
Sub ImportTXTFiles()
Dim fso As Object
Dim xlsheet As Worksheet
Dim qt As QueryTable
Dim txtfilesToOpen As Variant, txtfile As Variant
Application.ScreenUpdating = False
Set fso = CreateObject("Scripting.FileSystemObject")
txtfilesToOpen = Application.GetOpenFilename(FileFilter:="Text Files (*.txt), *.txt", _
MultiSelect:=True, Title:="Text Files to Open")
If txtfilesToOpen = "False" Then
Exit Sub
End If
For Each txtfile In txtfilesToOpen
' FINDS EXISTING WORKSHEET
For Each xlsheet In ThisWorkbook.Worksheets
If xlsheet.Name = Replace(fso.GetFileName(txtfile), ".txt", "") Then
xlsheet.Activate
GoTo ImportData
End If
Next xlsheet
' CREATES NEW WORKSHEET IF NOT FOUND
Set xlsheet = ThisWorkbook.Worksheets.Add( _
After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
xlsheet.Name = Replace(fso.GetFileName(txtfile), ".txt", "")
xlsheet.Activate
GoTo ImportData
我的问题是如何在此处处理此异常
If txtfilesToOpen = "False" Then
Exit Sub
End If
如果用户取消选择,而变量被声明为变体。
提前致谢。
【问题讨论】:
-
忽略
If txtfilesToOpen = "False" Then Exit Sub行之后的所有代码,没有任何问题,对我来说很好。您确定您的代码没有在其他地方中断吗? -
您也可以使用 GoTo 语句将其带到例程的末尾,我假设您有
Application.ScreenUpdating = True -
是的,我很确定它会在那里中断,并且由于变量类型,它改变了错误发生的原因。
-
这是一个变种,它应该改变。当您单击取消时,它返回一个
Boolean,因此您的Variant变为Boolean,并且VBA 可以从文本字符串“False”中推断出False,因此它可以正常工作。我的 Excel 2010 运行此代码没有问题,所以我有点困惑,为什么你的代码在这里失败,除非你更早地运行一些东西? -
好的,当你选择一个 txt 时,它肯定会在
For each中给你一个错误