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
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
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.