запись вывода в текстовый файл - PullRequest
0 голосов
/ 14 мая 2018

Мне нужно найти первые 20 000 случайных чисел, сгенерированных RND -1. Я написал следующий код, который позволяет мне видеть эти цифры в «Немедленном окне»:

Sub xx()
Dim i As Long
Rnd -1
For i = 1 To 20000
    Debug.Print Rnd
Next i
End Sub

Тем не менее, там хранятся только последние 199 строк, которые я могу скопировать и вставить. Как вместо этого записать весь вывод в текстовый файл?

Большое спасибо

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Отвечая на ваш вопрос: вот основная функция для этой задачи. Обязательно добавьте проверки, существует ли файл, не заблокирован и т. Д. Но взгляните на решение, предоставленное Джоном Коулманом, так как оно может быть лучшим решением для вашей задачи.

Public Function WritetoTXT (Byval Text as String, byval FilePath as String)    
    Dim TextFile As Long
    TextFile = FreeFile
    Open Path For Append As TextFile
    Print #TextFile, Text
    Close TextFile
End Function

В вашем коде:

Sub xx()
Dim i As Long
Rnd -1
For i = 1 To 20000
    WritetoTXT  Rnd, "your file path here"
Next
End Sub

Edit: Как указано в комментариях, чтобы уменьшить накладные расходы, вы можете комбинировать свой код со следующим:

Sub xx()
Dim i As Long
Rnd -1
Dim TextFile As Long
TextFile = FreeFile
Open "your file path here" For Append As TextFile
For i = 1 To 20000
    Print #TextFile,  Rnd
Next
Close TextFile
End Sub
0 голосов
/ 14 мая 2018

Вы можете легко записать в текстовый файл (поток файлов), используя FileSystemObject. Ниже приведен пример работы кода в модуле:

Global fso As New FileSystemObject

Public Function GenRandomNumbers(ByVal n As Long) As String
    Dim i As Long
    Dim res As String
    Rnd -1
    For i = 1 To n
        res = res & CStr(Rnd()) & vbCrLf
    Next i
    GenRandomNumbers = res
End Function

Public Sub WriteRandomNumbers(ByVal n As Long, ByVal filename As String)
    Dim fs As TextStream
    Set fs = fso.CreateTextFile(filename, Overwrite:=True)
    fs.Write GenRandomNumbers(n)
    fs.Close
End Sub

В ближайшем окне вы можете написать:

WriteRandomNumbers 20000, "Result.txt"

scr

0 голосов
/ 14 мая 2018

Поскольку ваша цель состоит в том, чтобы получить много случайных чисел в буфере обмена, вы можете сделать следующее:

в редакторе VBA в разделе инструменты / ссылки, добавьте ссылку на Microsoft Forms 2.0 Object Library и затем используйте:

Sub RandToClip(n As Long)
    Dim clip As New DataObject
    Dim A As Variant
    Dim i As Long

    ReDim A(1 To n)
    Randomize

    For i = 1 To n
        A(i) = Rnd()
    Next i

    clip.SetText Join(A, vbCrLf)
    clip.PutInClipboard
End Sub

Если вы, например, введите RandToClip 20000 в буфер обмена, доступный для вставки в другое место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...