Excel-VBA-Collection
114 строк · 3.1 Кб
1Attribute VB_Name = "TextFile"
2Option Explicit
3Option Compare Text
4Option Base 1
5DefLng A-Z
6
7Public Sub ErrorBox(e As ErrObject, Optional Description As Variant, Optional TITLE As Variant)
8If IsMissing(Description) Then Description = e.Description _
9Else Description = BPrintF("%s\n\%s", Description, e.Description)
10If IsMissing(TITLE) Then TITLE = BPrintF("Ошибка %d в %s", e.Number, e.Source)
11MsgBox Description, vbExclamation, TITLE
12End Sub
13
14Public Sub DumpFile()
15Dim s As String, Buf As String, p, d, r
16
17Buf = Cells(1, 1).Text
18If Len(Buf) = 0 Then _
19Buf = Application.GetOpenFilename("Файлы TXT (*.txt),*.txt,Все файлы (*.*),*.*", 1, "Открытие файла TXT")
20
21s = InputFile(Buf)
22If Len(s) = 0 Then Exit Sub
23s = CWin(s) & vbLf
24
25Columns("A:A").Clear
26Cells(1, 1) = Buf
27Application.ScreenUpdating = False
28p = 1: r = 2
29Do
30d = InStr(p, s, vbCrLf) 'DOS eoln
31If d = 0 Then d = InStr(p, s, vbLf) 'else UNIX eoln
32If d = 0 Then Exit Do 'no eoln is eof
33If d = p Then Exit Do
34Buf = Mid(s, p, d - p)
35Cells(r, 1) = "'" & Buf
36p = d + 2
37r = r + 1
38Loop
39
40s = "$A$2:$A$" & Trim(CStr(r - 1))
41With Range(s)
42.Font.Name = "Courier New"
43'.NumberFormat = "@"
44.Interior.ColorIndex = 35
45.Interior.Pattern = xlSolid
46End With
47ActiveSheet.PageSetup.PrintArea = s
48
49Columns("A:A").AutoFit
50Application.ScreenUpdating = True
51End Sub
52
53Public Function InputFile(FName As String) As String
54Dim FNum As Long
55On Error GoTo ErrHandler
56FNum = FreeFile
57Open FName For Binary Access Read Lock Write As FNum
58InputFile = Input(LOF(FNum), #FNum)
59Close #FNum
60On Error GoTo 0
61Exit Function
62ErrHandler:
63Close #FNum
64InputFile = ""
65ErrorBox Err, BPrintF("Чтение файла ~%s~", FName)
66End Function
67
68Public Sub OutputFile(FName As String, s As String)
69Dim FNum As Long
70On Error GoTo ErrHandler
71FNum = FreeFile
72Open FName For Output Access Write Lock Write As FNum
73Close #FNum
74FNum = FreeFile
75Open FName For Binary Access Write Lock Write As FNum
76Put #FNum, , s
77Close #FNum
78On Error GoTo 0
79Exit Sub
80ErrHandler:
81Close #FNum
82ErrorBox Err, BPrintF("Запись файла ~%s~", FName)
83End Sub
84
85Public Sub AppendFile(FName As String, s As String)
86Dim FNum As Long, p As Long
87On Error GoTo ErrHandler
88FNum = FreeFile
89Open FName For Binary Access Write Lock Write As FNum
90p = LOF(FNum)
91If p = 0 Then p = 1
92Put #FNum, p, s
93Close #FNum
94On Error GoTo 0
95Exit Sub
96ErrHandler:
97Close #FNum
98ErrorBox Err, BPrintF("Добавление файла ~%s~", FName)
99End Sub
100
101Public Sub WipeFile(FName As String)
102Dim FNum As Long
103On Error GoTo ErrHandler
104FNum = FreeFile
105Open FName For Output Access Write Lock Write As FNum
106Print #FNum, String(LOF(FNum) + 4096, "*")
107Close #FNum
108Kill FName
109On Error GoTo 0
110Exit Sub
111ErrHandler:
112Close #FNum
113ErrorBox Err, BPrintF("Затирание файла ~%s~", FName)
114End Sub
115