AMcoder - javascript, python, java, html, php, sql

Excel 2007 PC VBA Error 6 Overflow

Սխալ 6 ստանալը - Excel VBA-ով լցվել: Սովորաբար, դա պայմանավորված է մի ամբողջ թվով, որը պետք է երկար լիներ: Բայց սա... Ես պարզապես փորձում եմ երեք թվեր միասին բազմապատկել և արդյունքը դնել վանդակում: Չկա փոփոխական ներգրավված:

Սա այն տողն է, որի վրա սխալվում է. wsResults.Cells(4, 3): Արժեք = (60 * 60 * 24)

Ես փորձել եմ փակել Excel-ը և նորից բացել աշխատանքային գրքույկը, և փորձել եմ բանաձևը դնել անմիջապես բանաձևի տողում (այն ճիշտ է ցուցադրվել), բայց VBA կոդը դեռ չի աշխատի:

Որևէ մեկը որևէ գաղափար ունի: Շնորհակալություն

Option Explicit

'Worsheets:
Dim wbThis As ThisWorkbook
Dim wsResults As Worksheet

'Set Timekeeping Values:
Public Const GameTick As Single = (60 / 12) / 4
Public Const GameRound As Single = GameTick * 12
Public Const GameHour As Single = GameRound * 60
Public Const GameDay As Single = GameHour * 24
Public Const GameWeek As Single = GameDay * 7
Public Const GameMonth As Single = GameDay * 30
Public Const GameYear As Single = GameDay * 365

Public Sub TimeControl()

'Initialize Timer:
Randomize Timer

'Set Worksheets:
Set wbThis = ThisWorkbook
Set wsResults = wbThis.Sheets("Results")

'Clear wsResults:
wsResults.Range("A1:M1000").ClearContents

'Display Unit Names:
wsResults.Cells(1, 1).Value = "Tick"
wsResults.Cells(2, 1).Value = "Round"
wsResults.Cells(3, 1).Value = "Hour"
wsResults.Cells(4, 1).Value = "Day"
wsResults.Cells(5, 1).Value = "Week"
wsResults.Cells(6, 1).Value = "Month"
wsResults.Cells(7, 1).Value = "Year"

'Display Game Units:
wsResults.Cells(1, 2).Value = GameTick
wsResults.Cells(2, 2).Value = GameRound
wsResults.Cells(3, 2).Value = GameHour
wsResults.Cells(4, 2).Value = GameDay
wsResults.Cells(5, 2).Value = GameWeek
wsResults.Cells(6, 2).Value = GameMonth
wsResults.Cells(7, 2).Value = GameYear

'Display Real-World Units:
wsResults.Cells(1, 3).Value = ""
wsResults.Cells(2, 3).Value = 60
wsResults.Cells(3, 3).Value = (60 * 60)
wsResults.Cells(4, 3).Value = (60 * 60 * 24)
wsResults.Cells(5, 3).Value = (60 * 60 * 24 * 7)
wsResults.Cells(6, 3).Value = (60 * 60 * 24 * 30)
wsResults.Cells(7, 3).Value = (60 * 60 * 24 * 365)

End Sub
22.11.2016

Պատասխանները:


1

Հատկություններ

Արտահոսք է առաջանում, երբ փորձում եք հանձնարարություն կատարել, որը գերազանցում է հանձնարարության թիրախի սահմանափակումները: Այս սխալն ունի հետևյալ պատճառները և լուծումները.

  • The result of an assignment, calculation, or data type conversion is too large to be represented within the range of values allowed for that type of variable.

  • Assign the value to a variable of a type that can hold a larger range of values.

  • An assignment to a property exceeds the maximum value the property can accept.


    Համոզվեք, որ ձեր հանձնարարությունը համապատասխանում է այն գույքի տիրույթին, որին այն արվել է: Դուք փորձում եք թիվ օգտագործել հաշվարկում, և այդ թիվը պարտադրվում է ամբողջ թվով, բայց արդյունքն ավելի մեծ է, քան ամբողջ թիվը:

    Օրինակ.

    Dim x As Long
    x = 2000 * 365   ' Error: Overflow
    

    Այս իրավիճակը շտկելու համար մուտքագրեք համարը հետևյալ կերպ.

    Dim x As Long
    x = CLng(2000) * 365
    

    Ձեր դեպքում փորձեք օգտագործել սա

    wsResults.Cells(4, 3).Value = CLng(60 * 60) * 24
    wsResults.Cells(5, 3).Value = CLng(60 * 60) * 24 * 7
    wsResults.Cells(6, 3).Value = CLng(60 * 60) * 24 * 30
    ...
    

    Խմբագրել

    Ինչու է պահանջվում այս փոխարկումը:

    60, 60 և 24 բոլորը ամբողջ թվային արժեքներ են: VBA-ում ամբողջ թվերը 16-բիթանոց նշաններով տիպեր են, երբ դուք կատարում եք թվաբանություն 2 ամբողջ թվի վրա, թվաբանությունն իրականացվում է 16 բիթով: Քանի որ այս երկու թվերի բազմապատկման արդյունքը գերազանցում է այն արժեքը, որը կարելի է ներկայացնել 16 բիթով, դուք բացառություն եք ստանում:

    Երկրորդ օրինակը (փոխակերպումը CLng-ով) աշխատում է, քանի որ առաջին համարը սկզբում փոխակերպվում է 32-բիթանոց տիպի, իսկ թվաբանությունն այնուհետև իրականացվում է 32-բիթանոց թվերի միջոցով:

    Ձեր օրինակում թվաբանությունը կատարվում է 16-բիթանոց ամբողջ թվերով, և արդյունքն այնուհետև վերածվում է երկարի, բայց այդ պահին արդեն ուշ է, արտահոսքն արդեն տեղի է ունեցել: Լուծումը բազմապատկման մեջ գտնվող օպերանդներից մեկն առաջինը երկարի վերածելն է:

    22.11.2016
  • Հիմնականում այստեղ է տիպի փոխակերպման գործառույթների ցանկը, որոնք կարող են օգտագործվել մակրոյում՝ խուսափելու նման արտահոսքի սխալից: msdn.microsoft.com/en-us/library/s2dy91zy.aspx . Քանի որ դուք դա արել եք excel-ի բանաձևերում, դա պարտադիր չէ, բայց excel բջջային բանաձևն ինքնին բավականաչափ ունակ է ձեզ համար ճիշտ փոխակերպումներ կատարելու: 22.11.2016
  • Եթե ​​վերը նշված պատասխանը լուծի ձեր խնդիրը, դուք միշտ կարող եք նշել այն որպես ընդունված, որպեսզի մյուսները կարողանան տեսնել այն որպես ընդունված և լուծված: Շնորհակալություն 22.11.2016
  • Դե, դա աշխատում է: Շնորհակալություն Ես նախկինում երբեք չեմ հանդիպել դրա հետ: Նայելով իմ հին կոդը՝ ես միշտ ունեցել եմ ինչ-որ հաշվիչ կամ այլ փոփոխական, որը հայտարարվել է որպես երկար՝ մեծ արժեքներով աշխատելիս: Լավ է իմանալ, որ ուղիղ բազմապատկումը կարող է խաբել ամբողջը: 22.11.2016
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..


    Պիտակներ
    Machine Learning JavaScript Data Science Artificial Intelligence Python Software Development Web Development Coding Deep Learning React AI Software Engineering Nodejs Typescript Java Javascript Tips Tech Algorithms Front End Development Programming Languages iOS Data Business NLP Development Reactjs Tutorial CSS Learning Computer Science Learning To Code Swift Angular API Javascript Development Startup Android Reinforcement Learning