MS Access VBA:将字符串拆分为预定义的宽度

时间:2018-11-14 22:53:23

标签: vba ms-access

我有一个MS Access表单,用户在其中将字符串粘贴到{Vars}字段中,我想将该字符串重新格式化为新字段,以便(a)保留整个单词,并且(b)在其中“适合” 70列。

具体来说,用户将从SPSS中剪切/粘贴变量名称。因此,字符串将以全名形式进入字段-不允许使用空格-每个变量之间都有换行符。因此,VBA代码的第一位看起来像这样:

Vars = Replace(Vars, vbCrLf, " ")

可删除换行符。但是从那里开始,我很困惑-最终,我希望将粘贴在Vars字段中的长字符串放在连续的多行中,每行不超过70列。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

好的,对于后代,这是一个解决方案:

捕获用户输入的表单上的字段名称是VarList。下面对SPSS_Syntax函数的调用返回了变量名列表(在“变量”中),这些变量名随后可以在其他地方使用:

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

也许有更好的方法可以做到这一点。干杯。