Страницы: 1
RSS
Использование подпрограмм-процедур
 
Добрый день
Возник вопрос в том как преобразовать программу так, чтобы:
1. Ввод данных с рабочего листа производить в головной программе;
2. Преобразование строки производить в подпрограмме-процедуре;
3. Результат решения выводить в соседнюю последовательность ячеек рабочего листа из головной программы.

Данная  программа из столбца со словами выбирает те,в которых первая буква встречается более одного раза и выводит эти слова в соседний столбец
Буду очень благодарна за вашу помощь!
 
Что в Вашем понимании 'головная' программа? Как все это должно работать с точки зрения пользователя? Просто, по-русски, объясните
Согласие есть продукт при полном непротивлении сторон
 
Sanja, вот пример того как под эти условия была преобразована другая программа
Код
Public min% ‘объявление глобальной
переменной min
Sub lb7_2() ‘головная программа
Dim lenstr() As
Integer, i%, j%, s$
i = 0
Do While Лист1.Range("A" & i + 1).Text <>
""
i = i + 1
s = Лист1.Range("A" & i).Text
ReDim Preserve
lenstr(1 To i)
lenstr(i) = Len(s)
Loop
Call modify(lenstr%(), i%) ‘вызов вспомогательной процедуры modify, в которую ‘передается массив
длин слов и количество слов (переменная i)
For j = 1 To i  ‘ цикл вывода
слов с минимальной длиной в столбец C
If lenstr(j) = min
Then Cells(j, 3) = Cells(j, 1)
Next
End Sub
 

Sub modify(lenstr%(), i%) ‘вспомогательная программа для обработки
Dim j%
min = lenstr(1) 
For j = 2 To i ‘цикл поиска
минимальной длины
If lenstr(j) <
min Then min = lenstr(j)
Next
End Sub

Изменено: Tifnut - 12.12.2018 12:04:15
 
Цитата
Tifnut написал:
2. Преобразование строки производить в подпрограмме-процедуре
Но в этой программе не производится преобразование строк! Можно было бы вынести в отдельную процедуру проверку - встречается ли в данной строке первая буква более одного раза, но это лучше реализуется подпрограммой-функцией, а не процедурой.
Конечно можно и процедурой  :sceptic:
Код
Sub lab7_1()
    Dim var, lr As Long, r As Long, i As Long, res As Boolean
    Application.ScreenUpdating = False
    lr = Cells(Rows.Count, "A").End(xlUp).Row
    For i = 1 To lr
        var = Cells(i, "A").Value
        Test var, res
        If res Then
            r = r + 1
            Cells(r, "B").Value = var
        End If
    Next i
    Application.ScreenUpdating = True
    MsgBox "Готово!", vbInformation
End Sub

Sub Test(var, result As Boolean)
  result = InStr(2, var, Left(var, 1), vbTextCompare)
End Sub
 
Казанский, спасибо за твою помощь!:)
Страницы: 1
Наверх