Страницы: 1
RSS
Составное (динамическое) имя переменной в VBA
 
Ребята, подскажите пожалуйста как правильно совместить i и name, чтобы из этих двух значений получилось имя переменной? пытаюсь получить Name5, но как ни пытался к слову Name пристыковать текст из переменной i - ничего не получается(
Код
Sub script()
Dim i As Integer
Dim Name5 As String

i = 5
Name = "Текст"

MsgBox Name5
End Sub
 
Никак. Используйте массивы
Согласие есть продукт при полном непротивлении сторон
 
ЭЭЭЭ, а в чем смысл сего действа? Если нужны номера, то используйте массив.
Или вы хотели получит на выходе Текст5, тогда
К составному имени переменной это совсем не относится. Как и везде Name & i . поиском бы все нашли https://yandex.ru/search/?text=%D0%BA%D0%BE%D0%BD%D0%BA%D0%B0%D1%82%D0%B5%D0%BD%D0%B0%­D1%86%D0%B8%D1...
Эхх, тогда тему или под удаление или Конкатенация (слияние) строк в VBA.
Изменено: БМВ - 06.04.2018 19:10:13
По вопросам из тем форума, личку не читаю.
 
дело в том, что если Вам ... с высокой горы на VBA, то и ему точно также
пробуйте так:
Код
Sub script()
Dim i As Integer
Dim Name5 As String
 
i = 5
Name = "Текст"
 
MsgBox Name & i
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Код
Sub script()
Dim i As Integer
Dim Name As String
Dim Name5 As String
 
i = 5
Name = "Текст"
 Name5 = Name & i
MsgBox Name5

End Sub
Изменено: skiv17 - 06.04.2018 19:12:42
 
БМВ, во кусок кода и в нем я перебираю через For blN цифры от 5 до 9, а дальше уже записываю в переменные
kpp_nd_Cstart_bl5, kpp_nd_Rstart_bl5 и т.д. информацию. Вот мне и нужно число из переменной blN как-то привязать к слову "kpp_nd_Cstart_bl" чтобы на выходе получилось kpp_nd_Cstart_bl5, когда все циклы завершатся и blN увеличится на единицу, то уже будет kpp_nd_Cstart_bl + цифра 6 - "kpp_nd_Cstart_bl6" и т.д.
Код
For blN = 5 To 9 Step 1
    If Sheets("Бл " & blN).[G15] <> "" Then
        For j = 1 To 70 Step 1
            For i = 1 To 350 Step 1
                e = InStr(Sheets("Бл " & blN).Cells(i, j).Value, "вит")
                a = InStr(Sheets("Бл " & blN).Cells(shapka1_bl5, j).Value, "Н")
                b = InStr(Sheets("Бл " & blN).Cells(shapka1_bl5, j).Value, "В")
                c = InStr(Sheets("Бл " & blN).Cells(shapka1_bl5, j).Value, "ш")
                d = InStr(Sheets("Бл " & blN).Cells(shapka1_bl5, j).Value, "р")
        
                
                If a > 0 And Sheets("Бл " & blN).Cells(i, j).NumberFormat = "0" Then
                    If kpp_nd_start = "" Then
                        kpp_nd_start = Sheets("Бл " & blN).Cells(i, j).address
                        kpp_nd_Cstart_bl5 = Split(Sheets("Бл " & blN).Cells(1, j).address, "$")(1)
                        kpp_nd_Rstart_bl5 = Sheets("Бл " & blN).Cells(i, j).Row
                    Else
                        kpp_nd_finish = Sheets("Бл " & blN).Cells(i, j).address
                        kpp_nd_Cfinish_bl5 = Split(Sheets("Бл " & blN).Cells(1, j).address, "$")(1)
                        kpp_nd_Rfinish_bl5 = Sheets("Бл " & blN).Cells(i, j).Row
                    End If
                End If
                
                If b > 0 And Sheets("Бл " & blN).Cells(i, j).NumberFormat = "0" Then
                    If kpp_vd_start = "" Then
                        kpp_vd_start = Sheets("Бл " & blN).Cells(i, j).address
                        kpp_vd_Cstart_bl5 = Split(Sheets("Бл " & blN).Cells(1, j).address, "$")(1)
                        kpp_vd_Rstart_bl5 = Sheets("Бл " & blN).Cells(i, j).Row
                    Else
                        kpp_vd_finish = Sheets("Блок " & blN).Cells(i, j).address
                        kpp_vd_Cfinish_bl5 = Split(Sheets("Бл " & blN).Cells(1, j).address, "$")(1)
                        kpp_vd_Rfinish_bl5 = Sheets("Блок " & blN).Cells(i, j).Row
                    End If
                End If
                
                If c > 0 And Sheets("Блок " & blN).Cells(i, j).NumberFormat = "0" Then
                    If shirm_start = "" Then
                        shirm_start = Sheets("Бл " & blN).Cells(i, j).address
                        shirm_Cstart_bl5 = Split(Sheets("Бл " & blN).Cells(1, j).address, "$")(1)
                        shirm_Rstart_bl5 = Sheets("Бл " & blN).Cells(i, j).Row
                    Else
                        shirm_finish = Sheets("Бл " & blN).Cells(i, j).address
                        shirm_Cfinish_bl5 = Split(Sheets("Бл " & blN).Cells(1, j).address, "$")(1)
                        shirm_Rfinish_bl5 = Sheets("Бл " & blN).Cells(i, j).Row
                    End If
                End If
                
                If d > 0 And Sheets("Бл " & blN).Cells(i, j).NumberFormat = "0" Then
                    If reg_st_start = "" Then
                        reg_st_start = Sheets("Бл " & blN).Cells(i, j).address
                        reg_st_Cstart_bl5 = Split(Sheets("Бл " & blN).Cells(1, j).address, "$")(1)
                        reg_st_Rstart_bl5 = Sheets("Бл " & blN).Cells(i, j).Row
                    Else
                        reg_st_finish = Sheets("Бл " & blN).Cells(i, j).address
                        reg_st_Cfinish_bl5 = Split(Sheets("Бл " & blN).Cells(1, j).address, "$")(1)
                        reg_st_Rfinish_bl5 = Sheets("Бл " & blN).Cells(i, j).Row
                    End If
                End If
Next i
Next j

    Else
        MsgBox "Бл " & blN & " - Нет загруженной информации!"
End If

Next blN

 
Все таки речь о составной переменной. VBA такое не поддерживает (по крайней мере напрямую, без танцев бубном) . Используйте массивы
Согласие есть продукт при полном непротивлении сторон
 
Добрый день.
Не вникал в код (т.к. нет ни задачи, ни файла), но
Цитата
Добрый написал:
нужно число из переменной blN как-то привязать к слову "kpp_nd_Cstart_bl" чтобы на выходе получилось kpp_nd_Cstart_bl5, когда все циклы завершатся и blN увеличится на единицу, то уже будет kpp_nd_Cstart_bl + цифра 6 - "kpp_nd_Cstart_bl6" и т.д.
делается легко и просто если использовать словарь. Да и даже обычную стандартную коллекцию - смотря что затем нужно со всем этим делать.
 
Пример кода для массивов
Код
Dim kpp_nd_Cstart_bl(5 To 9) 'объявляете массивы переменных
Dim kpp_nd_Rstart_bl(5 To 9)
'...и т.д. ........
For blN = 5 To 9 Step 1
    If Sheets("Бл " & blN).[G15] <> "" Then
        For j = 1 To 70 Step 1
            For i = 1 To 350 Step 1
                e = InStr(Sheets("Бл " & blN).Cells(i, j).Value, "вит")
                a = InStr(Sheets("Бл " & blN).Cells(shapka1_bl5, j).Value, "Н")
                b = InStr(Sheets("Бл " & blN).Cells(shapka1_bl5, j).Value, "В")
                c = InStr(Sheets("Бл " & blN).Cells(shapka1_bl5, j).Value, "ш")
                d = InStr(Sheets("Бл " & blN).Cells(shapka1_bl5, j).Value, "р")
         
                 
                If a > 0 And Sheets("Бл " & blN).Cells(i, j).NumberFormat = "0" Then
                    If kpp_nd_start = "" Then
                        kpp_nd_start = Sheets("Бл " & blN).Cells(i, j).Address
                        kpp_nd_Cstart_bl(blN) = Split(Sheets("Бл " & blN).Cells(1, j).Address, "$")(1)
                        kpp_nd_Rstart_bl5(blN) = Sheets("Бл " & blN).Cells(i, j).Row
'...........................................................................................
Изменено: Sanja - 06.04.2018 19:41:54
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Hugo, skiv17, Ігор Гончаренко, БМВ, Большое спасибо за помощь!!!)
 
Цитата
Sanja написал:
се таки речь о составной переменной. VBA такое не поддерживает
согласен. в отличие от PHP, в VBA сие не возможно. Жертвуйте читабельностью в пользу работоспособности.
Тогда тема: динамическое имя переменной в VBA
По вопросам из тем форума, личку не читаю.
 
Здравствуйте. В продолжение темы динамической переменной. Как сохранить значения различных переменных, полученных в цикле, для использования вне этого цикла? (Код может быть написан абсолютно не верно.)
Код
Dim W as Object
Set W = CreateObject("Scripting.Dictionary") ' использование динамической переменной
Dim W1, W2, ... as Object
Dim i As Byte
For i = 1 to 10
    W(i) = i
Next


Действия c W1 ...
Действия c W2 ...
...
 
Как - продолжение? Общего - упоминание переменной, больше ничего.
 
Neurosurgeon, здравствуйте
Создайте тему, а ответ, скорее всего, будет про массивы
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх