|
|
|
ЛИКБЕЗ или с миру по нитке...!
|
|||
|---|---|---|---|
|
#18+
============================================================== Вот решил более углубленно изучать VBA (жизнь требует), набрал разной литературы по VBA, включая и интернет, и помощь и т.д. Вроде все понятно, но есть моменты , что никак не могу догнать самостоятельно , нужны примеры, советы, подсказки и т.д. Я думаю что это будет интересно не только мне, но и еще таким же, кто сам изучает VBA, наверняка и они зададут вопросы! И хотелось бы, чтобы здесь вопросы были именно по непонятным моментам помощи или справочника VBA ! И я очень надеюсь, что найдутся те , кто сможет ответить нам!? =========================================================== =========================================================== =========================================================== А вот один из вопросов. Так приводится пример в справочнике! Процедура с параметром по ссылке : ---------------------------------------------------------- Sub Proc (MyNumber As Integer) .............. End Sub ============================================= Процедура с параметром по значению : ---------------------------------------- Sub Proc (ByVal MyNumber As Integer) ................. End Sub ---------------------------------------- (При передаче по ссылке процедура имеет дело с той переменной, которая передана ей в качестве параметра, и может изменить ее значение. Если это необходимо избежать, следует использовать ByVal.) ============================================================ Как это практически пощупать. Кто может обьяснит или впишите выше в прцедуры вместо точек простейшие коды, чтобы наглядно было, не могу без примеров понять! А я запущу прогу и сразу разберусь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2005, 21:20:08 |
|
||
|
ЛИКБЕЗ или с миру по нитке...!
|
|||
|---|---|---|---|
|
#18+
Sub Proba() MyValue = 10 Call Process(MyValue) Cells(1, 1) = MyValue MyValue = 10 Call Process1(MyValue) Cells(1, 2) = MyValue End Sub Sub Process(MyValue) MyValue = 50 End Sub Sub Process1(ByVal MyValue) MyValue = 50 End Sub Запусти Proba Посмотри на ячейки в одной будет 10 а в другой 50 Вот и вся разница При передачи по ссылки передается адрес переменной А при передаче по значению передается копия переменной Sub Proba() MyValue = 10 Process(MyValue) MyNumber1 = 10 Cells(1, 1) = MyValue Process1(MyNumber1) Cells(1, 2) = MyNumber1 End Sub а если запускать так то в обеих ячейках будет 10 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2005, 09:53:18 |
|
||
|
ЛИКБЕЗ или с миру по нитке...!
|
|||
|---|---|---|---|
|
#18+
Здорово, ясно и понятно, спасибо! А вот еще один вопрос. Так приводится пример в справочнике! Мне нужно вставить строку на третью линию в файле, как ее правильно расчитать, как подсчет вообще ведется? Вот методом тыка получил, пропадает скобка ! Где неправильно? '======================================================= БЫЛО: в файле --------------------------------------------- COD: "1341_L_Rad" ; LET: b(1111) c(555) d(0) ; ; ; --------------------------------------------- 'Это в модуле стоит Public Type CodeRec Nam As String * 18 Code As String End Type ' ----------------------- Private Sub CommandButton7_Click() Const Fil As String = "C:\Documents and Settings\USER33\TESTFILE.TXT" Dim TRec As CodeRec Dim FilNum As Integer Dim TItem As Object Dim l, h, w l = 2222 h = 7771 w = 1 'open file FilNum = FreeFile() Open Fil For Random Access Write As FilNum Len = Len(TRec) TRec.Nam = "LET: b(" & l & ") c(" & h & ") d(" & w & ")" 'TRec.Code = TItem.Cells(1, 2) Put FilNum, 2, TRec 'close file Close FilNum End Sub ================================================ СТАЛО: в файле ---------------------------------- COD: "1341_L_Rad" ; LET: b(2222) c(777 d(1) ; ; ; ----------------------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2005, 12:08:42 |
|
||
|
ЛИКБЕЗ или с миру по нитке...!
|
|||
|---|---|---|---|
|
#18+
Дело в String * 18 он записывает только 18 символов а остальное остаётся от предыдущей записи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2005, 13:29:28 |
|
||
|
ЛИКБЕЗ или с миру по нитке...!
|
|||
|---|---|---|---|
|
#18+
Это я понял, что дело в String * 18(два часа игрался), но как же загнать мою запись на третью строчку и что бы она вся читалась!? Каковы правила ? Если я пишу 20 , моя запись уже не на месте! Как я понял это количество символов в записи или что, откуда считать, почему нижние строки на вверх поднимаются, как при DELET? Было бы понятно , если бы назначалось номер строки, отступ и длина записи, а тут ну не пойму ,как это работает!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2005, 14:28:29 |
|
||
|
ЛИКБЕЗ или с миру по нитке...!
|
|||
|---|---|---|---|
|
#18+
Представь что файл это непрерывная лента на которой что-то записано. Ты не можешь ее резать, ты можешь только стирать кусочек записи и писать на это место новый текст. Если при этом новая запись должна быть длиннее стертой - вешаться, топиться и стреляться :) Если тебе нужно работать именно с текстовыми файлами в которых логические записи это строки разной длины... То есть два основных принципа: самый простой в реализации, но медлительный1) По одной копируешь строки из старого файла в новый 2) Заменяешь нужную строку на свою 3) По одной или блоком копируешь оставшиеся строки из старого файла в новый 4) Стираешь старый файл совсем. 5) Переименовываешь новый файл в старое имя. посложнее в реализации, но лучше в работе1) Читаешь весь исходный файл в массив строк 2) Работаешь с массивом строк в памяти 3) Очищаешь старый файл совсем 4) Записываешь отредактированный строки из массива в файлНекоторые языки предоставляют программисту возможность замены конкретных строк в текстовых файлах. На самом деле они обычно работают по второму описаному здесь принципу. С неявным чтением из файла и записью обратно в файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2005, 19:50:16 |
|
||
|
ЛИКБЕЗ или с миру по нитке...!
|
|||
|---|---|---|---|
|
#18+
Спасибо за разяснение, буду пробовать все по очереди! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2005, 23:00:18 |
|
||
|
ЛИКБЕЗ или с миру по нитке...!
|
|||
|---|---|---|---|
|
#18+
Страно как то подсчет ведется!? Например в файле я записал : ---------------------------------- 1234567890 1234567890 1234567890 ------------------------------------ И подсчет ведется так (согласно проги из помощи): На 10 цифр - 12 символов, откуда еще два ? ---1 строка 2 3 - почему эта не четная? 4 6 8 10 12 14 16 18 20 22 --2 строка 24 26 28 30 32 34 36 38 40 42 44 46 ---3 строка 48 50 52 54 56 58 60 62 64 66 68 70 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2005, 09:30:31 |
|
||
|
ЛИКБЕЗ или с миру по нитке...!
|
|||
|---|---|---|---|
|
#18+
========================================================== Public Type CodeRec Nam As String * 3 Code As String End Type ----------------------------------------- Private Sub CommandButton1_Click() Const Fil As String = "C:\Documents and Settings\USER33\TESTFILE.TXT" Dim TRec As CodeRec Dim FilNum As Integer 'open file FilNum = FreeFile() Open Fil For Random Access Write As FilNum Len = Len(TRec) TRec.Nam = "AAA" ' Put FilNum, 4, TRec Close FilNum End Sub ============================================ Я вставляю "ААА" в файл и не могу понять логику пдсчета, (по моему какая то прогрессия!?) ============================================== Put FilNum, 1, TRec Nam As String * 3 AAA 11111 ------ начало с нуля 2222222222 3333333333 4444444444 5555555555 ------------------------------------------- Put FilNum, 2, TRec Nam As String * 3 1111111AAA 2222222222---- начало с 8 3333333333 4444444444 5555555555 ------------------------------------------ Put FilNum, 3, TRec Nam As String * 3 1111111111 22AAA 222---- начало с 13 3333333333 4444444444 5555555555 ------------------------------------------ Put FilNum, 4, TRec Nam As String * 3 1111111111 222222222AAA 33333333---- начало с 20 4444444444 5555555555 =========================================== Ну и как мне тут понять? Кубик-Рубик какой то!!!! Кто в этом силен???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2005, 11:59:18 |
|
||
|
ЛИКБЕЗ или с миру по нитке...!
|
|||
|---|---|---|---|
|
#18+
следи за Len = Len(TRec) - это длина записи и чтения длина твоего объекта равна 7 если она равна 7 то при Put FilNum, 3, TRec получится 1111111111 22AAA 222---- """начало с 13""" - начало не с 13-го а с 14-го т.к перевод каредки на следующую строку тоже символ строки перемещаются потому-что затираются символы перевода каретки а что-такое "CodeRec"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2005, 14:03:18 |
|
||
|
ЛИКБЕЗ или с миру по нитке...!
|
|||
|---|---|---|---|
|
#18+
vkodorа что-такое "CodeRec"? А это программа немного другая была, я подправил а это осталось! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2005, 14:27:01 |
|
||
|
ЛИКБЕЗ или с миру по нитке...!
|
|||
|---|---|---|---|
|
#18+
Дайте пожалуйста кто-нибудь ссылку, где можно подробно почитать о модуле, о классах с примерами, чтобы сначала сам разобрался, а уж потом вопросы возникнут! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 23:12:37 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=33275913&tid=2185724]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 336ms |

| 0 / 0 |
