Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2010, 12:21   #1
Kracozebr
Пользователь
 
Регистрация: 16.07.2010
Сообщений: 17
По умолчанию Ошибка run-time error 13 Type mismatch в VBA

Ребят есть у меня такая вот програ:
Код:
Dim t As Double

Dim strFileName As String

Dim strFileContent As String

Dim nFreeFile As Integer

Dim nFileLenght As Integer

Private Sub cbRas_Click()
Dim xt(30), yt(30), xm(120), ym(2, 120), x, Y(2), H, H1, Smax, Amax As Double
V = 0.00182
A = 0.082
C = 696
M = 2.03
K = 989
P0 = 100000
G = 1.2
Y(1) = 0
Y(2) = 0
H = t / 120
H1 = H / 100
x = 0
xm(1) = 0
ym(1, 1) = 0
ym(2, 1) = 0
Smax = ym(1, 1)
Amax = ym(2, 1)
Val (Text2(0))
Val (Text2(1))
Val (Text2(2))
Val (Text2(3))
Val (Text2(4))
Val (Text2(5))
Val (Text2(6))
Val (Text2(7))
Val (Text2(8))
Val (Text2(9))
Val (Text2(10))
Val (Text2(11))
Val (Text2(12))
Val (Text2(13))
Val (Text2(14))
Val (Text2(15))
Val (Text2(16))
Val (Text2(17))
Val (Text2(18))
Val (Text2(19))
Val (Text2(20))
Val (Text2(21))
Val (Text2(22))
Val (Text2(23))
Val (Text2(24))
Val (Text2(25))
Val (Text2(26))
Val (Text2(27))
Val (Text2(28))
Val (Text2(29))
Val (Text2(30))
Val (Text3(0))
Val (Text3(1))
Val (Text3(2))
Val (Text3(3))
Val (Text3(4))
Val (Text3(5))
Val (Text3(6))
Val (Text3(7))
Val (Text3(8))
Val (Text3(9))
Val (Text3(10))
Val (Text3(11))
Val (Text3(12))
Val (Text3(13))
Val (Text3(14))
Val (Text3(15))
Val (Text3(16))
Val (Text3(17))
Val (Text3(18))
Val (Text3(19))
Val (Text3(20))
Val (Text3(21))
Val (Text3(22))
Val (Text3(23))
Val (Text3(24))
Val (Text3(25))
Val (Text3(26))
Val (Text3(27))
Val (Text3(28))
Val (Text3(29))
Val (Text3(30))
For I = 0 To 30
xt(I) = Text2(I)
yt(I) = Text3(I)
Next
    For k1 = 2 To 121
    For k2 = 1 To 100
    F1 = Y(2)
    F2 = (-C / M) * Y(2) - K / M * Y(1) + A / M * (P(x, xt, yt, 30) + (1 - (V / (V - A * Y(1))) ^ G)) * 100000
    x = x + H1
    Y(1) = Y(1) + F1 * H1
    Y(2) = Y(2) + F2 * H1
    Next
        xm(k1) = x
    ym(1, k1) = Y(1) * 100
    ym(2, k1) = Y(2)
    If Abs(ym(1, k1)) > Abs(Smax) Then Smax = ym(1, k1)
    If Abs(ym(2, k1)) > Abs(Amax) Then Amax = ym(2, k1)
    Next
    Print Smax, Amax
    End Sub
    Function P(x, xt, yt, N) As Double
   For I = 1 To N
     If x > xt(30) Or x < xt(30) Then x = xt(30)
    If x >= xt(I - 1) And x <= xt(I) Then GoTo 100
    Next
    Print 'Значение х лежит вне таблич. знач.
    Stop
100:    P = yt(I - 1) + (yt(I) - yt(I - 1)) * (x - xt(I - 1)) / (xt(I) - xt(I - 1))
      Return
End Function

и погда нажимаю на исполнение выводит таки ошибку 13 в графе с меткой 100. Не подскажите в чем дело... где-то я видимо накосячил с типами данных, но никак не могу найти..Помогите)))

Последний раз редактировалось Stilet; 19.07.2010 в 09:07.
Kracozebr вне форума Ответить с цитированием
Старый 17.07.2010, 15:46   #2
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

деление на 0 ??
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 18.07.2010, 10:08   #3
Kracozebr
Пользователь
 
Регистрация: 16.07.2010
Сообщений: 17
По умолчанию

Нет это не деление на ноль!! Там просто индекс будет нулевой,а значение будет другое
Kracozebr вне форума Ответить с цитированием
Старый 19.07.2010, 10:05   #4
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Ошибка номер раз:
Код:
    Dim xt(30), yt(30), xm(120), ym(2, 120), x, Y(2), H, H1, Smax, Amax As Double
здесь как Double будет определена только одна переменная - Amax, остальные будут Variant
Во-вторых, попробуй разбить формулу, например так:
Код:
Dim a As Double, b As Double, c As Double, d As Double
a = yt(I - 1)
b = yt(I)
c = xt(I)
d = xt(I - 1)
P = a + (b - a) * (x - d) / (c - d)
и посмотри где выдаст ошибку
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 19.07.2010, 11:48   #5
Kracozebr
Пользователь
 
Регистрация: 16.07.2010
Сообщений: 17
По умолчанию

да я уже понял что тама ошибка... я переписал прогу :
Dim t As Double

Dim strFileName As String

Dim strFileContent As String

Dim nFreeFile As Integer

Dim nFileLenght As Integer

Function P(x, xt, yt) As Double
For I = 0 To 30
If x > xt(30) And x < xt(30) - t / 10000 Then x = xt(30)
If x >= xt(I) And x <= xt(I + 1) Then GoTo 100
Next
Print ("Значение х лежит вне таблич. знач.")
Stop
100: P = yt(I) + (yt(I + 1) - yt(I)) * (x - xt(I)) / (xt(I + 1) - xt(I))

End Function

Private Sub cbRas_Click()
Dim xt(30) As Double, yt(30) As Double, xm(120) As Double, ym(2, 120) As Double, x As Double, Y(2) As Double, H As Double, H1 As Double, Smax As Double, Amax As Double
t = xt(30)
V = 0.00182
A = 0.082
C = 696
M = 2.03
K = 989
P0 = 100000
G = 1.2
Y(1) = 0
Y(2) = 0
H = t / 120
H1 = H / 100
x = 0
xm(1) = 0
ym(1, 1) = 0
ym(2, 1) = 0
Smax = ym(1, 1)
Amax = ym(2, 1)
For I = 0 To 30
xt(I) = Val(Text2(I).Text)
yt(I) = Val(Text3(I).Text)
Next
For k1 = 2 To 121
For k2 = 1 To 100
F1 = Y(2)
F2 = (-C / M) * Y(2) - K / M * Y(1) + A / M * (P(x, xt, yt) + (1 - (V / (V - A * Y(1))) ^ G)) * 100000
x = x + H1
Y(1) = Y(1) + F1 * H1
Y(2) = Y(2) + F2 * H1
Next
xm(k1) = x
ym(1, k1) = Y(1) * 100
ym(2, k1) = Y(2)
If Abs(ym(1, k1)) > Abs(Smax) Then Smax = ym(1, k1)
If Abs(ym(2, k1)) > Abs(Amax) Then Amax = ym(2, k1)
Next
Print Smax, Amax
End Sub

и все равно по метке 100 ошибка на этот раз ран тайм 6
Kracozebr вне форума Ответить с цитированием
Старый 19.07.2010, 11:59   #6
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

я говорю, разбей строку и посмотри где именно возникает ошибка
А функцию лучше написать так:
Код:
Function P(x, xt, yt) As Double
For I = 0 To 30
   If x > xt(30) And x < xt(30) - t / 10000 Then x = xt(30)
   If x >= xt(I) And x <= xt(I + 1) Then
      P = yt(I) + (yt(I + 1) - yt(I)) * (x - xt(I)) / (xt(I + 1) - xt(I))
      Exit Sub
   End If
Next
Print ("Значение х лежит вне таблич. знач.")
Stop
End Function
т.е. так:
Код:
Function P(x, xt, yt) As Double
For I = 0 To 30
   If x > xt(30) And x < xt(30) - t / 10000 Then x = xt(30)
   If x >= xt(I) And x <= xt(I + 1) Then
      Dim a As Double, b As Double, c As Double, d As Double
      a = yt(I - 1)
      b = yt(I)
      c = xt(I)
      d = xt(I - 1)
      P = a + (b - a) * (x - d) / (c - d)
      Exit Sub
   End If
Next
Print ("Значение х лежит вне таблич. знач.")
Stop
End Function
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 19.07.2010, 12:52   #7
Kracozebr
Пользователь
 
Регистрация: 16.07.2010
Сообщений: 17
По умолчанию

вобщем переписал... но ошибка осталась на той же строчке
P = a + (b - a) * (x - d) / (c - d)
ошибка рантайм 6 оверфлоу...
Kracozebr вне форума Ответить с цитированием
Старый 19.07.2010, 15:33   #8
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Как объявлена переменная P?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 19.07.2010, 16:07   #9
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Как объявлена переменная P?
Это не переменная, а функция:
Код:
Function P(x, xt, yt) As Double
Для Kracozebr: а ты не перепутал русскую Р и английскую P? Проверь.
А вообще используй команду Option Explicit, чтобы неопределённые переменные не пролазили.
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 19.07.2010, 16:10   #10
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Цитата:
Сообщение от Kracozebr Посмотреть сообщение
вобщем переписал... но ошибка осталась на той же строчке
P = a + (b - a) * (x - d) / (c - d)
ошибка рантайм 6 оверфлоу...
а в каком диапазоне лежат значения a, b, c и d?
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка - Run-time error '91' Object variable or With block variable not set Артур Иваныч Microsoft Office Excel 13 12.09.2012 14:18
ошибка run-time 1004: application-defined or object-defined error Святой Дьявол Microsoft Office Excel 3 26.06.2010 11:06
Pivot Run-time Error 1004 stream71 Microsoft Office Excel 0 07.09.2009 15:41
Ошибка Run-Time error 13 DEZuv Microsoft Office Access 0 03.04.2009 12:25
Подскажите! Run-time error '7' Out of memory evgenjp Свободное общение 3 01.10.2008 09:16