Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Обращение к переменным по именам
 
Здравствуйте! Помогайте новичку расставить по полочкам в голове :),
я записал в массив arrTemp( 1 то 3, 1 то 3) данные, потом мне нужно с этими данными что то делать, но  использовать элемент массива не удобно я путаюсь когда пишу например arrTemp( 1, 3) < arrTemp( 3, 3), а хотелось бы видеть в коде TempA<TempB
 
Цитата
omeverest написал: а хотелось бы видеть в коде TempA<TempB
Присвойте каждому элементу массива своё имя (переменную) и будете видеть то, что хочется.
Согласие есть продукт при полном непротивлении сторон.
 

1. Название темы про пальцы, массив или про синоним для элемента массива.

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

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

Увидел ответы от ГУРУ, спасибо, перевариваю
Изменено: omeverest - 7 Апр 2018 18:40:40
 
Цитата
omeverest написал:
беру данные из диапазона, загоняю их в массив, работаю с ними, а потом снова выгоняю в диапазон
используйте пользовательские типы данных.
Код
Type MyTmpVars
TempA As Long
TempB As Long
End Type
Sub Test()
Dim mtp As MyTmpVars
mtp.TempA = 1
mtp.TempB = 3
If mtp.TempA < mtp.TempB Then
End If
End Sub
P.S. Тему предлагаю назвать "Обращение к переменным по именам"
Изменено: Дмитрий Щербаков - 7 Апр 2018 21:05:45
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий Щербаков,
Цитата
Дмитрий Щербаков написал:
Обращение к переменным по именам
, а как к ним еще обращатся, не по фамилии же :-)

А если серьезно, то вопрос, как из диапазона тогда данные скопировать и обратно потом положить?
Изменено: БМВ - 7 Апр 2018 19:43:00
 
Цитата
omeverest написал: а вот когда 10 и более начинается путаница
Я в таких случаях, по старинке, на листочке карандашём пишу какой столбец/строка массива за что 'отвечает'
Согласие есть продукт при полном непротивлении сторон.
 
Цитата
БМВ написал:
из диапазона тогда данные скопировать и обратно потом положить?
Поочередно :) Какой вопрос - такой ответ. А суть была вроде такой:
Цитата
omeverest написал:
а хотелось бы видеть в коде TempA<TempB
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 

Дмитрий Щербаков, то не подкол был, реально интересно для практического применения.

 
Так и ответ был реальный - поочередно. Типы, это вроде словарейколлекций, в которых ключи можно задать заранее(плюс задать тип данных). Они могут быть удобны, если нужно в одной структуре держать разные типы данных(каждый элемент структуры Type может иметь свой тип данных). Плюс для типа работает подсказка после ввода точки Intelesense.
В принципе можно одним махом заполнить тип, но не из ячеек, а из другой переменной пользовательского типа. Притом это должен быть один и тот же тип. Вроде того:
Код
Option Explicit

Type MyTmpVars
    TempA As Variant
    TempB As Long
End Type
Type MyTmpVars2
    TempA As Variant
    TempB As Long
End Type
Sub Test()
    Dim mtp As MyTmpVars
    Dim arr As MyTmpVars
    
    arr.TempA = 1
    arr.TempB = 3
    Debug.Print arr.TempA < arr.TempB
    
    mtp = arr
    Debug.Print mtp.TempA < mtp.TempB
    
    mtp.TempA = 3
    mtp.TempB = 1
    Debug.Print mtp.TempA < mtp.TempB
End Sub
Изменено: Дмитрий Щербаков - 7 Апр 2018 20:48:37 (убрал неточность)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
В итоге
Цитата
Дмитрий Щербаков написал:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
и это верно на 100%. Вопрос мной был задан потому, что мне было тяжело писать код с логическими выражениями, в котором участвовали имена массивов с "циферьками" , и хотелось видеть просто более понятные имена, пока нашел выход через константы
Код
Dim arrTemp(1 To 3, 1 To 5) As Variant
Const A = 1, B = 2, Bar = 1, Low = 2, High = 3

Sub test()
arrTemp(Bar, A) = 777
arrTemp(Low, A) = 555
    If arrTemp(Bar, A) >= arrTemp(Low, A) Then
'Так значительно понятнее чем arrTemp(1, 1) >= arrTemp(2, 1)
    Else
    End If

End Sub
Всем большое спасибо ! Вопрос по этой части снят.
Страницы: 1
Читают тему (гостей: 1)