Ошибка переполнения в VBScript - PullRequest
0 голосов
/ 06 ноября 2011

Я получаю сообщение об ошибке «Переполнение» в строке 40 следующего сценария:

Set objDialog = CreateObject("UserAccounts.CommonDialog")

objDialog.Filter = "Excel|*.xls|All Files|*.*"
objDialog.FilterIndex = 1
objDialog.InitialDir = "D:\"   
intResult = objDialog.ShowOpen 

If intResult = 0 Then
Wscript.Quit
 Else
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open(objDialog.FileName) 
End If


objExcel.Visible = True
Set objWorksheet2 = objWorkbook.Worksheets("Foaie1") 
objWorksheet2.Activate 


objExcel.ScreenUpdating = False
objExcel.Calculation = xlCalculationManual


Set RngVal = objWorksheet2.Range("D1").CurrentRegion.Columns(4)
Set RngCrt = RngVal.Offset(0, -3)

objWorksheet2.Select
objWorksheet2.Range("A2").Select

Do Until IsEmpty(ActiveCell)

If ActiveCell.Value <> ActiveCell.Offset(-1, 0).Value Then
Criteria = ActiveCell.Offset(-1, 0).Value
ActiveCell.Offset(-1, 7).Value = objExcel.WorksheetFunction.SumIf(RngCrt, Criteria, RngVal) / objExcel.WorksheetFunction.CountIf(RngCrt, Criteria)
End If
ActiveCell.Offset(1, 0).Select

Loop

ActiveCell.Offset(-1, 7).Value = objExcel.WorksheetFunction.SumIf(RngCrt, Criteria, RngVal) / objExcel.WorksheetFunction.CountIf(RngCrt, Criteria)

objExcel.Calculation = xlCalculationAutomatic
objExcel.ScreenUpdating = True

Сценарий вычисляет среднее значение столбца «D», а при изменении значения из «A» помещаетрезультат в "H".

Пример:

 1. "A"         "D"                "H"
 2. 07:36:16    8.4
 3. 07:36:16    3.4                 5.9
 4. 07:36:17    2.1

1 Ответ

2 голосов
/ 08 ноября 2011

В вашем коде над строкой

ActiveCell.Offset(-1, 7).Value = objExcel.WorksheetFunction.SumIf(RngCrt, Criteria, RngVal) / objExcel.WorksheetFunction.CountIf(RngCrt, Criteria)

Это строка 41, поэтому я предполагаю, что дополнительный символ новой строки был добавлен в этот образец по ошибке, потому что я совершенно уверен, что эта строка не работает.

Итак, простой способ выяснить, почему он не работает, - посмотреть на вычисляемые значения, поэтому попробуйте изменить эту строку на что-то вроде:

value1 = objExcel.WorksheetFunction.SumIf(RngCrt, Criteria, RngVal)
value2 = objExcel.WorksheetFunction.CountIf(RngCrt, Criteria)
msgbox value1
msgbox value2
ActiveCell.Offset(-1, 7).Value = value1 / value2

Я предполагаю, что значения, показанные вящики сообщений не будут соответствовать вашим ожиданиям, и, надеюсь, покажут вам, где находится ошибка.

...