InputBox Vyřešeno

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

InputBox

Příspěvekod VALL » 27 dub 2012 10:06

Ahoj,
při vyvolání InputBoxu a kliknutí na CANCEL vyskočí chyba – spadne makro. Jak tuto chybu ošetřit, aby při kliknutí na cancel došlo k ukončení procedury?

Reklama
Azuzula
Level 3
Level 3
Příspěvky: 452
Registrován: leden 12
Bydliště: Země, bohužel...
Pohlaví: Žena
Stav:
Offline
Kontakt:

Re: InputBox

Příspěvekod Azuzula » 27 dub 2012 18:03

Tak teď budu jen hádat, ale např:

dotaz = inputbox("zapiš něco")
If dotaz = "" then exit sub 'pokud očekáváš text
(nebo If dotaz = 0 then exit sub 'pokud očekáváš číslo)

Ale spíš by to sem chtělo napsat alespoň to makro s inputboxem aby se z toho dalo vyčíst co tam dělá potíž.
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.

cmuch
Level 4.5
Level 4.5
Příspěvky: 1547
Registrován: březen 11
Bydliště: Drsná Vysočina :D
Pohlaví: Muž
Stav:
Offline

Re: InputBox

Příspěvekod cmuch » 27 dub 2012 20:44

Ono by uplně stačilo

Kód: Vybrat vše

If dotaz = False Then Exit Sub

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: InputBox

Příspěvekod VALL » 30 dub 2012 08:35

Díky za radu, vše jsem zkusil, ale nefunguje. Nevím, zda podmínky nevkládám špatně.
Zasílám část kódu.

Kód: Vybrat vše

Sub NajdiBunku2()
'
' Najde řádek dle kritérií a vloží hodnotu pro praac Na a Lis
'-----------------------------------------
Dim d As Date
Dim p As Integer
Dim f As Byte

 d = Year(Now)
 p = WorksheetFunction.CountIf(Range("a9:a100000"), Range("q2"))     'spoč počet projektů
 faze = Range("v3")
 f = InputBox("Zadej číslo fáze, pro kterou chceš pustit vyrovnávací výpočet", "Fáze projektu", faze)  'na tomto řádku to háže chybu.
     'If f = 0 Then Exit Sub
     If f = False Then Exit Sub
   
'Najde dodnotu dle zadaných kritérií  a vloží číslo 1
'--------------------------------------------------------------

 Range("a14").Select
 
    Cells.Find(What:=Range("q2"), After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
       
 For i = 1 To p
 
  If ActiveCell = Range("q2") And ActiveCell.Offset(0, 1) = d And ActiveCell.Offset(0, 2) = f _
     And ActiveCell.Offset(0, 3) = Range("w4") Then
    ActiveCell.Offset(0, 15).Value = 1

  ElseIf ActiveCell = Range("q2") And ActiveCell.Offset(0, 1) = d And ActiveCell.Offset(0, 2) = f _
     And ActiveCell.Offset(0, 3) = Range("w5") Then
    ActiveCell.Offset(0, 15).Value = 1
   
  End If
 
 ActiveCell.Offset(1, 0).Select
 
 Next

Azuzula
Level 3
Level 3
Příspěvky: 452
Registrován: leden 12
Bydliště: Země, bohužel...
Pohlaví: Žena
Stav:
Offline
Kontakt:

Re: InputBox

Příspěvekod Azuzula » 30 dub 2012 10:42

Mě to funguje (excel 2010), ale do zapsání max. čísla 255, když tam zadáváte větší číslo pak to hodí chybu. Takže bych změnila deklaraci z Dim f as Byte na Dim f as Double.

A ještě jsem si všimla, že máte Dim d as Date, ale takhle se do proměnné "d" nevloží jen rok jak požadujete, ale celé datum (konkrétně 4.7.1905 odvozeno z excel formátu data), doporučovala bych použít Dim d as Double.
Jinou chybu tam už nevidím, tak snad to bude OK.
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: InputBox

Příspěvekod VALL » 30 dub 2012 11:06

Dim f as byte - používám čísla do 10.

Funguje vám to, i když kliknete na Cancel? Teprve teď si všímám, že jsem neuvedl, kdy to háže chybu - při kliknutí na Cancel.

Date jsem opravil, díky.

Azuzula
Level 3
Level 3
Příspěvky: 452
Registrován: leden 12
Bydliště: Země, bohužel...
Pohlaví: Žena
Stav:
Offline
Kontakt:

Re: InputBox  Vyřešeno

Příspěvekod Azuzula » 30 dub 2012 11:26

Aha, tak tedy. Po chvíli testování, nevím proč to nebere Dim f as Byte nebo Double, ale jako String to funguje i když dám cancel. Na řádek s podmínkou pro inputbox potom dejte podmínku If f = "" Then Exit Sub
Makro si potom s číslem taky poradí ;-)
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: InputBox

Příspěvekod VALL » 02 kvě 2012 10:38

Zkoušel jsem podmínku vložit pro podmínku InputBoxu, ale stále nefunguje :(. asi to vkládám do špatného místa, ale vyzkoušel jsem snad všechny varianty.

Azuzula
Level 3
Level 3
Příspěvky: 452
Registrován: leden 12
Bydliště: Země, bohužel...
Pohlaví: Žena
Stav:
Offline
Kontakt:

Re: InputBox

Příspěvekod Azuzula » 02 kvě 2012 12:20

Ani tohle nefunguje?

Kód: Vybrat vše

f = InputBox("Zadej číslo fáze, pro kterou chceš pustit vyrovnávací výpočet", "Fáze projektu", faze)
     If f = "" Then Exit Sub
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: InputBox

Příspěvekod VALL » 02 kvě 2012 13:08

Přesně takhle jsem to měl taky napsané, a hodilo to error. zkoušel jsem to vložit do podpodmínek. viz níže a vždy chyba.

Kód: Vybrat vše

  Range("a14").Select
 
    Cells.Find(What:=Range("q2"), After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
       
 For i = 1 To p
 
 If f = "" Then
   Exit Sub
 End If

  If ActiveCell = Range("q2") And ActiveCell.Offset(0, 1) = d And ActiveCell.Offset(0, 2) = f _
     And ActiveCell.Offset(0, 3) = Range("w4") Then
    ActiveCell.Offset(0, 15).Value = 1

  ElseIf ActiveCell = Range("q2") And ActiveCell.Offset(0, 1) = d And ActiveCell.Offset(0, 2) = f _
     And ActiveCell.Offset(0, 3) = Range("w5") Then
    ActiveCell.Offset(0, 15).Value = 1
 
  End If
 
 ActiveCell.Offset(1, 0).Select
 
 Next

Azuzula
Level 3
Level 3
Příspěvky: 452
Registrován: leden 12
Bydliště: Země, bohužel...
Pohlaví: Žena
Stav:
Offline
Kontakt:

Re: InputBox

Příspěvekod Azuzula » 02 kvě 2012 14:03

Tak teď jsem zmatená, ale v tom kódu teď chybí celý řádek s inputboxem. A nezapoměl jste definovat Dim f as String?
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.

VALL
Level 1
Level 1
Příspěvky: 95
Registrován: únor 12
Pohlaví: Nespecifikováno
Stav:
Offline

Re: InputBox

Příspěvekod VALL » 02 kvě 2012 14:44

Omlouvám se, chtěl jsem zaslat jen část kódu, aby to nebylo zbytečně dlouhé. Špatná úvaha :oops:

takže celý kód:

Kód: Vybrat vše

Sub NajdiBunku2()
'
' Najde řádek dle kritérií a vloží hodnotu pro praac Na a Lis
'-----------------------------------------
Dim d As Double
Dim p As Integer
Dim f As Byte

 d = Year(Now)
 p = WorksheetFunction.CountIf(Range("a9:a100000"), Range("q2"))  'spoč počet projektů
 faze = Range("v3")
 f = InputBox("Zadej číslo fáze, pro kterou chceš pustit vyrovnávací výpočet", "Fáze projektu", faze)


 Application.ScreenUpdating = False
 Columns("A:c").Select
 Selection.EntireColumn.Hidden = False
   
'Najde dodnotu dle zadaných kritérií  a vloží číslo 1 - zdůvodu správného výpočtu hodnot pro vložení
'--------------------------------------------------------------

  Range("a14").Select
 
    Cells.Find(What:=Range("q2"), After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
       
 For i = 1 To p
 
 If f = "" Then
   Exit Sub
 End If

  If ActiveCell = Range("q2") And ActiveCell.Offset(0, 1) = d And ActiveCell.Offset(0, 2) = f _
     And ActiveCell.Offset(0, 3) = Range("w4") Then
    ActiveCell.Offset(0, 15).Value = 1

  ElseIf ActiveCell = Range("q2") And ActiveCell.Offset(0, 1) = d And ActiveCell.Offset(0, 2) = f _
     And ActiveCell.Offset(0, 3) = Range("w5") Then
    ActiveCell.Offset(0, 15).Value = 1

  End If
 
 ActiveCell.Offset(1, 0).Select
 
 Next


--- Doplnění předchozího příspěvku (02 Kvě 2012 14:57) ---

Beru zpět, teď jsem deklaroval f as string a je to ok.

díky za radu.


Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti