[VBA] "Wstrzymanie" pętli na czas edycji


(Bik128) #1

Witam.

Mam taki problem:

If Len(zmienna) = 10 Then

          'jakiś kod(nieważne)

    Else

        If MsgBox("String nie ma wymaganej długości. Czy chcesz go teraz edytować?", vbYesNo, "Błąd długości tekstu") = vbYes Then

          'tu wstrzymanie kodu na czas dokonania zmian

            Exit Sub

        End If

    End if

W powyższym kodzie chcę zatrzymać wykonanie pętli by móc wprowadzić ręcznie poprawki w komórce excela, a potem kliknąć jakiś przycisk np F1,F2...

aby dalej program/pętla się wykonywała.

Czy jest to możliwe do zrealizowania?


(floyd) #2

Np. tak:

Przykład

zmienna = ActiveCell.Cells(1, 1)

 If Len(zmienna) = 10 Then

          'jakiś kod(nieważne)

    Else

ponow:

        If MsgBox("String nie ma wymaganej długości. Czy chcesz go teraz edytować?", vbYesNo, "Błąd długości tekstu") = vbYes Then

         zmienna = InputBox("podaj nową wartość stringa", , zmienna)

         If Len(zmienna) <> 10 Then GoTo ponow

    ActiveCell.Cells(1, 1) = zmienna

            Exit Sub 

        End If

    End If

(Drobok) #3

Nie lepiej sprawdzać, czy user zmienił zmienne zamiast czekać na klawisz ?


(Bik128) #4

Jeśli user zmieni 1 znak to program może uznać że już poprawił, a mogło by się zdarzyć że jednak nie :slight_smile:

Rozwiązanie floyd-a jak najbardziej ok ale mi chodziło bardziej o możliwość tak jak opisałem "zawieszenia" wykonywania pętli...


(Drobok) #5

Nie monitorowałbyś zmianę w komórce. Wtedy po zakończeniu edycji by się program kontynuował.


(Tomek Matz) #6

Zawieszenie wykonania pętli (jak to określiłeś) to zły pomysł. Lepiej użyć w tym wypadku zdarzeń. Poniżej przykład od wujka google

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Range("A1"), Target) Is Nothing Then

        MsgBox "A1 has changed"

    End If

End Sub

W zdarzeniu tym dla wybranej komórki sprawdzałbyś, czy jej wartość jest prawidłowa. Jeśli wartość nie jest prawidłowa, to wychodzisz z procedury informując przed tym użytkownika, że powinien wprowadzić poprawki. Użytkownik poprawia wartość (jeśli ma na to ochotę :wink:) i ponownie następuje wykonanie tej procedury obsługującej zdarzenie Change. Jeśli wartość ponownie nie będzie prawidłowa to użytkownik zostanie ponownie poproszony o wprowadzenie poprawki, jeśli jednak będzie prawidłowa, to zostanie wykonany dalszy kod.