Как считать в пользовательскую переменную значения ячеек

Программирование на Visual Basic for Applications
Евгений Д.
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 21.09.2004 (Вт) 17:32
Откуда: Москва

Как считать в пользовательскую переменную значения ячеек

Сообщение Евгений Д. » 20.02.2006 (Пн) 14:57

Коллеги, поясните, что не так, когда я пытаюсь присвоить пользовательской переменной значения из диапазона? И вообще можно ли это делать?

Код: Выделить всё
Type MyType
    var1 as Integer
    var2 as String
    var3 as Boolean
End Type

Public MyVar as  MyType

sub Test

    MyVar =Range("A1:A3").value

   ...

end sub


VBA ругается: Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late-bound functions.

И что это за "public object modules" в VBA?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.02.2006 (Пн) 15:03

Это ж какую надо иметь самобытность, чтобы такое могло придти в голову :shock: Ужос...

Нет, нельзя, и нет, в VBA нет public object modules.

И да, dim v as variant : v=Range("A1:A3").value.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Евгений Д.
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 21.09.2004 (Вт) 17:32
Откуда: Москва

Сообщение Евгений Д. » 20.02.2006 (Пн) 16:25

Получается, что явно я не могу заполнить в пользовательской переменной сразу все поля? Только по одному полю:


Код: Выделить всё

   MyVar.var1 = ...
   MyVar.var2 = ...
   MyVar.var3 = ...


GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.02.2006 (Пн) 16:34

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

Евгений Д.
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 21.09.2004 (Вт) 17:32
Откуда: Москва

Сообщение Евгений Д. » 20.02.2006 (Пн) 16:43

Просто хотелось считывать и запоминать значения элементов управления формы не через массив, а через, на мой взгляд, более осысленную структуру - пользовательскую переменную. Ну раз нельзя, значит будем по старинке :D . Спасибо за науку.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.02.2006 (Пн) 16:51

public Const Var1 As Long = 0
public Const Var2 As Long = 1
public Const Var3 As Long = 2

public MyVar as variant

...
myvar = Range("A1:A3").value

msgbox MyVar(Var1)
msgbox MyVar(Var2)
msgbox MyVar(Var3)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Евгений Д.
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 21.09.2004 (Вт) 17:32
Откуда: Москва

Сообщение Евгений Д. » 20.02.2006 (Пн) 17:06

Да, что-то в этом духе. Только

Код: Выделить всё

msgbox MyVar(Var1,1)
msgbox MyVar(Var2,1)
msgbox MyVar(Var3,1)



Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 97

    TopList