[VBA] Co dziesiąta liczba

Mycha1309
Użytkownik
Użytkownik
Posty: 114
Rejestracja: 24 paź 2014, o 12:36
Płeć: Kobieta
Lokalizacja: Wrocław
Podziękował: 7 razy

[VBA] Co dziesiąta liczba

Post autor: Mycha1309 »

Witam,

na wstępie zaznaczę, że zaczynam dopiero swoją przygodę z VBA.
Chcę napisać program, który za pomocą inputboxa będzie pytał użytkownika ile chce wygenerować dokumentów a następnie będzie wyświetlał informacje np. wygenerowano 1 dokument, 2 dokumenty itd.

Mam problem ze słowem "dokument" nie wydaje się trudne napisać, że jeżeli 1 to dokument, jeżeli 2,3,4 to dokumenty a w przeciwnym razie dokumentów, ale co z liczbami takimi jak 52,53,54,62,64.... tu pojawia się znów słowo 52 dokumenty, czy da się jakoś to w sposób iteracyjny zapisać?
Ostatnio zmieniony 31 paź 2016, o 08:36 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
a4karo
Użytkownik
Użytkownik
Posty: 22207
Rejestracja: 15 maja 2011, o 20:55
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 38 razy
Pomógł: 3754 razy

VBA - co dziesiąta liczba

Post autor: a4karo »

Musisz po prostu napisać trochę begin case... end case
Ale najpierw sprawdź kiedy używasz której formy rzeczownika
Mycha1309
Użytkownik
Użytkownik
Posty: 114
Rejestracja: 24 paź 2014, o 12:36
Płeć: Kobieta
Lokalizacja: Wrocław
Podziękował: 7 razy

[VBA] Co dziesiąta liczba

Post autor: Mycha1309 »

Co dokładnie muszę zrobić z tym begin case... end case? Czytam o tym w Internecie, ale nie bardzo wiem jak to zastosować, tak jak pisałam, dopiero w październiku zaczęłam vba proszę nie wymagać zbyt wiele na początku...
a4karo
Użytkownik
Użytkownik
Posty: 22207
Rejestracja: 15 maja 2011, o 20:55
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 38 razy
Pomógł: 3754 razy

[VBA] Co dziesiąta liczba

Post autor: a4karo »

Sorry, ale nie nauczę Cię jak stosowac instrukcje warunkowe. To jest jedna z podstaw programowania i sama musisz to opanować

Zacznij może od czegoś prostszego, przykłądy znajdziesz w podręczniku lub w pomocy on-line
Mycha1309
Użytkownik
Użytkownik
Posty: 114
Rejestracja: 24 paź 2014, o 12:36
Płeć: Kobieta
Lokalizacja: Wrocław
Podziękował: 7 razy

[VBA] Co dziesiąta liczba

Post autor: Mycha1309 »

Wiem jak stosować instrukcje warunkowe. Nie wiem tylko jak zrobić, żeby stosowało się to co np 10 razy
bo jak robię case 52 to 54..... potem case 62 to 64.... to mija się z celem, dlatego pytam jak można to zrobić, żeby robiło się to sekwencyjnie.
a4karo
Użytkownik
Użytkownik
Posty: 22207
Rejestracja: 15 maja 2011, o 20:55
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 38 razy
Pomógł: 3754 razy

[VBA] Co dziesiąta liczba

Post autor: a4karo »

Sprawdzaj ostatnia cyfrę. Zakres 1-20 zrób osobno,
Mycha1309
Użytkownik
Użytkownik
Posty: 114
Rejestracja: 24 paź 2014, o 12:36
Płeć: Kobieta
Lokalizacja: Wrocław
Podziękował: 7 razy

[VBA] Co dziesiąta liczba

Post autor: Mycha1309 »

Kod: Zaznacz cały

Sub Generowanie_dokumentow()

 

liczba = InputBox("Ile chcesz wygenerować dokumentów?", " Dokumenty ")

For liczba = 1 To 20
    If liczba = 1 Then
        MsgBox " Wygenerowano " & liczba & " dokument ", vbQuestion
    ElseIf liczba = 2 Or 3 Or 4 Then
        MsgBox " Wygenerowano " & liczba & " dokumenty ", vbQuestion
    Else
        MsgBox " Wygenerowano " & liczba & " dokumentów ", vbQuestion
    End If
Next liczba

For liczba = 21 To n
    If Left(liczba, 1) = 2 Or 3 Or 4 Then
        MsgBox " Wygenerowano " & liczba & " dokumenty ", vbQuestion
    Else
        MsgBox " Wygenerowano " & liczba & " dokumentów ", vbQuestion
    End If
Next liczba
        
End Sub

Co tutaj robię źle? Jak wpisuje nieważne jaką liczbę i tak robi się dla 1, 2,3, aż do 20
Ostatnio zmieniony 31 paź 2016, o 20:02 przez Afish, łącznie zmieniany 1 raz.
Powód: Stosuj tagi code.
a4karo
Użytkownik
Użytkownik
Posty: 22207
Rejestracja: 15 maja 2011, o 20:55
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 38 razy
Pomógł: 3754 razy

[VBA] Co dziesiąta liczba

Post autor: a4karo »

Zastanów się po co ci pętle for
Mycha1309
Użytkownik
Użytkownik
Posty: 114
Rejestracja: 24 paź 2014, o 12:36
Płeć: Kobieta
Lokalizacja: Wrocław
Podziękował: 7 razy

[VBA] Co dziesiąta liczba

Post autor: Mycha1309 »

No dobrze zmieniłam, ale dalej coś nie działa

Kod: Zaznacz cały

Sub Generowanie_dokumentow()

Dim liczba
liczba = 0
liczba = InputBox("Ile chcesz wygenerować dokumentów?", " Dokumenty ")

Select Case liczba
    Case liczba = 1:
        MsgBox " Wygenerowano " & liczba & " dokument ", vbQuestion
    Case liczba = 2 Or 3 Or 4:
        MsgBox " Wygenerowano " & liczba & " dokumenty ", vbQuestion
    Case liczba = 0 Or 5 Or 6 Or 7 Or 8 Or 9 Or 10 Or 11 Or 12 Or 13 Or 14 Or 15 Or 16 Or 17 Or 18 Or 19 Or 20:
        MsgBox " Wygenerowano " & liczba & " dokumentów ", vbQuestion
    Case Left(liczba, 1) = 2 Or 3 Or 4:
        MsgBox " Wygenerowano " & liczba & " dokumenty ", vbQuestion
    Case Else:
        MsgBox " Wygenerowano " & liczba & " dokumentów ", vbQuestion
    End Select
        
End Sub
a4karo
Użytkownik
Użytkownik
Posty: 22207
Rejestracja: 15 maja 2011, o 20:55
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 38 razy
Pomógł: 3754 razy

[VBA] Co dziesiąta liczba

Post autor: a4karo »

Kod: Zaznacz cały

Sub Generowanie_dokumentow()

Dim liczba
liczba = 0
liczba = InputBox("Ile chcesz wygenerować dokumentów?", " Dokumenty ")

Select Case liczba
    Case liczba = 1:
        Debug.Print 1
        MsgBox " Wygenerowano " & liczba & " dokument ", vbQuestion
    Case liczba = 2 Or 3 Or 4:
        Debug.Print "2,3,4"
        MsgBox " Wygenerowano " & liczba & " dokumenty ", vbQuestion
    Case liczba = 0 Or 5 Or 6 Or 7 Or 8 Or 9 Or 10 Or 11 Or 12 Or 13 Or 14 Or 15 Or 16 Or 17 Or 18 Or 19 Or 20:
        Debug.Print "0,5-20"
        MsgBox " Wygenerowano " & liczba & " dokumentów ", vbQuestion
    Case Left(liczba, 1) = 2 Or 3 Or 4:
        Debug.Print "konczy sie na 2,3,4"
        MsgBox " Wygenerowano " & liczba & " dokumenty ", vbQuestion
    Case Else:
        Debug.Print "Cos innego"
        MsgBox " Wygenerowano " & liczba & " dokumentów ", vbQuestion
    End Select
        
End Sub
Przyjrzyj się syntaksowi komendy Begin Case
Mycha1309
Użytkownik
Użytkownik
Posty: 114
Rejestracja: 24 paź 2014, o 12:36
Płeć: Kobieta
Lokalizacja: Wrocław
Podziękował: 7 razy

[VBA] Co dziesiąta liczba

Post autor: Mycha1309 »

Nie działa jeszcze przy jednej linijce kodu, nie mogę nigdzie znaleźć jaka jest składnia case jeżeli nie zaczynam od liczby a od Left.

Kod: Zaznacz cały

Sub Generowanie_dokumentow()

Dim liczba
liczba = InputBox("Ile chcesz wygenerować dokumentów?", " Dokumenty ")

    Select Case liczba

        Case 1
            MsgBox " Wygenerowano " & liczba & " dokument ", vbQuestion
        Case 2, 3, 4
            MsgBox " Wygenerowano " & liczba & " dokumenty ", vbQuestion
        Case 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
            MsgBox " Wygenerowano " & liczba & " dokumentów ", vbQuestion
        Case Left(liczba, 1) = 2 Or 3 Or 4
            MsgBox " Wygenerowano " & liczba & " dokumenty ", vbQuestion
        Case Else
            MsgBox " Wygenerowano " & liczba & " dokumentów ", vbQuestion
        
    End Select
       
End Sub

OShon
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 4 mar 2014, o 00:32
Płeć: Mężczyzna
Lokalizacja: VBATools | Kraków | Poland | Europe | Earth | SolSystem | SomewareInSpace
Podziękował: 1 raz
Pomógł: 7 razy

[VBA] Co dziesiąta liczba

Post autor: OShon »

No to ja proponuje małą zmianę i zarazem naukę:

Kod: Zaznacz cały

Sub Generowanie_dokumentow()
Dim liczba As Variant
liczba = Application.InputBox("Ile chcesz wygenerować dokumentów?", " Dokumenty ", Type:=1)
If IsNumeric(liczba) Then _
MsgBox " Wygenerowano " & ile(CInt(liczba)), vbInformation, "Potwierdznie wydruku"
End Sub

Function ile(ByRef liczba%) As String
Select Case liczba
    Case 1: ile = liczba & " dokument "
    Case 2 To 4: ile = liczba & " dokumenty "
    Case Is > 21
    Select Case CInt(Right(liczba, 1))
        Case 2 To 4: ile = liczba & " dokumenty "
        Case Else: ile = liczba & " dokumentów "
    End Select
    Case 0, Is > 4
        ile = liczba & " dokumentów "
End Select
End Function

Sub test()
Dim x%
For x = 0 To 54
    Debug.Print ile(x) 'Ctrl+G
Next
End Sub
ODPOWIEDZ