Ускорить работу программы - VB

Узнай цену своей работы

Формулировка задачи:

суть такова, на форме имеется два текст бокса и кнопка, в первый текст бокс вводится набор букв, во второй цифра, которая будет означать количество букв в слове, далее набор букв из первого текст бокса разбивается на отдельные символы и заполняется в массив, после чего из них генерируются слова, так вот этот код работает быстро к примеру на 3-4 символа (как в моем коде, скинутом для примера), вчера поставил генерацию из 12 символов, по 5 букв в слове так он залип на минут 15, мой вопрос таков: можно ли ускорить работу моего кода, или оптимизировать как то, или даже заменить что то, так как я может вообще использую "деревянный метод" так как программированием давно не занимался, и второй под вопрос, можно ли отсеивать не существующие слова сразу, Application.CheckSpelling - пропускает много не нужных слов. пример моего кода на генерацию 3 слова из трех букв:
может я плохо объяснил суть вопроса, в общем это генератор слов из заданных букв, буквы вводятся в первый текст бокс, а во второй вводится цифра, означающая количество букв в слове, после чего буквы из первого текст бокса заполняются в массив отдельными символами, а дальше с помощью вложенных циклов эти отдельные элементы массива присоединяются друг к другу во всех возможных комбинациях, и выводятся в ячейку таблицы Excel, я скинул фрагмент кода в котором генерация слова идет из трех букв, можно ли реализовать эту задачу другим способом, так как мой способ затрачивает много времени.

Решение задачи: «Ускорить работу программы»

textual
Листинг программы
Option Explicit
Option Compare Text
Private Sub CommandButton1_Click()
    Dim dic, s As String, i As Long, j As Long, n As Long, k As Long
    Open ThisWorkbook.Path & "\Dictionary.txt" For Input As #1
          dic = Split(Input(LOF(1), #1), vbCrLf)
    Close #1
    n = Val(TextBox1.Text): s = Trim$(TextBox2.Text)
    ThisWorkbook.Sheets(1).Columns("B:B").ClearContents
    For i = 0 To UBound(dic)
       If Len(dic(i)) = n Then
         For j = 1 To Len(dic(i))
            If InStr(1, s, Mid(dic(i), j, 1)) = 0 Then GoTo m
         Next j
         k = k + 1
         Cells(k, 2) = dic(i)
m:     End If
    Next i
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5
Похожие ответы