Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Разногласия Объявление переменных - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Разногласия Объявление переменных (Макросы/Sub)
Разногласия Объявление переменных
Анатолий Дата: Среда, 05.02.2014, 14:16 | Сообщение № 1
Группа: Гости
Прошу прощения но в интернете встречаются разные разъяснения:
Вот на одном сайте:
[vba]
Код
Можно объявить несколько переменных в одном операторе без повторения типа данных. В следующих операторах переменные i ,j и k объявляются как тип Integer, l и m как Long, x и y как Single:
Dim i, j, k As Integer
' All three variables in the preceding statement are declared as Integer.
Dim l, m As Long, x, y As Single
' In the preceding statement, l and m are Long, x and y are Single.
[/vba]

Вот на другом:
[vba]
Код
Очень частая ошибка при объявлении переменных, совершаемая начинающими изучать VBA:

Dim MyVar1, MyVar2, MyVar3 As Integer

Вроде бы исходя из логики всем переменным присвоен тип данных Integer. Но это ошибочное суждение. Тип Integer присвоен только последней переменной, к которой он «привязан» оператором As — MyVar3. Все остальные переменные имеют тип данных Variant. Т.е. если Вы не задаете переменной тип хранимых данных явно(т.е. не указываете для неё тип данных), то VBA сам присваивает такой переменной тип данных Variant, т.к. он может хранить любой тип данных. А вот так выглядит правильное присвоение типа данных:

Dim MyVar1 As Integer, MyVar2 As Integer, MyVar3 As Integer
[/vba]

отсюда вопрос: это
1)[vba]
Код
Dim S1, S2, S3 As String
[/vba]
одно и тоже с этим
2)[vba]
Код
Dim S1 As String, S2 As String, S3 As String
[/vba]

Т.е. если все три переменные нужно объявить как строковые, то нужно делать как во втором случае?
Или это одно и тоже?
 
Ответить
СообщениеПрошу прощения но в интернете встречаются разные разъяснения:
Вот на одном сайте:
[vba]
Код
Можно объявить несколько переменных в одном операторе без повторения типа данных. В следующих операторах переменные i ,j и k объявляются как тип Integer, l и m как Long, x и y как Single:
Dim i, j, k As Integer
' All three variables in the preceding statement are declared as Integer.
Dim l, m As Long, x, y As Single
' In the preceding statement, l and m are Long, x and y are Single.
[/vba]

Вот на другом:
[vba]
Код
Очень частая ошибка при объявлении переменных, совершаемая начинающими изучать VBA:

Dim MyVar1, MyVar2, MyVar3 As Integer

Вроде бы исходя из логики всем переменным присвоен тип данных Integer. Но это ошибочное суждение. Тип Integer присвоен только последней переменной, к которой он «привязан» оператором As — MyVar3. Все остальные переменные имеют тип данных Variant. Т.е. если Вы не задаете переменной тип хранимых данных явно(т.е. не указываете для неё тип данных), то VBA сам присваивает такой переменной тип данных Variant, т.к. он может хранить любой тип данных. А вот так выглядит правильное присвоение типа данных:

Dim MyVar1 As Integer, MyVar2 As Integer, MyVar3 As Integer
[/vba]

отсюда вопрос: это
1)[vba]
Код
Dim S1, S2, S3 As String
[/vba]
одно и тоже с этим
2)[vba]
Код
Dim S1 As String, S2 As String, S3 As String
[/vba]

Т.е. если все три переменные нужно объявить как строковые, то нужно делать как во втором случае?
Или это одно и тоже?

Автор - Анатолий
Дата добавления - 05.02.2014 в 14:16
_Boroda_ Дата: Среда, 05.02.2014, 14:33 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Вообще-то, пора бы уже и зарегистрироваться, Вы как считаете? А то Ваши "коды" читать уж очень неудобно

Сначала охренел, мягко говоря. сайт Майкрософт http://msdn.microsoft.com/ru-ru/library/ke6sh835.aspx
Потом почитал внимательно - там не про VBA, а про VB. Не знаю, есть ли разница. С VB не общался - может, там такой синтаксис и прокатывает.
Анатолий, Запустите для проверки такой макрос
[vba]
Код
Sub tt()
Dim w, e As Boolean
w = 2
e = 2
[a1] = w
[a2] = e
End Sub
[/vba]
и Вам сразу все станет ясно


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВообще-то, пора бы уже и зарегистрироваться, Вы как считаете? А то Ваши "коды" читать уж очень неудобно

Сначала охренел, мягко говоря. сайт Майкрософт http://msdn.microsoft.com/ru-ru/library/ke6sh835.aspx
Потом почитал внимательно - там не про VBA, а про VB. Не знаю, есть ли разница. С VB не общался - может, там такой синтаксис и прокатывает.
Анатолий, Запустите для проверки такой макрос
[vba]
Код
Sub tt()
Dim w, e As Boolean
w = 2
e = 2
[a1] = w
[a2] = e
End Sub
[/vba]
и Вам сразу все станет ясно

Автор - _Boroda_
Дата добавления - 05.02.2014 в 14:33
Wowick Дата: Среда, 05.02.2014, 14:34 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 5 ±
Замечаний: 0% ±

Excel 2010
Неужели самому сложно проверить???
Написал вот такой макрос:
[vba]
Код
Sub start()
Dim i, k, n As Integer

i = 1.65
k = 2.65
n = 7.65
MsgBox i & " " & k & " " & n
End Sub
[/vba]

Запустил и тут же увидел результат.
 
Ответить
СообщениеНеужели самому сложно проверить???
Написал вот такой макрос:
[vba]
Код
Sub start()
Dim i, k, n As Integer

i = 1.65
k = 2.65
n = 7.65
MsgBox i & " " & k & " " & n
End Sub
[/vba]

Запустил и тут же увидел результат.

Автор - Wowick
Дата добавления - 05.02.2014 в 14:34
Анатолий Дата: Среда, 05.02.2014, 14:49 | Сообщение № 4
Группа: Гости
[vba]
Код
Sub start()
Dim i, k, n As Integer

i = 1.65
k = 2.65
n = 7.65
MsgBox i & " " & k & " " & n
End Sub
[/vba]

Ясно. Значит нужно только так:
Dim S1 As String, S2 As String, S3 As String

Спасибо
 
Ответить
Сообщение[vba]
Код
Sub start()
Dim i, k, n As Integer

i = 1.65
k = 2.65
n = 7.65
MsgBox i & " " & k & " " & n
End Sub
[/vba]

Ясно. Значит нужно только так:
Dim S1 As String, S2 As String, S3 As String

Спасибо

Автор - Анатолий
Дата добавления - 05.02.2014 в 14:49
Hugo Дата: Среда, 05.02.2014, 14:50 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3253
Репутация: 707 ±
Замечаний: 0% ±

2019
Такой вариант:
[vba]
Код
Option Explicit

'Иногда удобнее использовать префиксы, причём по двум причинам
'1 - первая буква имени уже подсказывет её тип
'2 - не указываем тип при объявлении (что и требовалось)Код Visual Basic

'В секции Declaration
DefInt I
DefLng L
DefStr S

Sub Макрос1()
     Dim i1, i2, i_K, l, s
     MsgBox TypeName(i_K)
     MsgBox TypeName(l)
     MsgBox TypeName(s)
End Sub
[/vba]


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеТакой вариант:
[vba]
Код
Option Explicit

'Иногда удобнее использовать префиксы, причём по двум причинам
'1 - первая буква имени уже подсказывет её тип
'2 - не указываем тип при объявлении (что и требовалось)Код Visual Basic

'В секции Declaration
DefInt I
DefLng L
DefStr S

Sub Макрос1()
     Dim i1, i2, i_K, l, s
     MsgBox TypeName(i_K)
     MsgBox TypeName(l)
     MsgBox TypeName(s)
End Sub
[/vba]

Автор - Hugo
Дата добавления - 05.02.2014 в 14:50
doober Дата: Среда, 05.02.2014, 15:50 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
_Boroda_
Потом почитал внимательно - там не про VBA, а про VB. Не знаю, есть ли разница. С VB не общался - может, там такой синтаксис и прокатывает.

запросто,даже иногда удобно.Например
[vba]
Код
    Private Sub Это_Возможно()
         For n As Integer = 0 To 3
             If 1 = 2 Then
                 Dim r As String = ""
             Else
                 Dim r As Image = Nothing
             End If
             If 1 = 2 Then
                 Dim r As Integer = 2
             Else
                 Dim r As Double = 34.0
             End If
         Next
     End Sub
[/vba]


 
Ответить
Сообщение_Boroda_
Потом почитал внимательно - там не про VBA, а про VB. Не знаю, есть ли разница. С VB не общался - может, там такой синтаксис и прокатывает.

запросто,даже иногда удобно.Например
[vba]
Код
    Private Sub Это_Возможно()
         For n As Integer = 0 To 3
             If 1 = 2 Then
                 Dim r As String = ""
             Else
                 Dim r As Image = Nothing
             End If
             If 1 = 2 Then
                 Dim r As Integer = 2
             Else
                 Dim r As Double = 34.0
             End If
         Next
     End Sub
[/vba]

Автор - doober
Дата добавления - 05.02.2014 в 15:50
SkyPro Дата: Среда, 05.02.2014, 16:57 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
А я предпочитаю краткую запись:
[vba]
Код

Dim t$ 'as string
Dim i% ' as integer
Dim l& ' as long
Dim d# ' as double
Dim c@ ' as currency
Dim s! ' as single
Dim v ' as variant
[/vba]


А еще можно прямо в коде обьявлять, как показал doober, но это удобно только для небольших макросов.
Кстати, можно еще так:
[vba]
Код
Sub variableinmacro()
s$ = "текст"
l& = 1111111
d# = 25.222
MsgBox TypeName(s) & vbNewLine & TypeName(l) & vbNewLine & TypeName(d)
End Sub
[/vba]
Но с Option Explicit будет ругаться.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Среда, 05.02.2014, 17:00
 
Ответить
СообщениеА я предпочитаю краткую запись:
[vba]
Код

Dim t$ 'as string
Dim i% ' as integer
Dim l& ' as long
Dim d# ' as double
Dim c@ ' as currency
Dim s! ' as single
Dim v ' as variant
[/vba]


А еще можно прямо в коде обьявлять, как показал doober, но это удобно только для небольших макросов.
Кстати, можно еще так:
[vba]
Код
Sub variableinmacro()
s$ = "текст"
l& = 1111111
d# = 25.222
MsgBox TypeName(s) & vbNewLine & TypeName(l) & vbNewLine & TypeName(d)
End Sub
[/vba]
Но с Option Explicit будет ругаться.

Автор - SkyPro
Дата добавления - 05.02.2014 в 16:57
alex77755 Дата: Среда, 05.02.2014, 18:15 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Цитата
запросто,даже иногда удобно
[vba]
Код
For n As Integer = 0 To 3
[/vba]

Насколько мне известно такой способ возможен только в VB.NET.
Ни в VB6, ни в VBA он не катит.
Кстати в VB.NET тип данных относится ко всем переменным в строке:
[vba]
Код
Dim i, j, k As Integer
[/vba]
В VB.NET все переменный будут Integer
В VB6 и VBA k Integer
i, j - Variant


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
Сообщение
Цитата
запросто,даже иногда удобно
[vba]
Код
For n As Integer = 0 To 3
[/vba]

Насколько мне известно такой способ возможен только в VB.NET.
Ни в VB6, ни в VBA он не катит.
Кстати в VB.NET тип данных относится ко всем переменным в строке:
[vba]
Код
Dim i, j, k As Integer
[/vba]
В VB.NET все переменный будут Integer
В VB6 и VBA k Integer
i, j - Variant

Автор - alex77755
Дата добавления - 05.02.2014 в 18:15
SkyPro Дата: Среда, 05.02.2014, 18:40 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
alex77755, Зато вот так работает:[vba]
Код
Sub test()
For n% = 0 To 3
     MsgBox TypeName(n)
Next
End Sub
[/vba]


skypro1111@gmail.com
 
Ответить
Сообщениеalex77755, Зато вот так работает:[vba]
Код
Sub test()
For n% = 0 To 3
     MsgBox TypeName(n)
Next
End Sub
[/vba]

Автор - SkyPro
Дата добавления - 05.02.2014 в 18:40
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Разногласия Объявление переменных (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!