Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
19.04.2024, 21:11:30

Войти
Добавляйтесь в нашу группу ВКонтакте - будьте в курсе всех новых событий сайта, узнавайте первым обо всех акциях и новых статьях!
33 242 Сообщений в 5 457 Тем от 6 758 Пользователей
Последний пользователь: Сергей2662
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
  Просмотр сообщений
Страниц: [1]
1  Основные форумы / Вопросы по Excel и VBA / Re:Передать значение двумерного строкового массива в процедуру : 24.11.2020, 00:48:15
Наконец нашлось время проверить (долго, макрос очень уж большой) - всё заработало. Спасибо откликнувшимся. Правда, снисходительно-пренебрежительное отношение некоторых - удивляет.
Итак, заранее заполняется массив парными строками (как написал The_Prist это массив массивов, а не двумерный, т.к. двумерный заполнить заранее нельзя) и его значения передаются в функцию и процедуру, где меняется строка s1. Будет так:
Код: (vb)

 Dim i As Integer, s1 As String
 Dim sH2() 'массив массивов
  sH2 = Array([{"стр0-1", "стр0-2"}], [{"стр1-1", "стр1-2"}])
  s1 = "string"
  For i = 0 To UBound(sH2)
    Call Sub1(s1, sH2(i)(1), sH2(i)(2))
    s1 = Func1(s1, sH2(i)(1), sH2(i)(2))
  Next i
Function Func1(s1 As String, ByVal isTxt As String, ByVal endTxt As String)
  ...
  Func1 = s1
End Function

Sub Sub1(ByRef s1 As String, ByVal isTxt As String, ByVal endTxt As String)
 ...
End Sub
2  Основные форумы / Вопросы по Excel и VBA / Re:Передать значение двумерного строкового массива в процедуру : 20.11.2020, 01:04:49
Вы путаетесь что Вам надо(то массивы передать, то s1 изменить). В итоге все смешалось
Я ничего не путаю - просто Вы почему-то упорно не хотите читать вопрос (еще в первом сообщении) - "как заранее заполнить двумерный строковый массив и передать его значение в процедуру и функцию?"
Как мне Вас уговорить прочитать? Давайте повторю третий раз  - мне нужно 1) заранее заполнить двумерный строковый массив и 2) передать его значение (любое, какое понадобится) в процедуру и функцию.

На первый вопрос Вы все-таки ответили, спасибо - "Заранее заполнить двумерный массив одной строкой не получиться никак". Вы пытались писать это сразу - но не для меня, а для себя, ведь только Вам было понятно, что нельзя заполнить массив, а не нельзя передать какое-то его значение. Так что не обижайтесь, но я Вас понял, что нельзя передать, а не нельзя заполнить. Теперь понятно, Вы здесь правы - то что я предлагал - не пройдет, так нельзя, это вообще не двумерный массив.

Но вроде бы вопрос решил vikttur, я его уже благодарил, но не жалко и второй раз. Если я правильно понял, массив все-таки можно оставить мой, "неправильный", а передать значение можно так: sH2(i)(1), sH2(i)(2). Но я должен попробовать, тем более, что пока у меня менялось s1 только в функции, а не в процедуре, а на это уточнение vikttur решил промолчать.

Про s1 я уже объяснял раньше, что это, нет смысла повторять.

В общем, нужно время на пробы.
3  Основные форумы / Вопросы по Excel и VBA / Re:Передать значение двумерного строкового массива в процедуру : 19.11.2020, 17:31:40
для начала поясните что именно хотите
Вы меня слегка запутали, видно, не совсем внимательно читали - ведь я написал в самом первом сообщении "заранее заполнить двумерный строковый массив и передать его значение в процедуру и функцию". Но все же повторю  и уточню - мне нужно заранее (до запуска макроса) заполнить двумерный строковый массив и передать его значения  в процедуру и функцию (там строка s1 будет модифицироваться согласно указаниям строкового массива).

Вы неправильно записываете массив
Спасибо, я так и думал, что где-то ошибка. Конечно, было бы все верно, разве надо было бы мне спрашивать помощи?
Спасибо, попробую второй вариант - вроде он должен сработать. Уточните пожалуйста - s1 изменится? Мне надо в процедуре s1 менять, не массив.
4  Основные форумы / Вопросы по Excel и VBA / Re:Передать значение двумерного строкового массива в процедуру : 19.11.2020, 15:22:50
Спасибо, но мне все-таки хотелось бы передавать значения двумерного массива. Дело в том, что значений в нем - десятки и запутаться с перестановкой и последующими изменениями очень легко. А что, невозможно двумерный массив применить? Мне нужно изменить только s1, ну и вернуть обратно. Как правильно передать параметры и принять их в процедуре, чтобы изменить s1? Если нельзя никак двумерный массив, то как связать пары строк? Или ввести 2 новые строки (ss1, ss2) для массива и их передавать? Типа в цикле: ss1=sH2(i,1); ss2=sH2(i,2); s1=func1(s1, ss1, ss2) - только так?

Код: (vb)
Dim sH2()  
Dim i As Integer, s1 as String  
sH2 = Array([{"стр0-1", "стр0-2"}], [{"стр1-1", "стр1-2"}]) 'двумерный массив  
s1="string"  
        
For i = 0 To UBound(sH2)  
   Call Sub1(s1, (sH2(i, 1)), (sH2(i, 2)))  
   s1=Func1(s1, (sH2(i, 1)), (sH2(i, 2)))  
Next i

Sub Sub1(ByRef sStr As String, s2 As String, s3 As String)
  Do ...
  Loop
End Sub

Function Func1(ByRef sStr As String, s2 As String, s3 As String)
  Do ...
  Loop
  Func1 = sStr
End Function

5  Основные форумы / Вопросы по Excel и VBA / Передать значение двумерного строкового массива в процедуру : 19.11.2020, 01:24:15
Подскажите, как заранее заполнить двумерный строковый массив и передать его значение в процедуру и функцию?
Нужно что-то такое:

Код: (vb)
Dim sH2()
Dim i As Integer, s1 as String
sH2 = Array([{"стр0-1", "стр0-2"}], [{"стр1-1", "стр1-2"}]) 'двумерный массив
s1="string"

For i = 0 To UBound(sH2)
   Call Sub1(s1, (sH2(i, 1)), (sH2(i, 2)))
   s1=func1(s1, (sH2(i, 1)), (sH2(i, 2)))
Next i

Страниц: [1]
Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru