如何使用Excel vba查找特定的文本词
我需要从Excel文件中找到一个特定的单词。我想逐行搜索,如果找到单词,向下跳过2行,复制接下来的20行,循环到下一个单词如何使用Excel vba查找特定的文本词,excel,vba,Excel,Vba,我需要从Excel文件中找到一个特定的单词。我想逐行搜索,如果找到单词,向下跳过2行,复制接下来的20行,循环到下一个单词 Sub Example4() Dim FilePath As Workbook Dim wsheet As Worksheet Dim i, lcount, lcount2 As Integer Dim cell, rgFound As Range Dim Found As Range, LastRow As Long Set FilePath = Wor
Sub Example4()
Dim FilePath As Workbook
Dim wsheet As Worksheet
Dim i, lcount, lcount2 As Integer
Dim cell, rgFound As Range
Dim Found As Range, LastRow As Long
Set FilePath = Workbooks.Open("D:\SLC.txt")
Dim rowVal As Integer
rowVal = 1
For lcount = 1 To FilePath.Sheets("SLC").Range("A1048576").End(xlUp).Row
Set rgFound = Range("A1:A1048576").Find("TXN. NO TXN SEQ", ThisWorkbook.Sheets(), Cells(rowVal, 1))
FilePath.Cells(wsheet.Range(rowVal).End(xlDown).Row + 3).xlCopy
wbook2.Worksheets(1).Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
wbook2.SaveAs ("D:\SLC_Copied.xlsx")
wbook2.Close
rowVal = rgFound1.Row
Debug.Print lcount
Next lcount
End Sub
正如Siddharth Rout所建议的,使用Find和FindNext。 尝试选择适合其类型的变量名,调用工作簿对象文件路径会使试图理解脚本的其他人感到困惑
Option Explicit
Sub Example4()
Const TEXT = "TXN. NO TXN SEQ"
Const TEXT_FILENAME = "D:\SLC.txt"
Const OUT_FILENAME = "D:\SLC_Copied.xlsx"
Dim wbText As Workbook, wbOut As Workbook, rngOut As Range
Dim wsText As Worksheet, wsOut As Worksheet, count As Integer
Dim rngSearch As Range, rngFound As Range, rowFirstFind As Long
' open text file no link update, read only
Set wbText = Workbooks.Open(TEXT_FILENAME, False, True)
Set wsText = wbText.Sheets(1)
' search
Set rngSearch = wsText.Columns("A:A")
Set rngFound = rngSearch.Find(what:=TEXT, LookIn:=xlValues, LookAt:=xlPart)
If rngFound Is Nothing Then
wbText.Close
MsgBox "No lines match [" & TEXT & "]", vbCritical, "Exiting Sub"
Exit Sub
Else
' create new workbook for results
Set wbOut = Workbooks.Add
Set wsOut = wbOut.Sheets(1)
Set rngOut = wsOut.Range("A1")
rowFirstFind = rngFound.Row
Do
'Debug.Print rngFound.Row
rngFound.Offset(3, 0).Resize(20, 1).Copy rngOut
Set rngOut = rngOut.Offset(20, 0)
Set rngFound = rngSearch.FindNext(rngFound)
count = count + 1
Loop Until rngFound.Row = rowFirstFind
End If
wbText.Close False
wbOut.SaveAs OUT_FILENAME
MsgBox count & " blocks copied to " & wbOut.Name, vbInformation, "Finished"
wbOut.Close
End Sub
你能用你迄今为止尝试过的代码更新你的帖子,并描述它失败的地方吗?设置rgfind=Range(“A1:A1048576”)。Find(“TXN.NO TXN SEQ”,thishworkbook.Sheets(),Cells(rowVal,1))谢谢。它在哪里失败?它是如何工作的?@AllenW.Marx在我之前的评论中,它显示了我的类型未匹配错误(运行时错误13),但我的数据类型是正确的尝试将
选项Explicit
放在您的代码中,在子示例4()上方中。然后试着运行你的代码。您还应该尝试使用Excel将SLC.txt
导入为CSV。我不确定你是否能用文本文件做你想做的事情。