Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,671
Записей в блоге: 2

End With по требованию

06.10.2024, 08:52. Показов 3293. Ответов 52
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В одном коде надо было перебирать элементы массива UDT и при определенных условиях "выпрыгнуть" из цикла, а после цикла при определенных условиях происходит редим этого массива, но обнаружилась одна проблемка с использованием оператора With в таком сценарии. Упрощенно проблемму можно воспроизвести таким кодом
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Type tpNode
    Val As Long
End Type
 
Sub TestWith()
    Dim i&, Nodes() As tpNode
    
    ReDim Nodes(5) As tpNode
    
    Do
        With Nodes(2)
            .Val = 1
            Exit Do
        End With
    Loop
    
    ReDim Preserve Nodes(6)    
End Sub
При выполнении данного кода после цикла выскочит ошибка "This array is fixed or temporarily locked". Она возникает по причине того, что оператор With захватывает элемен массива и блокирует массив от изменения размерности. Поскольку выход из цикла происходит до закрытия With, блокировка массива не снимается. В идеальном случае нужно было выходить из цикла после End With, но в том коде все действия происходят в условном операторе, помещенном внутри With. Здача данной темы отгадать, 1) как я реши эту пролему (или предложить свое решение); 2) то же самое, но с использованием цикла For )
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.10.2024, 08:52
Ответы с готовыми решениями:

Excel 2013 32-bit URLDownloadToFile пишет "Compile error: only comment may appear after End Sub End Function or End Prop
Добрый день! перепробовал все варианты и не вызывается функция URLDownloadToFile: пишет "Compile error: only comment may appear...

Требуется Web-разработчик (Front end/Back end) Санкт-Петербург
Обязанности: • Основная задача: бек энд разработка (организация REST-API сервисов и взаимодействие с БД (crud-операции) на python),...

Java Developer (front-end + back-end); Chicago,IL; H1B Sponsorship is available!
Valdi Group LLC is a Chicago based software development and software testing consulting firm that successfully delivering elegant and...

52
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,671
Записей в блоге: 2
20.11.2024, 16:31  [ТС]
Студворк — интернет-сервис помощи студентам
With прекрасный и быстрый, CopyMemory видимо непричем, это все медленное вычисление указателей в vb IDE (в нативе не проверял), Mid действительно быстрая функция.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
20.11.2024, 16:35
Цитата Сообщение от testuser2 Посмотреть сообщение
With прекрасный и быстрый
Ничего прекрасного и быстрого я в нём не вижу. Тебе уже привели кучу доказательств что с ним будет работать медленнее в EXE.

Добавлено через 34 секунды
Цитата Сообщение от testuser2 Посмотреть сообщение
With прекрасный и быстрый
А ты не привёл ни одного доказательства что он может быть быстрее в EXE
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,671
Записей в блоге: 2
20.11.2024, 16:42  [ТС]
Я привел факт, что with работает нормально, но есть трабла с компиляцией. Возможно Твин-бейские уже все иначе + переработали этот оператор и дополнили функционалом
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,671
Записей в блоге: 2
20.11.2024, 16:55  [ТС]
Все-таки Твин более современный язык.. Не перестаю удивлятся
Вложения
Тип файла: zip NewProject_win32.zip (359.1 Кб, 2 просмотров)
1
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
20.11.2024, 17:02
Да, тут ты прав, я сам видел как в Твине некоторые процессы работают быстрее. Например я запускал свой проект "10000 строк в листбокс" и там в Твине добавляет быстрее по миллисекундам, чем в VB6. Помнишь ты ещё писал потом проект где ты перепрошивал память напрямую в листбоксе. Так вот вот мы тогда не пробывали в Твине. В Твине достаточно быстро всё. Быстрее чем в VB6 я проверял.

Добавлено через 39 секунд
Лайк, за факт быстроты Твина.

Добавлено через 1 минуту
testuser2, а в VBA какая скорость кстати? Такая же галимая как и в VB6?
1
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,671
Записей в блоге: 2
20.11.2024, 17:25  [ТС]
Цитата Сообщение от HackerVlad Посмотреть сообщение
а в VBA какая скорость кстати?
В VBA IDE также как в VB6 IDE, так как должно быть, первый вариант быстрее. Вообще, когда работаешь с объектами без With ни куда. Как пример
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    With Re1.Execute(sVBDecl)
        If .Count Then
            With .Item(0)
              pos1 = .length + 1
              If Len(.SubMatches(1)) = 0 Then
                  sTmp = .SubMatches(2)
                  sFnTp = .SubMatches(4) 
                  sHdr = Replace(.Value, sTmp, "PtrSafe " & sTmp)
              Else: sHdr = .Value
              End If
            End With
        Else
            MsgBox "Не удалось обработать заголовок функции"
            Exit Function
        End If
    End With


Добавлено через 4 минуты
Цитата Сообщение от HackerVlad Посмотреть сообщение
перепрошивал память напрямую в листбоксе.
В Твине должны сдеать добавление строк из массива как в VBA, только, надеюсь, не по ублюдочному как в VBA - где каждая строка LB в отдельном объекте..
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
20.11.2024, 18:05
testuser2, а в VBA какая скорость кстати? Такая же галимая как и в VB6?
Цитата Сообщение от testuser2 Посмотреть сообщение
В Твине должны сдеать добавление строк из массива как в VBA
Надо будет кстати проверить, хорошая мысль
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,671
Записей в блоге: 2
20.11.2024, 18:19  [ТС]
На самом деле если оставить стебовый спор, о том, нужен With или нет, я, конечно, не могу точно утверждать ). В Delphi от есть, в C# как пишут от него сознательно отказались в виду усложнения читаемости. Что дает With в VB/VBA в основном это удобная навигация в структуре вложенных объктов, хотя можно было бы обойтись без With использованием дополнительных переменных.. Что действительно было бы наверное круто, если бы в Твине добавили указатели (переменные-ссылки), но я вижу, что такое там, кстати, уже реализуется (видел примеры но не тестил) с помощью With..
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
20.11.2024, 18:34
Цитата Сообщение от HackerVlad Посмотреть сообщение
Он ведь только замедляет работу в EXE
Нет. With нужно просто пользоваться правильно, а не делать бессмысленные тесты которые ничего полезного не показывают.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
20.11.2024, 19:03
Цитата Сообщение от testuser2 Посмотреть сообщение
указатели (переменные-ссылки)
А что это кстати? Что-то типа StrPtr?
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,671
Записей в блоге: 2
20.11.2024, 19:18  [ТС]
Это типа ByRef аргуметов функции, только не в стеке аргументов, а задаваемые, как обычные переменные
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
20.11.2024, 19:43
Цитата Сообщение от testuser2 Посмотреть сообщение
Это типа ByRef аргуметов функции, только не в стеке аргументов, а задаваемые, как обычные переменные
мне как раз пришлось мутить такую фишку в моём модуле для упаковки CAB-файлов
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,671
Записей в блоге: 2
21.11.2024, 02:08  [ТС]
Вот пример работы с указателем с сайта ТВ. Дело в том, что в VB нельзя было передать экземпляр UDT опционально, а в TB это стало возможно. Я специально добавил "Optional" чтобы показать это.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Type foo
    a As Long
    b As Long
    pfizz As LongPtr 'A pointer to a variable of type fizz
End Type
 
Sub call1()
    Dim f As foo
    test1 VarPtr(f)
    Debug.Print f.a, f.b
End Sub
Sub test1(Optional ByVal ptr As LongPtr)
    If ptr Then
        With CType(Of foo)(ptr)
            .a = 1
            .b = 2
        End With
    End If
End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.11.2024, 02:08

Syntax error unexpected $end and premature end-of-file единственный варнинг
Помогите исправить!! Device (FWH) { Name (_HID, EisaId ("INT0800")) Method (_CRS, 0,...

Ведущие разработчики .NET (C#) Front-end и Back-end (Москва, не аутсорс)
В департамент разработки ПО крупной международной компании требуются: Lead Back-end developer: -Опыт разработки программного...

Error при создании .obj файла 85:End of file, no end directive
Добрый день! помогите разобраться с ошибкой! Компилирую следующий код в ibm personal computer macro assembler v 2.0: TITLE ...

With myChart With .Axes(xlCategory) .CategoryType = xlTimeScale .BaseUnit = xlseconds End With End With
MSDN утверждает: BaseUnit Property Applies To Axis object. Description Returns or sets the base unit for the specified category...

Работа в Германии (Front-End, Back-End или Full-Stack)
Ребят,я понимаю, реклама вас задолбала,но все-же, поступил заказ в наше агентство из Германии они ищут программиста.Работа в Германии,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
53
Ответ Создать тему
Новые блоги и статьи
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru