- 帖子
- 109
- 主題
- 2
- 精華
- 0
- 積分
- 114
- 點名
- 0
- 作業系統
- Win7 Win10
- 軟體版本
- Office 2019 WPS
- 閱讀權限
- 20
- 性別
- 男
- 來自
- 深圳
- 註冊時間
- 2013-2-2
- 最後登錄
- 2024-11-6
|
回復 1# ljuber - Private Sub StartLoadText()
- Const ColumnsNum As Long = 7
- Dim strFind As String
- Dim Value() As Variant, valRow() As String
- Dim StartRow As Long
- Dim textFile As String
- Dim bytArr() As Byte
- Dim I As Long, J As Long
- Dim TextFileName As Variant
- Dim RegExp As Object
- Dim Matchs As Object
-
- On Error Resume Next
- Set RegExp = CreateObject("VBScript.RegExp")
- If RegExp Is Nothing Then Exit Sub
- TextFileName = Application.GetOpenFilename(FileFilter:="Text File,*.TXT", FilterIndex:=1, Title:="Please Change a Text File")
- StartRow = Sheet2.Range("A" & Sheet2.Rows.Count).End(xlUp).Row
- If StartRow < 2 Then Exit Sub
- If VarType(TextFileName) = vbString Then
- I = FileLen(TextFileName)
- If I < 1 Then Exit Sub
- ReDim bytArr(0 To I - 1)
- I = FreeFile
- Open TextFileName For Binary As I
- Get I, , bytArr()
- Close I
- textFile = StrConv(bytArr, vbUnicode)
- Erase bytArr
- With RegExp
- .Global = True
- .IgnoreCase = True
- If StartRow > 2 Then
- .Pattern = "(\S+\t){4}((" & Join(Application.WorksheetFunction.Transpose(Sheet2.Range("A2:A" & StartRow).Value), ")|(") & "))(\t.+)*"
- Else
- .Pattern = "(\S+\t){4}(" & Sheet2.Range("A2").Value & ")(\t.+)*"
- End If
- Set Matchs = .Execute(textFile)
- End With
- With Matchs
- ReDim Value(0 To .Count - 1, 0 To ColumnsNum - 1)
- For I = 0 To .Count
- valRow = Split(.Item(I), vbTab)
- For J = 0 To ColumnsNum - 1
- Value(I, J) = valRow(J)
- Next J
- Next I
- End With
- Set Matchs = Nothing: Set RegExp = Nothing
- StartRow = Sheet1.Range("A" & Sheet1.Rows.Count).End(xlUp).Row
- StartRow = StartRow + 1
- Application.ScreenUpdating = False
- Sheet1.Range("A" & StartRow).Resize(I - 1, ColumnsNum).Value = Value
- Application.ScreenUpdating = True
- End If
- End Sub
複製代碼 運行附件
練習.zip (350.79 KB)
中的按鈕: |
|