MS Access VBA: разбить строку на заданную ширину - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть форма MS Access, где пользователь вставляет строку в поле {Vars}, и я хочу переформатировать эту строку в новое поле, чтобы (а) она сохранила целые слова и (б) "вписалась" в70 колонн.

В частности, пользователь будет вырезать / вставлять имена переменных из SPSS.Таким образом, строка войдет в поле как целые имена - без пробелов - с разрывами строк между каждой переменной.Таким образом, первый бит кода VBA выглядит следующим образом:

Vars = Replace(Vars, vbCrLf, " ")

, который удаляет разрывы строк.Но оттуда я в замешательстве - в конечном счете, я хочу, чтобы длинная строка, вставленная в поле Vars, помещалась в несколько последовательных строк, каждая из которых не длиннее 70 столбцов.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 15 ноября 2018

Хорошо, для потомков, вот решение:

Имя поля в форме, которая захватывает ввод пользователя, - VarList.Вызов функции SPSS_Syntax, приведенной ниже, возвращает список имен переменных (в «Vars»), которые затем могут быть использованы в других местах:

Vars = SPSS_Syntax(me.VarList)

Напомним, что пользовательский ввод в Varlist входит как каждая переменная (слово) сразрыв строки между каждым.Проблема в том, что мы хотим, чтобы список был в одной строке (горизонтальной, а не вертикальной), а длина строки не должна превышать 256 символов (я устанавливаю ее на 70 символов ниже).Вот функция:

Public Function SPSS_Syntax(InputString As String)

InputString = Replace(InputString, vbNewLine, " ")  'Puts the string into one line, separated by a space.

MyLength = Len(InputString) 'Computes length of the string

If MyLength < 70 Then  'if the string is already short enough, just returns it as is.
    SPSS_Syntax = InputString
    Exit Function
End If

MyArray = Split(InputString, " ") 'Creates the array
Dim i As Long

For i = LBound(MyArray) To UBound(MyArray) 'for each element in the array
    MyString = MyString & " " & MyArray(i) 'combines the string with a blank space in between
    If Len(MyString) > 70 Then 'when the string gets to be more than 70 characters
        Syntax = Syntax & " " & vbNewLine & MyString 'saves the string as a new line
        MyString = "" 'erases string value for next iteration
    End If
Next

SPSS_Syntax = Syntax

End Function

Возможно, есть лучший способ сделать это, но это работает.Приветствия.

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