2013-09-03 1 views
0

Ниже приведен фрагмент макроса, который я пишу, чтобы предупредить пользователей о том, что у них может не быть достаточного количества совместимого установочного оборудования в заказе. n недостатков (т. е. каждый экземпляр предмета оборудования, не имеющего совместимого установочного оборудования, сохраняется в массиве yankees() в элементах с 1 по n. Что я хочу сделать, так это запрашивать пользователей с полем сообщения с сообщением «Пожалуйста, просмотрите свой заказ, чтобы убедиться, что у вас есть вам достаточно совместимая установка оборудование- мы обнаружили следующие недостатки «Ввод всех элементов переменной массива в их собственную строку в поле сообщения

и ниже этого

включает все каждый элемент Янкиза (от 1 до п) на отдельных строках в окне сообщения с двумя вариантами ниже» Это хорошо, я отправлю свой заказ сейчас »и« Позвольте мне вернуться, я хочу изменить свой заказ ».

Как создать такое окно сообщений?

у меня есть:

MsgBox "Please review your order to ensure you have you sufficient compatible  installation equipment- we detected the following concerns" & yankee(1), vbOKCancel 

в настоящее время, но это включает в себя только первый недостаток. Как включить все элементы yankee() и поместить их в свою линию?

Этот вопрос действительно сводится к следующему: «Как поместить все непустые элементы переменной массива в свои строки в командной строке сообщения»?

Do 
If rip(qbert) < k(qbert) Then 
yankee(jets) = "Your order for" & s(qbert) & " contains " & k(qbert) - rip(qbert) & " too  few " & g(qbert) 
jets = jets + 1 
qbert = qbert + 1 
Else 
qbert = qbert + 1 
End If 
Loop Until qbert > echo 
+0

btw, yankees() имеет пустые элементы, но заполняются первые n элементов, где n - количество недостатков. –

+0

Подождите секунду, не переделайте yankees(), чтобы включить только первые n элементов, минимизирующих требования к ресурсам? –

ответ

5

Вы можете использовать функцию Join:

Sub Test() 
    Dim var As Variant 

    'Populate a dummy vector array from a comma-separated list: 
    var = Split("Alpha,Beta,Gamma,Delta,Epsilon", ",") 

    'Display the contents of the array as delimited list, use the Carriage Return to delimit: 
    MsgBox Join(var, vbCR) 

End Sub 

enter image description here

выше не игнорирует пробелы. Чтобы игнорировать пробелы, в соответствии с вашим конкретным вопросом, вы можете перебирать массив и тестировать пустые значения. Я хотел бы сделать это в Function:

Как я кладу все непустые элементы переменного массива на свои собственные строки в окне сообщения строки

В вашей подлодке, просто передать yankees этой функции , как:

MsgBox = GetMessageText(yankees) 

Вот функция:

Function GetMessageText(var As Variant) As String 
    'Assumes a vector array 
    On Error GoTo EarlyExit 

    Dim sMsg As String 
    Dim v As Variant 

    For Each v In var 
     If Not v = vbNullString Then 
      sMsg = sMsg & v & vbCr 
     End If 
    Next 

EarlyExit: 
    If Err.Number = 0 Then 
     GetMessageText = sMsg 
    Else: 
     GetMessageText = "invalid array" 
    End If 

End Function 
+0

Спасибо, что это очень хорошо, но есть ли способ, которым я могу быть, скажем, у янки есть 4 элемента, тогда функция var = split (янки (1), янки (2), янки (3), янки (4), ",")? Я пытался что-то сделать с помощью циклов, но я застрял, поскольку компилятор ожидает, что правильный синтаксис завершит выражение. –

+0

Вам не нужно использовать 'var = Split (yankees (1), ...' и т. Д. Вы должны иметь возможность просто «Join (yankees, vbCR)». Если вам нужно больше нюансов (например, игнорирование пустые элементы) дайте мне знать. –

+0

Спасибо, также, когда вы говорите, что использование каретки возвращает то, что вы имеете в виду? –

2

Altern ate:

Sub tgr() 

    Dim yankee(1 To 5) As String 
    Dim strMsg As String 

    yankee(1) = "Did this" 
    yankee(3) = "experiment" 
    yankee(5) = "really work?" 

    'yankee => ["Did this", , "experiment", , "really work?"] _ 
    the yankee array has two blanks at positions 2 and 4 _ 
    and it also has spaces in some of the element strings 

    strMsg = Replace(Replace(WorksheetFunction.Trim(Replace(Replace(Join(yankee, "|"), " ", "_"), "|", " ")), " ", vbCrLf), "_", " ") 

    'strMsg => "Did this _ 
       experiment _ 
       really work?" 

    'Yes it did, see result 
    MsgBox strMsg 

End Sub 
+0

Буквально опустил ваш 'strMsg = Заменить (заменить (WorksheetFunction.Trim (Заменить (Заменить (Join (yankee," | ")," "," _ ")," | "," "))," ", vbCrLf), «_», «») и «msgBox strMsg», и он работал точно так, как я надеялся. @Tigeravatar: Какая потребность в замене функций? Элементы массива разделены | в памяти? –

+1

Нет, "|" является просто заполнителем. Я использовал функции замены для сохранения существующих пространств с помощью _, а затем заменил | (это то, что я указал в методе Join) с пробелами, использовала обрезку функции рабочего листа, которая удаляет лишние пробелы, даже если они находятся в середине строки. Это гарантирует, что пустые элементы в массиве не будут отображаться как дополнительные функции без использования цикла. Затем я превратил любые оставшиеся пробелы (которые теперь являются разделителями элементов массива) в linefeeds, а затем изменил символы подчеркивания обратно в пробелы – tigeravatar

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