Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Compile error: Добавлено: 01.09.09 09:04  

Автор вопроса:  fifa36
Всем привет! помогите разобраться! Выдает ошибку:
Объявил собственный тип, обращаюсь к процедуре и передаю ей переменную собственного типа, а он мне ошибку при обращении к процедуре:

Compile error:
Only-user defined types defined in public object modules can be coerced to or from a variant or passed to late-bound functions


Public Type CandleType
    dateArray() As Date
    openArray() As Double
    maxArray() As Double
    minArray() As Double
    closeArray() As Double
    volumeArray() As Double
End Type

Public Type SecurityType
    PlaceCode As String
    PCode As String
    Candle As CandleType
    nCandle As Long
    LastCandleDate As Date
End Type

Public Sub timer()
    Dim Securites() As SecurityType
    ...
    For i = 1 To nSec
        recieveData Securites(i - 1).Candle
    Next i
end sub
Public Sub recieveData(ByRef Candle As Variant)
    ...
end sub

Кстати кто подскажет)): процедура от функции чем отличается? тем что одна возвращает значение а другая нет и се?

Ответить

  Ответы Всего ответов: 15  

Номер ответа: 1
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #1 Добавлено: 01.09.09 09:07
кстати пробовал писать
Public Sub recieveData(ByRef Candle As CandleType)
не решает прблемы

Ответить

Номер ответа: 2
Автор ответа:
 inferno



Вопросов: 8
Ответов: 39
 Web-сайт: www.streamcash.tk
 Профиль | | #2
Добавлено: 01.09.09 09:47
Попробуй так

  1. Option Explicit
  2. Private Type CandleType
  3.     dateArray() As Date
  4.     openArray() As Double
  5.     maxArray() As Double
  6.     minArray() As Double
  7.     closeArray() As Double
  8.     volumeArray() As Double
  9. End Type
  10.  
  11. Private Type SecurityType
  12.     PlaceCode As String
  13.     PCode As String
  14.     Candle As CandleType
  15.     nCandle As Long
  16.     LastCandleDate As Date
  17. End Type
  18.  
  19. Dim my_rec As SecurityType
  20.  
  21. Private Sub recieveData(ByRef Candle As SecurityType)
  22.     MsgBox Candle.PCode
  23. End Sub
  24.  
  25. Private Sub Command1_Click()
  26.   my_rec.PCode = 1
  27.   Call recieveData(my_rec)
  28. End Sub

Ответить

Номер ответа: 3
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #3 Добавлено: 01.09.09 10:07
Дело в том что надо передать не my_rec f my_rec.Candle
а Candle имеет тип не SecurityType а CandleType

Ответить

Номер ответа: 4
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #4 Добавлено: 01.09.09 10:08
Сорри!
надо передать
не
my_rec
а
my_rec.Candle

Ответить

Номер ответа: 5
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #5 Добавлено: 01.09.09 10:14
Можно наверно все это дело глобально объявить и не передавать в процедуру но все жы...

Ответить

Номер ответа: 6
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #6
Добавлено: 01.09.09 14:40
нужно создать модуль и вынести туда твои типы CandleType и SecurityType

Ответить

Номер ответа: 7
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #7 Добавлено: 01.09.09 17:40
так тоже делал, не помогало,

Ответить

Номер ответа: 8
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #8
Добавлено: 01.09.09 19:27
я только что так сделал и все работает

Ответить

Номер ответа: 9
Автор ответа:
 inferno



Вопросов: 8
Ответов: 39
 Web-сайт: www.streamcash.tk
 Профиль | | #9
Добавлено: 02.09.09 08:35
Выложи код!!!

Ответить

Номер ответа: 10
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #10 Добавлено: 02.09.09 13:01
на всякий случай еще раз проверил вынес в отдельный модуль объявление типов взяв именно тот код что привел в теме, та же ошибка

Ответить

Номер ответа: 11
Автор ответа:
 inferno



Вопросов: 8
Ответов: 39
 Web-сайт: www.streamcash.tk
 Профиль | | #11
Добавлено: 02.09.09 13:03
Skywalker выложи свой рабочий код!

Ответить

Номер ответа: 12
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #12 Добавлено: 02.09.09 14:09
inferno код приведенный в вопросе полностью воспроизводит ошибку по крайней мере у меня зачем вам остальной код??

Ответить

Номер ответа: 13
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #13
Добавлено: 02.09.09 17:26
код Module1:
  1.  
  2. Public Type CandleType
  3.     dateArray() As Date
  4.     openArray() As Double
  5.     maxArray() As Double
  6.     minArray() As Double
  7.     closeArray() As Double
  8.     volumeArray() As Double
  9. End Type
  10.  
  11. Public Type SecurityType
  12.     PlaceCode As String
  13.     PCode As String
  14.     Candle As CandleType
  15.     nCandle As Long
  16.     LastCandleDate As Date
  17. End Type


код Лист1:
  1.  
  2. Public Sub timer()
  3.     Dim Securites() As SecurityType
  4.     ReDim Securites(0)
  5.     ReDim Securites(0).Candle.openArray(0)
  6.     Securites(0).Candle.openArray(0) = 5
  7.     recieveData Securites(0).Candle
  8. End Sub
  9. Public Sub recieveData(ByRef c As CandleType)
  10.     MsgBox c.openArray(0)
  11. End Sub

Ответить

Номер ответа: 14
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #14 Добавлено: 02.09.09 17:45
По моему вместо типов лучше сделать классы и пользоваться. Гимора намного меньше будет.
А в примере надо бы перевести с английского описание ошибки. Думаю намного быстрее удастся разобраться. Там или польз. тип определён в не том модуле, то ли в процедуру нельзя передавть пользовательский тип .... Чёрт голову сломит с этими типами. По моему их реально целесообразно применять только для работы с Win API.

Ответить

Номер ответа: 15
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #15 Добавлено: 03.09.09 10:08
Skywalker спасибо! получается проблема была в том что надо было сделать ReDim хотя бы для одного элемента Candle. В вашем примере:

ReDim Securites(0).Candle.openArray(0)
GDK спасибо! попробую классы

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам