2016-04-22 4 views
0

Я хочу, чтобы разбить строку в текстовое поле во многие текстовые поля в каждой коробке, содержащих одно слово, с помощью VBA в AccessMS Access: использовать VBA для разбиения строки из текстового поля в другие текстовые поля

так что позволяет сказать текст имя ящика text1 и содержит строку, как hello I'm asking a question

Я хочу разделить эту строку в текстовые поля, поэтому было бы как

text2 = hello 
text3 = I'm 
text4 = asking 
...etc 

есть простой способ сделать это?

+0

Да, есть. разделите значение текстового поля пробелом на массив и пропустите его через некоторое время/для каждого. ядро цикла должно CreateControl (см. ms help) новое текстовое поле, добавить элемент n-го массива в качестве текста, и это –

ответ

1

Вот изящное решение найдено: ParseWord() Function

Код ниже немного длинно, но легко использовать после внедрения. Что делает этот код, так это создание функции в вашем проекте базы данных. Эта функция называется: ParseWord(). Это не встроенная функция. Следовательно, почему вам нужно добавить код в модуль в проект базы данных.

Function ParseWord(varPhrase As Variant, ByVal iWordNum As Integer, Optional strDelimiter As String = " ", _ 
    Optional bRemoveLeadingDelimiters As Boolean, Optional bIgnoreDoubleDelimiters As Boolean) As Variant 
On Error GoTo Err_Handler 'I COMMENTED THIS OUT AND THE REFERENCE AT THE BOTTOM 
    'Purpose: Return the iWordNum-th word from a phrase. 
    'Return: The word, or Null if not found. 
    'Arguments: varPhrase = the phrase to search. 
    '   iWordNum = 1 for first word, 2 for second, ... 
    '    Negative values for words form the right: -1 = last word; -2 = second last word, ... 
    '    (Entire phrase returned if iWordNum is zero.) 
    '   strDelimiter = the separator between words. Defaults to a space. 
    '   bRemoveLeadingDelimiters: If True, leading delimiters are stripped. 
    '    Otherwise the first word is returned as null. 
    '   bIgnoreDoubleDelimiters: If true, double-spaces are treated as one space. 
    '    Otherwise the word between spaces is returned as null. 
    'Author: Allen Browne. http://allenbrowne.com. June 2006. 
    Dim varArray As Variant  'The phrase is parsed into a variant array. 
    Dim strPhrase As String  'varPhrase converted to a string. 
    Dim strResult As String  'The result to be returned. 
    Dim lngLen As Long   'Length of the string. 
    Dim lngLenDelimiter As Long 'Length of the delimiter. 
    Dim bCancel As Boolean  'Flag to cancel this operation. 

    '************************************* 
    'Validate the arguments 
    '************************************* 
    'Cancel if the phrase (a variant) is error, null, or a zero-length string. 
    If IsError(varPhrase) Then 
     bCancel = True 
    Else 
     strPhrase = Nz(varPhrase, vbNullString) 
     If strPhrase = vbNullString Then 
      bCancel = True 
     End If 
    End If 
    'If word number is zero, return the whole thing and quit processing. 
    If iWordNum = 0 And Not bCancel Then 
     strResult = strPhrase 
     bCancel = True 
    End If 
    'Delimiter cannot be zero-length. 
    If Not bCancel Then 
     lngLenDelimiter = Len(strDelimiter) 
     If lngLenDelimiter = 0& Then 
      bCancel = True 
     End If 
    End If 

    '************************************* 
    'Process the string 
    '************************************* 
    If Not bCancel Then 
     strPhrase = varPhrase 
     'Remove leading delimiters? 
     If bRemoveLeadingDelimiters Then 
      strPhrase = Nz(varPhrase, vbNullString) 
      Do While Left$(strPhrase, lngLenDelimiter) = strDelimiter 
       strPhrase = Mid(strPhrase, lngLenDelimiter + 1&) 
      Loop 
     End If 
     'Ignore doubled-up delimiters? 
     If bIgnoreDoubleDelimiters Then 
      Do 
       lngLen = Len(strPhrase) 
       strPhrase = Replace(strPhrase, strDelimiter & strDelimiter, strDelimiter) 
      Loop Until Len(strPhrase) = lngLen 
     End If 
     'Cancel if there's no phrase left to work with 
     If Len(strPhrase) = 0& Then 
      bCancel = True 
     End If 
    End If 

    '************************************* 
    'Parse the word from the string. 
    '************************************* 
    If Not bCancel Then 
     varArray = Split(strPhrase, strDelimiter) 
     If UBound(varArray) >= 0 Then 
      If iWordNum > 0 Then  'Positive: count words from the left. 
       iWordNum = iWordNum - 1   'Adjust for zero-based array. 
       If iWordNum <= UBound(varArray) Then 
        strResult = varArray(iWordNum) 
       End If 
      Else      'Negative: count words from the right. 
       iWordNum = UBound(varArray) + iWordNum + 1 
       If iWordNum >= 0 Then 
        strResult = varArray(iWordNum) 
       End If 
      End If 
     End If 
    End If 

    '************************************* 
    'Return the result, or a null if it is a zero-length string. 
    '************************************* 
    If strResult <> vbNullString Then 
     ParseWord = strResult 
    Else 
     ParseWord = Null 
    End If 

Exit_Handler: 
    Exit Function 

Err_Handler: 'I COMMENTED OUT THESE 4 LINES 
    Call LogError(Err.Number, Err.Description, "ParseWord()") 
    Resume Exit_Handler 
End Function 

После добавления функции в модуль в базе данных, вы сможете вызвать его в коде VBA так же, как встроенная функция.

Пример (на событие щелчка):

enter image description here

Я также должен был закомментировать "On Error GoTo Err_Handler" Линии, так как у меня не было тех, кто настроен. (Я ссылался на них в коде)

+0

Большое вам спасибо, что ваш код работает, как шарм, он выполняет задание, как ожидалось. У меня нет ошибки обработчик тоже, поэтому я снова удалил эти строки :) –

+0

Не мой код. Подтвердите сайт. Я просто открыл этот код, и я обязательно запомню его, если мне это понадобится. Рад помочь! – Huntdogg

+0

, даже если это не ваше, это очень помогло мне, я пытался понять это так много дней, что даже не погубил его без везения, поэтому спасибо за вашу помощь –

3

Доступ имеет встроенную команду split(), которая сделает это.

Таким образом, этот код будет работать:

Dim v  As Variant 
Dim sOne  As Variant 
Dim i  As Integer 

v = Split(Me.TextBox0, " ") 
i = 0 
For Each sOne In v 
    i = i + 1 
    Me("text" & i) = sOne 
Next 

Так выше будет взять строку из textbox0 на форме, и положить сказать 3 значения в текстовое поле от 1 до 3.

Так большая неисправном кода не требуется.

Смежные вопросы