Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

[Excel] Format wprowadzanych danych do TextBox'a

Idź do strony 1, 2  Następny

 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Oprogramowanie biurowe
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
sakee5



Dołączył: 27 Mar 2019
Posty: 5

PostWysłany: Sro Mar 27, 2019 11:28 am  OP    Temat postu: [Excel] Format wprowadzanych danych do TextBox'a Odpowiedz z cytatem Pisownia

Hej,

Stoję przed problemem jakim jest oprogramowanie TextBox'a aby pozwalał na wprowadzenie wartości typu 0000/00 a innych nie akceptował. Dane mają być traktowane jako tekst oczywiście. Pierwsze 4 zera mają być traktowane jako liczby i litery, a znaki po operatorze to liczby np 01Z1/15

Czy można też zrobić taki myk, że podczas wprowadzania danych przez użytkownika vba samo wstawi "/" po 4 pierwszych znakach?

Proszę o pomoc. Niestety nie znalazłem rozwiązania mojego problemu na forum.

Pozdrawiam
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
losmac



Dołączył: 25 Maj 2005
Posty: 1565
Skąd: Białystok

PostWysłany: Sro Mar 27, 2019 11:28 pm      Temat postu: Odpowiedz z cytatem Pisownia

To nie jest właściwe rozwiązanie lecz pewna idea, pomysł do poprawki, ulepszenia.

Kod:

Option Explicit

Sub Test()

    Dim sInput As Variant
    Dim i As Integer
    Dim s As String
    Dim retVal As String
    
    'przykładowe ciągi wejściowe
    sInput = Array("01234/12", "A2B4/c3", "X;2-/.0", "p32;/5l")
    
    'sprawdzenie w pętli każdego z nich
    For i = LBound(sInput) To UBound(sInput)
        s = sInput(i)
        retVal = GetValidData(s)
        MsgBox s & vbCr & _
            retVal, vbInformation, "Informacja"
    Next

End Sub

'wymaga referencji do MS VisualScript Regular Expressions 5.0
Function GetValidData(sData As String) As String

    Dim oRegex As VBScript_RegExp_55.RegExp
    Dim sPattern As String, sRetVal As String
    Dim bMatch As Boolean
    
    sRetVal = "0000/00"
    sPattern = "([A-Za-z0-9]{4})/([A-Za-z0-9]{2})"
    
    Set oRegex = New VBScript_RegExp_55.RegExp
    With oRegex
        .Pattern = sPattern
        .MultiLine = False
        bMatch = .Test(sData)
    End With
    Set oRegex = Nothing
    
    'jeśli ciąg pasuje do szablonu, zwróć wejściowy string, w przeciwnym wypadku - domyślną wartość: "0000/00"
    GetValidData = IIf(bMatch, sData, sRetVal)
    
End Function



Uwaga!
Jeśli w ciągu mogą znajdować się tylko duże litery i cyfry wystarczy zmodyfikować zmienną sPattern w ten sposób:
Kod:
sPattern = "([A-Z0-9]{4})/([A-Z0-9]{2})"


Zmodyfikuj funkcję do swoich potrzeb!

Powodzenia!

_________________
książka o VBA dla Office'a
UWAGA! Nie odpowiadam na PW, jeżeli wcześniej nie zostało to ze mną ustalone w ramach konkretnego wątku!
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
sakee5



Dołączył: 27 Mar 2019
Posty: 5

PostWysłany: Czw Mar 28, 2019 10:43 am  OP    Temat postu: Odpowiedz z cytatem Pisownia

Super. dzięki za odpowiedź! :) zajmę się tym za chwilę.

Teraz mam inny problem. Jak sprawić aby VBA wykrywało pierwsza wolną komórkę w tabeli wstawionej poprzez Excela pomiędzy wierszem sumy a wierszem gdzie są jakieś dane.

Przykładowo: od A1 do A18 mam dane. od A19 do A25 sa puste komórki a w A26 jest wiersz sumy podliczający dane.

Jak wsadzić wartości do komórki A19 itd?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
losmac



Dołączył: 25 Maj 2005
Posty: 1565
Skąd: Białystok

PostWysłany: Pią Mar 29, 2019 6:41 am      Temat postu: Odpowiedz z cytatem Pisownia

Nie wiem, czy można "wsadzić" dane do komórek pomiędzy ostatnią niepustą a sumującą, bo może to naruszyć integralność dotychczasowych danych.

Weź pod uwagę, że to nie jest prosta sprawa... Możesz sprawdzić formułę i "przeskanować" komórki w poszukiwaniu tych pustych.

_________________
książka o VBA dla Office'a
UWAGA! Nie odpowiadam na PW, jeżeli wcześniej nie zostało to ze mną ustalone w ramach konkretnego wątku!
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
sakee5



Dołączył: 27 Mar 2019
Posty: 5

PostWysłany: Pią Mar 29, 2019 2:26 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Udało się wstawić dane do tabeli stworzonej w Excelu za pomocą takiego kodu:

Kod:

        Dim the_sheet As Worksheet
        Dim table_list_object As ListObject
        Dim table_object_row As ListRow
        
        Set the_sheet = Sheets("1.2")
        Set table_list_object = the_sheet.ListObjects("WDW_1_2")
        Set table_object_row = table_list_object.ListRows.Add
        
        table_object_row.Range(1, 3).Value = "jakieś dane"



Oczywiscie to tylko początek, ale kod działa. Stwierdziłem, że lepiej zmienić tabelę w Excelu tak aby makro mogło dodać nowy wiersz i tam dane, które wprowadzi użytownik w formularzu.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
karolinavb
Site Admin


Dołączył: 25 Maj 2005
Posty: 7913

PostWysłany: Pią Mar 29, 2019 8:35 pm      Temat postu: Odpowiedz z cytatem Pisownia

A jeśli chodzi o TextBox to skoro to ma być zawsze 4/2- znaki/liczby, czy nie prościej posłużyć się w tym przypadku 2 kontrolkami TextBox:
- kontrolka Textbox pozwalająca wpisać tylko 4 znaki: MaxLength Property
- kontrolka Textbox pozwalająca wpisać tylko 2 znaki: MaxLength Property + ograniczenie tylko cyfry
A miedzy nimi na Userform etykieta z ukośnikiem
I zestawić w kodzie wynik w tych kontrolek zamiast męczyć usera?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
losmac



Dołączył: 25 Maj 2005
Posty: 1565
Skąd: Białystok

PostWysłany: Pią Mar 29, 2019 10:06 pm      Temat postu: Odpowiedz z cytatem Pisownia

karolinavb napisał:
A jeśli chodzi o ..., czy nie prościej posłużyć się w tym przypadku 2 kontrolkami TextBox:
...
I zestawić w kodzie wynik w tych kontrolek zamiast męczyć usera?


I jak, Karolinko, odmówić Ci logiki?

Niemniej jednak, powiem tak: to zależy... :) Aczkolwiek i tak nie unikniesz sprawdzania poprawności wprowadzonych danych... Więc po co to robić 2 razy?

_________________
książka o VBA dla Office'a
UWAGA! Nie odpowiadam na PW, jeżeli wcześniej nie zostało to ze mną ustalone w ramach konkretnego wątku!
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
karolinavb
Site Admin


Dołączył: 25 Maj 2005
Posty: 7913

PostWysłany: Sob Mar 30, 2019 6:37 am      Temat postu: Odpowiedz z cytatem Pisownia

losmac napisał:
...
tak nie unikniesz sprawdzania poprawności wprowadzonych danych... Więc po co to robić 2 razy?
Tylko 1-den raz "ograniczenie tylko cyfry " dla 2-go TextBox (o ile pamiętam jest na forum)...
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
sakee5



Dołączył: 27 Mar 2019
Posty: 5

PostWysłany: Wto Kwi 16, 2019 12:11 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Dzięki Karolinavba za pomoc. Wszystko działa.

Teraz mam pytanie odnośnie czyszczenia formularza po kliknieciu przycisku wprowadz albo anuluj. Niestety vba w tym momencie zapamietuje dane.

Jest możliwość wyczyszczenia całego formularza w takich sytuacjach?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
karolinavb
Site Admin


Dołączył: 25 Maj 2005
Posty: 7913

PostWysłany: Sro Kwi 17, 2019 6:21 am      Temat postu: Odpowiedz z cytatem Pisownia

Cytat:
Niestety vba w tym momencie zapamietuje dane
Nie rozumiem, co masz na myśli?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Oprogramowanie biurowe Wszystkie czasy w strefie CET (Europa)
Idź do strony 1, 2  Następny
Strona 1 z 2

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.14400 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |