vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest sobota, 18 maja 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Przecinek i kropka w VBA


otwartyotwarty rozpoczął: baq postów: 6



napisał: Trebor
postów: 1209


umieszczony:
19 marca 2008
20:18

  
Trochę namieszam, ale może ktoś wpadnie do wątku i uprości kod
Private Sub TextBox1_Change()
Dim i As Integer, a As String
'oczyść ciąg
TextBox1.Text = WorksheetFunction.Clean(TextBox1.Text)
'usuń znaki spoza ciągu "1234567890,"
For i = Len(TextBox1.Text) To 1 Step -1
If InStr(1, "1234567890,", Mid(TextBox1.Text, i, 1)) = 0 Then
TextBox1.Text = Left(TextBox1.Text, i - 1) & Right(TextBox1.Text, Len(TextBox1.Text) - i)
End If
Next i
'usuń przecinek(ki) jeśli więcej niż jeden
For i = 1 To Len(TextBox1.Text) - Len(Replace(TextBox1.Text, ",", "")) - 1
    If Mid(TextBox1.Text, TextBox1.SelStart, 1) = "," Then
        a = TextBox1.Text
            Mid(a, TextBox1.SelStart, 1) = " "
                TextBox1.Text = a
                    i = i + 1
                        End If

If Len(TextBox1.Text) - Len(Replace(TextBox1.Text, ",", "")) > 1 Then TextBox1.Text = Replace(TextBox1.Text, ",", "", 1, 1)
Next i
'usuń znak(i) jeśli jest ich więcej niż dwa po przecinku
If InStr(1, TextBox1.Text, ",") > 0 Then TextBox1.Text = Left(TextBox1.Text, InStr(1, TextBox1.Text, ",") + 2)
End Sub



Co do drugiego to też podobnie:
Dim zmienna, i As Integer, zmienna2 As String
zmienna = Range("A1") 'pobranie stringu
For i = 1 To 3
If i <> 3 Then zmienna2 = zmienna2 & Mid(zmienna, 1, InStr(1, zmienna, ","))
zmienna = Mid(zmienna, InStr(1, zmienna, ",") + 1, 1000)
Next
zmienna2 = zmienna2 & zmienna
MsgBox zmienna2



Pozdrawiam
napisał: Józef B
postów: 6


umieszczony:
18 marca 2008
08:57

  
Dzięki, kod działa.
Jedna tylko rzecz: przy kasowaniu przecinków dzieje się tak ze chronologicznie pierwszy zostaje skasowany. Chciałbym żeby to nowy znak został usunięty..

Gdzie znajdę jakiś artykuł o operacjach na stringach? Chętnie sam bym pokombinował bo mam wiecej prolemów...
Mam plik .csv a takij postaci
Type,"FirstName","LastName","Mobile","Home","Office","Fax","Other","Email","URL","Note"
-1,"POCZTA","","","*501","","","","","",""
...

nagłówek i po kolei adresy.. problem w tym że wszystkie telefony zamieniły sie z Mobile na Home...
Jak wyedytować string z -1,"POCZTA","","","*501","","","","","","" na -1,"POCZTA","","*501","","","","","","","" dla każdego wiersza (prawie 1000). Zamiana nagłówka nie działa.
napisał: Trebor
postów: 1209


umieszczony:
15 marca 2008
12:47

  
Moim zdanie najlepiej nie pozwolić użtkownikowi na dowolność wpisywania. Jeśli chcemy, aby można było wpisywać tylko liczby z przecinkiem, spróbujmy tak napisać kod, aby nie pozwolił na nic innego.

Większość takich kodów wykorzystuje przyciśnięcia klawiszy do analizy czy znak jest właściwy.

Postanowiłem wykorzystać zdarzenie zmiany dla textboxa. Zawartość textboxa jest analizowana każdorazowo jako cały ciąg, a nie tylko wprowadzany znak. Taki mój kaprys.
Private Sub TextBox1_Change()
Dim i As Integer
'oczyść ciąg
TextBox1.Text = WorksheetFunction.Clean(TextBox1.Text)
'usuń znaki spoza ciągu "1234567890,"
For i = Len(TextBox1.Text) To 1 Step -1
If InStr(1, "1234567890,", Mid(TextBox1.Text, i, 1)) = 0 Then
TextBox1.Text = Left(TextBox1.Text, i - 1) & Right(TextBox1.Text, Len(TextBox1.Text) - i)
End If
Next i
'usuń przecinek(ki) jeśli więcej niż jeden
For i = 1 To Len(TextBox1.Text) - Len(Replace(TextBox1.Text, ",", "")) - 1
If Len(TextBox1.Text) - Len(Replace(TextBox1.Text, ",", "")) > 1 Then TextBox1.Text = Replace(TextBox1.Text, ",", "", 1, 1)
Next i
'usuń znak(i) jeśli jest ich więcej niż dwa po przecinku
If InStr(1, TextBox1.Text, ",") > 0 Then TextBox1.Text = Left(TextBox1.Text, InStr(1, TextBox1.Text, ",") + 2)
End Sub



Pozdrawiam
napisał: Józef B
postów: 6


umieszczony:
11 marca 2008
12:17

  
A co zrobić jeśli nie wiem jaką wartość wprowadź użytkownik?
W formularzu może wpisać i kropke i przecinek a ja chce żeby to była zawsze liczba



Range("A1").Value = CDbl(TextBox1.Text)


powyższy kod wywala błąd jeśli ktoś poprawnie wpisze liczbę..

Gdzie znajdę instrukcje jak rozpoznawać czy jest to tekst czy liczba i zamieniać w tę i we wtę?
Jak napisać ograniczenie do dwóch miejsc po przecinku lub kropce (działające podczas wpisywania w textbox)?
napisał: baq
postów: 6


umieszczony:
5 kwietnia 2007
12:31

  
Mam problem z przecinkiem i kropką w TextBox w Userform. Przykładowo kod działa następująco po wyświetleniu userform w textbox odczytywana jest liczba np. 1,35 z komórki A1. Ta liczba wyświetla się jako 1.35 (z kropką). A tak nie chce, więć daje Replace i mam przecinek. Następnie sugerowaną przez TextBox liczbę zmieniam na np. 1,56 (z przecinkiem). Ukrywam Userform i jednocześnie przekazuje wartość z TextBox do komórki A1 i otrzymuje liczbę w komórce jako tekst a nie jako liczbę, więć znowu muszę użyć Replace by zamienić 1,56 na 1.56 które w arkuszu jest oczytywane jako 1,56.
Proszę napiszcie możę jest jakiś krótszy sposób, może trzeba coś przestawić we właściwościach.

Laik Baq


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z