Strona 1 z 1

[VBA] Co dziesiąta liczba

: 31 paź 2016, o 08:17
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ć?

VBA - co dziesiąta liczba

: 31 paź 2016, o 08:37
autor: a4karo
Musisz po prostu napisać trochę begin case... end case
Ale najpierw sprawdź kiedy używasz której formy rzeczownika

[VBA] Co dziesiąta liczba

: 31 paź 2016, o 08:49
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...

[VBA] Co dziesiąta liczba

: 31 paź 2016, o 09:30
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

[VBA] Co dziesiąta liczba

: 31 paź 2016, o 09:43
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.

[VBA] Co dziesiąta liczba

: 31 paź 2016, o 09:54
autor: a4karo
Sprawdzaj ostatnia cyfrę. Zakres 1-20 zrób osobno,

[VBA] Co dziesiąta liczba

: 31 paź 2016, o 10:19
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

[VBA] Co dziesiąta liczba

: 31 paź 2016, o 14:43
autor: a4karo
Zastanów się po co ci pętle for

[VBA] Co dziesiąta liczba

: 1 lis 2016, o 20:02
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

[VBA] Co dziesiąta liczba

: 1 lis 2016, o 21:32
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

[VBA] Co dziesiąta liczba

: 2 lis 2016, o 21:27
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


[VBA] Co dziesiąta liczba

: 2 lis 2016, o 22:30
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