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

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

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

суть такова, на форме имеется два текст бокса и кнопка, в первый текст бокс вводится набор букв, во второй цифра, которая будет означать количество букв в слове, далее набор букв из первого текст бокса разбивается на отдельные символы и заполняется в массив, после чего из них генерируются слова, так вот этот код работает быстро к примеру на 3-4 символа (как в моем коде, скинутом для примера), вчера поставил генерацию из 12 символов, по 5 букв в слове так он залип на минут 15, мой вопрос таков: можно ли ускорить работу моего кода, или оптимизировать как то, или даже заменить что то, так как я может вообще использую "деревянный метод" так как программированием давно не занимался, и второй под вопрос, можно ли отсеивать не существующие слова сразу, Application.CheckSpelling - пропускает много не нужных слов. пример моего кода на генерацию 3 слова из трех букв:
Листинг программы
  1. Dim razmer, schet As Integer
  2. schet = 1
  3. kolbukv = CInt(Text1.Text)
  4. str = Text2.Text
  5. razmer2 = Len(str)
  6. ReDim sim(razmer2)
  7. For i = 1 To Len(Text2)
  8. sim(i) = Mid$(Text2, i, 1)
  9. Next i
  10. If kolbukv = 3 Then
  11. razmer = UBound(sim())
  12. For i1 = 1 To razmer
  13. For i2 = 1 To razmer
  14. For i3 = 1 To razmer
  15. slovo = sim(i1) & sim(i2) & sim(i3)
  16. If Application.CheckSpelling(slovo) Then
  17. Cells(schet, 1) = slovo
  18. schet = schet + 1
  19. End If
  20. Next i3
  21. Next i2
  22. Next i1
может я плохо объяснил суть вопроса, в общем это генератор слов из заданных букв, буквы вводятся в первый текст бокс, а во второй вводится цифра, означающая количество букв в слове, после чего буквы из первого текст бокса заполняются в массив отдельными символами, а дальше с помощью вложенных циклов эти отдельные элементы массива присоединяются друг к другу во всех возможных комбинациях, и выводятся в ячейку таблицы Excel, я скинул фрагмент кода в котором генерация слова идет из трех букв, можно ли реализовать эту задачу другим способом, так как мой способ затрачивает много времени.

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

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

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


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

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

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы