2010-11-08 1 views
0

Я хотел бы добавить текстовый файл (.txt) назад, это возможно?Получение VBA для добавления txt снизу вверх

В обратном порядке я имею в виду писать текст снизу вверх, а не стандарты сверху вниз.

Почему, поскольку файл txt, который я хочу скомпилировать, считывается, так что элементам в верхней части списка присваивается приоритет тем, которые находятся внизу.

ответ

0

Я не могу думать ни о каком другом способе, кроме как создать новый файл, когда вы хотите вставить данные вверху, а затем удалить/переименовать старый и переименовать новый файл в новый.

+0

Да это уже приходила мне в голову тоже, его просто немного взломано, по-моему, – mike

0

Не уверен, что ваши требования НО, самый простой способ в VBA - 1. Добавьте ссылку на исполняемый файл Microsoft Scripting Runtime.

Public Sub Reverse() 
    Dim lReverseString As String 
    Dim lFSO As FileSystemObject 
    Set lFSO = New Scripting.FileSystemObject 
    With lFSO.OpenTextFile("SourceName", ForReading) 
     While Not .AtEndOfStream 
      ' Note if you are looking to read a line at at a time use .ReadLine Instead of .Read 
      lReverseString = .Read & lReverseString 
     Wend 
    End With 
    ' now you have a string in reverse 
    With lFSO.CreateTextFile("TargetName", True, False) 
     .Write lReverseString 
     .Close 
    End With 

End Sub 

Это основная форма, которая должна вас заставить.

+0

Я собираюсь проверить этот код, Im не после ввода текста назад, но мои последние записи находятся в верхней части финального файла txt? – mike

+0

Вы также можете использовать TextStream.ReadAll, чтобы прочитать весь файл в строковой переменной. – Raj

+0

Да, комментарий к .ReadLine должен перемещать строку за раз. –

0

Как насчет массива? Это не подходит с очень большой файл:

Dim fs As Object 
Dim ts As Object 
Dim AllTextArray As Variant 

''Late binding, no reference required 
Set fs = CreateObject("Scripting.FileSystemObject") 
''ForReading=1 
Set ts = fs.OpenTextFile("c:\docs\BookX.csv", 1) 
AllTextArray = Split(ts.ReadAll, vbCrLf) 

For i = UBound(AllTextArray) To 0 Step -1 
    Debug.Print AllTextArray(i) 
Next 
0

Если это просто писать каждый абзац или предложение в обратном порядке, чем это кажется:

Sub Test() 
    Dim currentDocument As Document 
    Set currentDocument = ActiveDocument 

    Dim sourceDocument As Document 
    Set sourceDocument = Documents.Add("c:\words.txt") 

    Dim i As Long 
    For i = sourceDocument.Paragraphs.Count To 1 Step -1 
     currentDocument.Range.InsertAfter sourceDocument.Paragraphs(i).Range.Text 
     DoEvents 
    Next 

    sourceDocument.Close wdDoNotSaveChanges 
End Sub