Stránka 1 z 1

InputBox

Napsal: 27 dub 2012 10:06
od VALL
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?

Re: InputBox

Napsal: 27 dub 2012 18:03
od Azuzula
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íž.

Re: InputBox

Napsal: 27 dub 2012 20:44
od cmuch
Ono by uplně stačilo

Kód: Vybrat vše

If dotaz = False Then Exit Sub

Re: InputBox

Napsal: 30 dub 2012 08:35
od VALL
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

Re: InputBox

Napsal: 30 dub 2012 10:42
od Azuzula
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.

Re: InputBox

Napsal: 30 dub 2012 11:06
od VALL
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.

Re: InputBox  Vyřešeno

Napsal: 30 dub 2012 11:26
od Azuzula
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í ;-)

Re: InputBox

Napsal: 02 kvě 2012 10:38
od VALL
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.

Re: InputBox

Napsal: 02 kvě 2012 12:20
od Azuzula
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

Re: InputBox

Napsal: 02 kvě 2012 13:08
od VALL
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

Re: InputBox

Napsal: 02 kvě 2012 14:03
od Azuzula
Tak teď jsem zmatená, ale v tom kódu teď chybí celý řádek s inputboxem. A nezapoměl jste definovat Dim f as String?

Re: InputBox

Napsal: 02 kvě 2012 14:44
od VALL
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.