在检查代码时,需要注意以下几点:

  1. 在使用 InputBox 函数获取用户输入时,最好添加一些错误处理,例如判断用户是否取消了输入或输入是否为空。

  2. 在删除行时,应该从最后一行往前遍历,避免因为删除行导致行号发生变化而出现错误。

  3. 在复制行时,应该指定具体的列范围,避免出现列数不匹配的错误。

  4. 在关闭工作簿时,应该添加保存更改的选项,避免因为没有保存导致数据丢失。

下面是经过修改后的代码:

Sub ImportData() Dim wb As Workbook Dim ws As Worksheet Dim i As Long, j As Long Dim keyword As String Dim found As Boolean

'选择源文件
sourceFilePath = Application.GetOpenFilename(FileFilter:="Excel Files (*.xlsx), *.xlsx", Title:="选择源文件")
If sourceFilePath = "False" Then Exit Sub '如果没有选择文件则退出

'指定工作簿路径和关键字
Set wb = Workbooks.Open(sourceFilePath)
keyword = InputBox("请输入导入年月,如:202302")
If keyword = "" Then Exit Sub '如果用户没有输入则退出

'删除本工作表中所有包含关键字的行
Set ws = ThisWorkbook.Worksheets(1)
For i = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row To 1 Step -1
    found = False
    If InStr(ws.Cells(i, "A").Value, keyword) > 0 Then
        ws.Rows(i).Delete
        found = True
    End If
Next i

'在指定工作簿中复制所有包含关键字的行到本工作表
Set ws = wb.Worksheets(1)
For i = 1 To ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    found = False
    If InStr(ws.Cells(i, "A").Value, keyword) > 0 Then
        j = ThisWorkbook.Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row + 1
        ws.Range("A" & i & ":Z" & i).Copy Destination:=ThisWorkbook.Worksheets(1).Range("A" & j)
        found = True
    End If
Next i

'关闭指定工作簿并保存更改
wb.Close SaveChanges:=True

MsgBox "完成导入数据。"

End Sub

vba实现覆盖导入VBA可以通过以下代码实现覆盖导入:Sub ImportData Dim wb As Workbook Dim ws As Worksheet Dim fileName As String 选择要导入的文件 fileName = ApplicationGetOpenFilenameFileFilter=Excel Files xlsx xls

原文地址: https://www.cveoy.top/t/topic/bR7A 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录