Excel makró cancel

Excel makró cancel
2017-06-15T15:47:03+02:00
2017-06-16T09:01:36+02:00
2022-12-04T15:15:53+01:00
Miki73
Sziasztok! 
Lehet volt már ilyen kérdés, de nem találtam.
inpudboxban bekérek egy számot amit egy e változóba raknék be. Ez megy is. De ha a Cancel-re kattintok akkor nem áll le, hanem run-time error '13'  type mismach error van. Már próbáltam minden ami eszembe jutott, de a jót még nem. 
Dim f, e As Long
Dim k As String
f = Range("M1")
e = InputBox("Add meg az évszámot amikor az ... készült ", "Kérés")
If e = vbNull Then
MsgBox ("Felhasználó által leállítva!")
Exit Sub
Else
End If
k = InputBox("Add meg a kiterjesztés ", "xls vagy xlsx")
If k = vbNullLong Then
MsgBox ("User canceled!")
Exit Sub
Else
End If
A második inputboxnál működik az elsőnél error van. 
Mi a gond?
Köszönöm
Mutasd a teljes hozzászólást!
Újra mondom: stringbe olvasd be és alakítsd számmá:

Dim s As String, e As Long s = InputBox(...) If s="" Then MsgBox "Cancel" : Exit Sub If Not IsNumeric(s) Then MsgBox "Nem szám!": Exit Sub e = Val(s) If e<2000 Or e>2099 Then MsgBox "Nem jó!": Exit Sub
Mutasd a teljes hozzászólást!

  • If e = 0 Then ... Exit Sub If k = "" Then ... Exit Sub
    A szabály az, hogy az InputBox üres stringet (!) ad vissza Cancel-re. Jobb lenne mindig stringbe olvasni, és ellenőrizni a konverziót! Mi lesz, ha "tavaly"-t ad meg valaki évszám helyett? Vagy érvénytelen számot pl. -1 ?
    Mutasd a teljes hozzászólást!
  • Kipróbáltam amit írtál, de ugyan az a jelenség, nem változott semmi. Az e-nél a cancel-re ugyan azt a hibát írja a k-nál pedig így is működik ahogy írtad.
    Mutasd a teljes hozzászólást!
  • Újra mondom: stringbe olvasd be és alakítsd számmá:

    Dim s As String, e As Long s = InputBox(...) If s="" Then MsgBox "Cancel" : Exit Sub If Not IsNumeric(s) Then MsgBox "Nem szám!": Exit Sub e = Val(s) If e<2000 Or e>2099 Then MsgBox "Nem jó!": Exit Sub
    Mutasd a teljes hozzászólást!
  • Szia!

    Az Inputbox függvény helyett használd az Application.Inputbox metódust, ami lehetőséget biztosít a bevitel típusának az ellenőrzésére is. (Sőt, pozicionálhatod a megjelenés helyét is.)
    Pl.

    b = Application.InputBox(prompt:="Írj be egy számot", Type:=1)
    Ilyenkor b változód Variantnak kell definiálni, mivel Cancel esetén logikai Hamis értéket ad vissza a metódus.
    Bővebben ezen a helyen olvashatsz róla.

    Üdv.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd