powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему VBA размещает строки в обратном порядке?
45 сообщений из 45, показаны все 2 страниц
Почему VBA размещает строки в обратном порядке?
    #39993232
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть какое-то объяснение и какая-то сермяжная правда в том, что VBA присваивает адреса строкам (то есть размещает их) в обратном порядке?

Для
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Declare Function VarPtrVaria Lib "msvbvm60" Alias "VarPtr" (Var As Any) As Long

Public s1 As String
Public s2 As String, s3 As String
Public s4 As String
........
Debug.Print VarPtrVaria(s1), VarPtrVaria(s2), VarPtrVaria(s3), VarPtrVaria(s4)



распечатка:
1373432 1373424 1373416 1373408
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993267
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS,

Адреса переменных могут располагаться в любом порядке. В зависимости от наличия свободной памяти
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993271
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

что такое "наличия свободной памяти" в момент (в процессе) компиляции VBA-кода MS-приложением (например, MS Access)&
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993288
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS,

То что как захочет интерпретатор VBA так и расположит их в памяти (на самом деле Windows у которой VBA запросит выделение памяти под строковую переменную, но сути дела это не меняет)

И еще, описанный код в первом посте - ересь.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993297
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt
И еще, описанный код в первом посте - ересь
в смысле не кошерный?
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993300
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt
захочет интерпретатор VBA
-- а вы думаете, что моё "VBA присваивает адреса" -- это не про интерпретатор? И вопрос поста не про то, есть ли какие-то соображения о том, почему интерпретатор VBA хочет именно так?
Eolt
а самом деле Windows у которой VBA запросит выделение памяти под строковую переменную
-- а вы думаете, что 1373432, 1373424, 1373416 и 1373408 в моем примере -- это некие "адреса в памяти Windows"?
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993310
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Eolt
И еще, описанный код в первом посте - ересь
в смысле не кошерный?


1. Адреса BSTR строк берутся не через VarPtr, а с помощью StrPtr
2. В VBA нельзя использовать VarPtr и StrPtr, это недокументированная функция, которая может не работать в другой версии Office
3. Это точно не будет работать в 64-битной версии Office, код просто скрашится
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993311
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А собственно доступ к строкам через указатель StrPtr работает вот так:
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993327
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо, возможно автор получает не адрес объектов строки, а адреса указателей строк из стека, ну, а стек по понятным причинам растёт от старших адресов к младшим.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993339
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
И вопрос поста не про то, есть ли какие-то соображения о том, почему интерпретатор VBA хочет именно так?


Интерпретатор VBA ничего не хочет. Встретив объявление строковой переменной он вызывает SysAllocString и получает от операционной системы созданную строку в памяти.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993347
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

извините, я совсем чайник: вы утверждаете, что интерпретатор обращается к операционной системе за/для выделения памяти отдельно по поводу каждой переменной в тексте интерпретируемого кода?

Я-то наивно думал, что интерпретатор "готовит" весь интерпретируемый проект в каком-то своём буфере, а потом ещё подключается ассемблер -- и только он уже размещает окончательный бинарный код в оперативной памяти...
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993357
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Eolt,

извините, я совсем чайник: вы утверждаете, что интерпретатор обращается к операционной системе за/для выделения памяти отдельно по поводу каждой переменной в тексте интерпретируемого кода?


Строки в VBA - это BSTR. А для создания BSTR строки в Windows используется функция SysAllocString. Соответственно на каждое объявление строки, VBA вызовет эту API функцию и получит созданную строку от операционной системы


авторЯ-то наивно думал, что интерпретатор "готовит" весь интерпретируемый проект в каком-то своём буфере, а потом ещё подключается ассемблер -- и только он уже размещает окончательный бинарный код в оперативной памяти...

VBA не компилируется в машинный код (это не VB6). При "компиляции" VBA строит AST-дерево, из которого потом генерирует байткод, который выполняется стековой машиной.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993390
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас проверил у себя в 2007 офисе, там VarPtr и StrPtr есть и даже работают как надо.
Не знаю есть ли эти функции в последних версиях офиса.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993402
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
... а вы думаете, что 1373432, 1373424, 1373416 и 1373408 в моем примере -- это некие "адреса в памяти Windows"?

Да, именно так.
Но в твоем примере это адреса не самих строк, а переменных для них, выделенных компилятором в стеке для текущей процедуры.
Адреса строк получают через strptr, полученное значение укажет на первый байт строки, сразу за лонгом его длины

для копирования адресов строк из одной переменной в другую можно использовать трюки от Балена, ищи по "изоморфным интерфейсам", где-то пробегало здесь или в акцессе лет 10 - 12 назад...
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993414
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Но в твоем примере это адреса не самих строк, а переменных для них, выделенных компилятором в стеке для текущей процедуры
-- собственно меня и интересуют не сами строки и не "адреса самих строк", а идентификаторы переменных, которые можно было бы хранить отдельно от них ... зато вместе с некоторым "контекстами", накапливаемыми по поводу этих переменны.

booby
для копирования адресов строк из одной переменной в другую
-- честно говоря не очень понимаю, что здесь написано, но вроде бы это не то, что я хотел бы делать.

А именно: есть у меня переменная S1, я в одном месте кода что-то такое про неё "запоминаю", а потом совершенно в другом месте кода хочу снова это про неё это "вспомнить".
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993421
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS,

Зачем тут указатели? Про структуры слышали?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Option Explicit

Type Vars
   Value   As String
   Info As String
End Type

Sub Main()

 Dim S1 As Vars

  S1.Value = "Содержимое перемеенной"
  S1.Info = "Информация о переменной"

End Sub
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993423
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

я хочу иметь возможность делать это с переменными стандартных типов
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993424
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Eolt,

я хочу иметь возможность делать это с переменными стандартных типов


Какая собственно разница?
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993431
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS,

Вы путайте такие понятия как переменная и объект. это совершенно разные вещи и хотите непонятно чего.
для чего вам нужен адрес объекта\переменной, стало еще меньше понятно.
создайте глобальный объект справочник и "запоминайте" по ключу строке то, что хотите запомнить, а потом "вспоминайте" это, где вам нужно
адрес переменной существует только в области видимости самого метода, как только метод вернет управления можно считать, что её более не существует. а адрес объекта может в любой момент измениться по совершенно разным причинам или объект может быть освобожден и на его место будет записано, что угодно еще.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993442
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

можно я ещё раз повторю, что я хочу так финтить с переменными стандартных типов. Преобразовывать их в типизированные (а тем более в объекты) только для тог, чтобы на этапе отладки иметь возможность с ними "поразбираться" -- спасибо.
_____________________

И да, я пишу не профессиональный и не коммерческий код, и поэтому позволяю себе "писать ересь".
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993443
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понимаю автор хочет прикрутить к стандартным типам свой тег с информацией.
Только зачем это нужно - непонятно.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993474
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
booby
Но в твоем примере это адреса не самих строк, а переменных для них, выделенных компилятором в стеке для текущей процедуры
-- собственно меня и интересуют не сами строки и не "адреса самих строк", а идентификаторы переменных, которые можно было бы хранить отдельно от них ... зато вместе с некоторым "контекстами", накапливаемыми по поводу этих переменны.

booby
для копирования адресов строк из одной переменной в другую
-- честно говоря не очень понимаю, что здесь написано, но вроде бы это не то, что я хотел бы делать.

А именно: есть у меня переменная S1, я в одном месте кода что-то такое про неё "запоминаю", а потом совершенно в другом месте кода хочу снова это про неё это "вспомнить".


Попробуйте русским языком, а не языком невменяемого бреда, изложить изумительные свои пожелалки.

PS
И да, у вас есть представление о таком понятии как "область видимости переменной"?
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993493
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
И да, у вас есть представление о таком понятии как "область видимости переменной"?
-- вот я ведь у вас не спрашиваю, знаете ли вы, что означает слово "Public" в посте, правда?
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39993497
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
booby
И да, у вас есть представление о таком понятии как "область видимости переменной"?
-- вот я ведь у вас не спрашиваю, знаете ли вы, что означает слово "Public" в посте, правда?

Знаю.

Докладываю, в данном конкретном случае, в опубликованном вами первом посте,
это слово обозначает глупость обыкновенную, ничем не прикрытую.

За остуствием у вас смысла в производимых вами дейстиях, внимание на мой пост можно не обращать.

Всего доброго.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994100
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван FXS
booby
Но в твоем примере это адреса не самих строк, а переменных для них, выделенных компилятором в стеке для текущей процедуры
-- собственно меня и интересуют не сами строки и не "адреса самих строк", а идентификаторы переменных, которые можно было бы хранить отдельно от них ... зато вместе с некоторым "контекстами", накапливаемыми по поводу этих переменны.

booby
для копирования адресов строк из одной переменной в другую
-- честно говоря не очень понимаю, что здесь написано, но вроде бы это не то, что я хотел бы делать.

А именно: есть у меня переменная S1, я в одном месте кода что-то такое про неё "запоминаю", а потом совершенно в другом месте кода хочу снова это про неё это "вспомнить".

Что ЭТО должно было быть? Контейнер (map, collection) какой-то? Что в качестве ключа - имя переменной, ссылка на значение переменной с некой RTTI (хотя бы тип)? Вид "чего-то такого, что надо запомнить"? Осознание проблемы выхода переменной из области видимости, делающей (предполагаемые) ссылки весьма опасными "тыквами"?

"... (наливает из графина): Жаль... Жаль, что нам так и не удалось послушать начальника транспортного цеха." ((c) Жванецкий)
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994546
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦа
проблемы выхода переменной из области видимости
-- прикольная формулировка! Куда попадает переменная, выходя из области видимости?
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994574
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван FXS,

Вы более не настроены на решение задачи?
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994594
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦа,

во-первых, пост был не про "задачу", а про странное поведение VBA, которое видно через библиотечную функцию VarPtr. На эту тему никто мне ни слова не ответил, зато начали приводить примеры, как нужно правильно делать CopyMemory.

Вот я и проговорился, что мне не нужно CopyMemory, а нужно ... вы читали.

Ну и если человек (скажем, это были не вы) начинает с высказывания предположений, что у меня нет

" представления о таком понятии как область видимости переменной ", ... не говоря уже об остальных высокомерных оборотах... то зачем это мне?
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994600
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, статические переменные, имеющие "область видимости" только в пределах процедуры, в которой они объявлены, тоже имеют VarPtr (который, естественно, постоянен.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Declare Function VarPtrVaria Lib "msvbvm60" Alias "VarPtr" (Var As Any) As Long

Private Sub Print_Static_VariablesVarPtr_TESTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT()

Print_Static_Variables_VarPtr
Print_Static_Variables_VarPtr
Print_Static_Variables_VarPtr
Stop
End Sub

Public Sub Print_Static_Variables_VarPtr()

Static i As Integer, l As Long, x As Double, s As String
Debug.Print VarPtrVaria(i), VarPtrVaria(l), VarPtrVaria(x), VarPtrVaria(s)

End Sub



Код: plaintext
1.
2.
 349057428     349057432     349057436     1373276 
 349057428     349057432     349057436     1373276 
 349057428     349057432     349057436     1373276 
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994602
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван FXS
ЦЦа,

во-первых, пост был не про "задачу", а про странное поведение VBA, которое видно через библиотечную функцию VarPtr. На эту тему никто мне ни слова не ответил,
Что касаеЦЦа начального вопроса, Вам ответили, что строки переменной длины в VB/VBA - это BSTR , и что локальные переменные в методах/процедурах выделяюЦЦа в (на) стеке, который растёт от больших адресов к меньшим, что и видно по результатам вызовов функции VarPtr() (зачем-то притащенной в VBA из run-time библиотеки VB, при наличии своей "родной"). Как по мне, вопрос закрыт, но если что-то не понятно, можем вернуЦЦа к нему.

Что касаеЦЦа эмоционального фона - просто игнорируйте не информацию . Да и сами не "подбрасывайте". Если это не являеЦЦа целью разговора, конечно.

Иван FXS
а нужно ... вы читали.
Вот я не понял, что нужно. Задаю вопросы, пытаюсь выяснить. И народ, КМК, вцепился в вопрос потому, что какая-то потенциально интересная идея мелькнула, но не факт, что действительно интересная, и, тем более, (красиво) реализуемая. Некое ожидание чуда, которое нехороший Иван FXS обманывает.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994603
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван FXS
Кстати, статические переменные, имеющие "область видимости" только в пределах процедуры, в которой они объявлены, тоже имеют VarPtr (который, естественно, постоянен.
Ясен перец. Место под них не выделяеЦЦа всякий раз при входе в процедуру и не освобождаеЦЦа при выходе.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994605
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦа,

это же персональный инструментарий, поскольку Святая Инквизиция запрещает
Eolt
2. В VBA нельзя использовать VarPtr и StrPtr, это недокументированная функция, которая может не работать в другой версии Office


И вы сами наверняка понимаете, какой функционал можно строить на указателях. Если набраться окаянства.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994615
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван FXS
это же персональный инструментарий, поскольку Святая Инквизиция запрещает
Eolt
2. В VBA нельзя использовать VarPtr и StrPtr, это недокументированная функция, которая может не работать в другой версии Office
Возможно Святая Инквизиция имеет ввиду Office for Mac? (Сарказм, если что)
Святая Инквизиция не может быть святее Папы Римского, а Папа упорно суёт этот инструментарий в библиотеку VBA Офисов с 95-го по 2019 (для Windows), но в доступных в настоящее время официальных эдиктах прокололся лишь раз (насколько я смог найти). Поэтому, как ни странно, Инквизиция формально права. На практике же нет ничего более постоянного, чем временное, да и Папа не очень старался спрятать инструментарий, если уж по меньшей мере факт его существования доступен в Object Browser по выбору пункта контекстного меню "Show Hidden Members".

Иван FXS
И вы сами наверняка понимаете, какой функционал можно строить на указателях. Если набраться окаянства.
Даже боюсь предположить. Тем паче - в языке, который очень неглупые люди специально (в меру тогдашних технологических возможностей и маркетинговой политики) проектировали так, чтобы было как можно меньше небезопасных операций с указателями. А Вы секрет храните.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994628
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
ЦЦа,

это же персональный инструментарий, поскольку Святая Инквизиция запрещает
Eolt
2. В VBA нельзя использовать VarPtr и StrPtr, это недокументированная функция, которая может не работать в другой версии Office

...


Зачем пересказывать чужие глупости ?

Какой вообще смысл задавать вопросы, если вы даже приблизительно не способны распознать
каков смысл того, что вам сказали, потому не способны отличить откровенную чепуху от содержательных ответов.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994634
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
...
И вы сами наверняка понимаете, какой функционал можно строить на указателях. Если набраться окаянства.


И да, второй раз сообщаю вам, что для того, чтобы "строить функционал на указателях" copymemory вовсе не обязательно нужен.

Совсем-совсем для начала, разберитесь с тем, что такое byref, который у вас есть по умолчанию, и чем он отличается от Byval.
Без этого рановато про "вы сами понимаете".

Форма лица должна соответствовать содержанию черепной коробки.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994641
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
ЦЦа,

во-первых, пост был не про "задачу", а про странное поведение VBA, которое видно через библиотечную функцию VarPtr.


Нет никакого "странного поведения" VBA.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994647
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
Кстати, статические переменные, имеющие "область видимости" только в пределах процедуры, в которой они объявлены, тоже имеют VarPtr (который, естественно, постоянен.


Хватит уже нести бред! Переменная с модификатором Static - это глобальная переменная, доступ к которой возможен только из метода в котором она объявлена. Введена просто для удобства программирования. Учите матчасть наконец.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994652
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

это опять блямс, и опять неожиданный.
чета крючит тебя к вечеру.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994653
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Eolt,

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


В чем блямс? То что я справочник по VBA цитирую?
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994655
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

"глобальная переменная" и "переменная глобального времени жизни" - не синонимы.
первое означает именно видимость, доступность по обращению, а второе - способ выделения памяти под переменную.

Переменная может независимо обладать обоими качествами.
Для static перемененных "внутри процедуры" память выделяется не на стеке процедуры,
что обеспечивает "глобальность" их времени жизни , но не глобальную видимость.

PS
Ты бы водички попил, что-ли, прежде чем "справочник цитировать"...
Охолонись.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994657
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

Простите, я что должен открывать бесплатную школу для агрессивных недоучек? У меня как бы и своих дел достаточно...
Что касается той глупости которую вы здесь написали, то все глобальные переменные в VB - статические.
Собственно для иллюстрации достаточно этого примера:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
                  (ByVal lpDest As Any, ByVal lpSource As Any, ByVal cbCopy As Long)

Sub Main()
 
 Dim loc As String
 
 CopyMemory VarPtr(loc), StaticVarPtr, 4
 MsgBox "Содержимое переменной Var из метода StaticVarPtr: " & loc
 
 loc = ""
 
 CopyMemory VarPtr(loc), DimVarPtr, 4
 MsgBox "Содержимое переменной Var из метода DimVarPtr: " & loc

End Sub

Function StaticVarPtr() As Long
 Static var As String
 var = "Привет мир!"
 StaticVarPtr = VarPtr(var)
End Function

Function DimVarPtr() As Long
 Dim var As String
 var = "Привет мир!"
 DimVarPtr = VarPtr(var)
End Function



Переменная с модификатором Static - в VB/VBA глобальная (может быть прочитана и перезаписана из любого метода в коде), локальна она только на этапе компиляции кода.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994658
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Боюсь пример сверху слишком сложен будет. Нужно проще. Вот код:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Option Explicit
Dim GlobalVar As Long


Sub Main()
    Static StaticVar As Long
    Dim LocalVar As Long

    MsgBox _
      "Адрес глобальной  переменной: " & VarPtr(GlobalVar) & vbCrLf _
    & "Адрес статической переменной: " & VarPtr(StaticVar) & vbCrLf _
    & "Адрес локальной переменной:  " & VarPtr(LocalVar)

End Sub



После компиляции видно, что глобальная переменная и "статическая" находятся рядом друг с другом в памяти. Это все потому, что с точки зрения виртуальной машины VB эти два типа равнозначны.
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994660
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

бросить бы тебе пить по ночам, прежде чем мечтать об открытии школы или "агрессивности самоучек".

Мели что хочешь.
Тебе можно.
дружелюбный программист-исследователь
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994662
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
                  (ByVal lpDest As Any, ByVal lpSource As Any, ByVal cbCopy As Long)
Sub Main()
    Dim LocalVar As Long
    
    Call Ne_nado_umnichati(VarPtr(LocalVar))

    MsgBox "LocalVar = " & LocalVar


End Sub

Sub Ne_nado_umnichati(ptr As Long)

    Dim xxxx As Long
    Let xxxx = 12345
    
    CopyMemory ptr, VarPtr(xxxx), 4
End Sub
...
Рейтинг: 0 / 0
Почему VBA размещает строки в обратном порядке?
    #39994663
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или даже так

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
                  (ByVal lpDest As Any, ByVal lpSource As Any, ByVal cbCopy As Long)
Sub Main()
    Dim LocalVar As Long
    
    Dim mistika As Long
    Let mistika = 2 * VarPtr(LocalVar) + 54321
    
    Call Ne_nado_umnichati(mistika)


    MsgBox "LocalVar = " & LocalVar


End Sub

Sub Ne_nado_umnichati(ptr As Long)

    Dim xxxx As Long
    Let xxxx = 12345
    
    Dim mistika As Long
    Let mistika = (ptr - 54321) / 2
    
    CopyMemory mistika, VarPtr(xxxx), 4
End Sub
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Почему VBA размещает строки в обратном порядке?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]