Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / ЛИКБЕЗ или с миру по нитке...! / 13 сообщений из 13, страница 1 из 1
17.09.2005, 21:20:08
    #33275102
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ЛИКБЕЗ или с миру по нитке...!
==============================================================
Вот решил более углубленно изучать VBA
(жизнь требует), набрал разной литературы
по VBA, включая и интернет, и помощь и т.д.
Вроде все понятно, но есть моменты , что никак
не могу догнать самостоятельно , нужны примеры,
советы, подсказки и т.д. Я думаю что это будет
интересно не только мне, но и еще таким же, кто
сам изучает VBA, наверняка и они зададут вопросы!
И хотелось бы, чтобы здесь вопросы были именно по
непонятным моментам помощи или справочника VBA !
И я очень надеюсь, что найдутся те , кто сможет ответить
нам!?
===========================================================
===========================================================
===========================================================

А вот один из вопросов. Так приводится пример в справочнике!

Процедура с параметром по ссылке :
----------------------------------------------------------
Sub Proc (MyNumber As Integer)

..............

End Sub
=============================================

Процедура с параметром по значению :
----------------------------------------
Sub Proc (ByVal MyNumber As Integer)

.................

End Sub
----------------------------------------
(При передаче по ссылке процедура имеет дело
с той переменной, которая передана ей в качестве параметра,
и может изменить ее значение. Если это необходимо избежать,
следует использовать ByVal.)
============================================================
Как это практически пощупать. Кто может обьяснит или
впишите выше в прцедуры вместо точек простейшие коды,
чтобы наглядно было, не могу без примеров понять!
А я запущу прогу и сразу разберусь!
...
Рейтинг: 0 / 0
19.09.2005, 09:53:18
    #33275913
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ЛИКБЕЗ или с миру по нитке...!
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
...
Рейтинг: 0 / 0
19.09.2005, 12:08:42
    #33276325
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ЛИКБЕЗ или с миру по нитке...!
Здорово, ясно и понятно, спасибо!

А вот еще один вопрос. Так приводится пример в справочнике!
Мне нужно вставить строку на третью линию в файле,
как ее правильно расчитать, как подсчет вообще ведется?
Вот методом тыка получил, пропадает скобка ! Где неправильно?

'=======================================================
БЫЛО: в файле
---------------------------------------------
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)
;
;
;
-----------------------------------
...
Рейтинг: 0 / 0
19.09.2005, 13:29:28
    #33276543
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ЛИКБЕЗ или с миру по нитке...!
Дело в String * 18
он записывает только 18 символов а остальное остаётся от предыдущей записи
...
Рейтинг: 0 / 0
19.09.2005, 14:28:29
    #33276726
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ЛИКБЕЗ или с миру по нитке...!
Это я понял, что дело в String * 18(два часа игрался), но как же
загнать мою запись на третью строчку и что бы она вся читалась!?
Каковы правила ? Если я пишу 20 , моя запись уже не на месте! Как я понял
это количество символов в записи или что, откуда считать, почему нижние
строки на вверх поднимаются, как при DELET?
Было бы понятно , если бы назначалось номер строки, отступ и длина записи,
а тут ну не пойму ,как это работает!!!
...
Рейтинг: 0 / 0
19.09.2005, 19:50:16
    #33277544
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ЛИКБЕЗ или с миру по нитке...!
Представь что файл это непрерывная лента на которой что-то записано. Ты не можешь ее резать, ты можешь только стирать кусочек записи и писать на это место новый текст. Если при этом новая запись должна быть длиннее стертой - вешаться, топиться и стреляться :)
Если тебе нужно работать именно с текстовыми файлами в которых логические записи это строки разной длины... То есть два основных принципа:
самый простой в реализации, но медлительный1) По одной копируешь строки из старого файла в новый
2) Заменяешь нужную строку на свою
3) По одной или блоком копируешь оставшиеся строки из старого файла в новый
4) Стираешь старый файл совсем.
5) Переименовываешь новый файл в старое имя. посложнее в реализации, но лучше в работе1) Читаешь весь исходный файл в массив строк
2) Работаешь с массивом строк в памяти
3) Очищаешь старый файл совсем
4) Записываешь отредактированный строки из массива в файлНекоторые языки предоставляют программисту возможность замены конкретных строк в текстовых файлах. На самом деле они обычно работают по второму описаному здесь принципу. С неявным чтением из файла и записью обратно в файл.
...
Рейтинг: 0 / 0
19.09.2005, 23:00:18
    #33277655
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ЛИКБЕЗ или с миру по нитке...!
Спасибо за разяснение, буду пробовать все по очереди!
...
Рейтинг: 0 / 0
20.09.2005, 09:30:31
    #33277879
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ЛИКБЕЗ или с миру по нитке...!
Страно как то подсчет ведется!? Например в файле я записал :
----------------------------------
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
...
Рейтинг: 0 / 0
20.09.2005, 11:59:18
    #33278333
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ЛИКБЕЗ или с миру по нитке...!
==========================================================
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
===========================================
Ну и как мне тут понять? Кубик-Рубик какой то!!!!
Кто в этом силен????
...
Рейтинг: 0 / 0
20.09.2005, 14:03:18
    #33278873
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ЛИКБЕЗ или с миру по нитке...!
следи за Len = Len(TRec) - это длина записи и чтения
длина твоего объекта равна 7
если она равна 7 то при
Put FilNum, 3, TRec
получится
1111111111
22AAA 222---- """начало с 13""" - начало не с 13-го а с 14-го т.к перевод каредки на следующую строку тоже символ

строки перемещаются потому-что затираются символы перевода каретки

а что-такое "CodeRec"?
...
Рейтинг: 0 / 0
20.09.2005, 14:27:01
    #33278977
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ЛИКБЕЗ или с миру по нитке...!
vkodorа что-такое "CodeRec"?

А это программа немного другая была, я подправил а это осталось!
...
Рейтинг: 0 / 0
21.09.2005, 23:12:37
    #33282548
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ЛИКБЕЗ или с миру по нитке...!
Дайте пожалуйста кто-нибудь ссылку, где можно подробно почитать о модуле,
о классах с примерами, чтобы сначала сам разобрался, а уж потом вопросы
возникнут!
...
Рейтинг: 0 / 0
22.09.2005, 09:17:26
    #33282802
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ЛИКБЕЗ или с миру по нитке...!
авторhttp://www.firststeps.ru/vba/excel/r.php?20
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / ЛИКБЕЗ или с миру по нитке...! / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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