【发布时间】:2018-02-23 00:08:35
【问题描述】:
我开始编写一个代码,该代码将打开一个 csv 文件,查找特定列,然后将它们复制并粘贴到主 Excel 工作簿中。
csv 文件将有各种不同的标题,因为它们是自动生成的。在尝试复制任何信息之前,我想验证 csv 文件以确保存在所有必要的数据。
Dim WebImp As Workbook
Dim BackLog As String
Dim col As Long, res As Variant
Dim SearchValue As String
Private Sub CommandButton1_Click()
planned:
MsgBox "Open a valid Web Backlog export.", vbExclamation, "Web Import"
Application.FileDialog(msoFileDialogFilePicker).Show
BackLog = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
Set WebImp = Workbooks.Open(BackLog)
Application.DisplayAlerts = False
Application.ScreenUpdating = False
WebImp.Sheets(1).Activate
SearchValue = "Summary"
res = Application.Match(SearchValue, WebImp.Sheets(1).Rows(1), 0)
If IsError(res) Then
WebImp.Close
MsgBox "File missing necessary data.", vbExclamation, "Missing Data"
GoTo planned
End If
End Sub
这是标题的示例。突出显示的是我要查找的列,但不能保证它将来会出现在 A 列中。
目前,我的代码默认为
错误 2042
并确定文件不正确,即使存在带有“摘要”的单元格。
我写的语法有什么问题? 为什么不能正确抓取? 有哪些潜在的解决方案?
【问题讨论】:
-
你应该使用
WebImp.Sheets(1).Rows(1)而不仅仅是Rows(1) -
刚刚仔细检查,单元格“摘要”中没有空格
-
Len([A1])是什么?您确定该单元格中没有其他非打印字符吗? -
@DavidZemens 他正在打开一个 CSV,所以应该只有一张纸?
-
Application.Match("*" & SearchValue & "*", WebImp.Sheets(1).Rows(1), 0)有效吗?如果是这样,则单元格中有一些额外的字符。