Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA

Автор: Yuk
Дата сообщения: 23.01.2007 18:46
Pantera3587
Там же практически все расписано.
1-й аргумент - что искать, например A2:B2 из 1-й таблицы. 2-й вариант функции позволяет использовать разделенные области, например А2,B3. В данном примере скорее всего не актуально.
2-й - где искать. $A$2:$B$6 из 2-й таблицы
3-й - не обязательный, если есть дупликаты, что выбирать.
Функция возвращает номер строки из 2-й таблицы.
Затем используем функцию ИНДЕКС для вытаскивания значения.
Автор: Pantera3587
Дата сообщения: 23.01.2007 19:26
SERGE_BLIZNUK
1. Добавление столбца нежелательно, т.к. с добавление столбца эта задача решается легко.
2. Именно значения
3. желательно прислать файлик.

Yuk
Т.е. это должно выглядеть так?
=MatchRange(ЗП!A1:B1;КолЧас!$A$1:$C$5;0)
Эту функцию прописала на листе Общая в ячейке D1. Выдал #Error
Т.к. выдает ошибку, то используя Индекс
=ИНДЕКС(КолЧас!A1:C5;MatchRange(A1:B1;КолЧас!$A$1:$C$5;0);3)
выдает Знач.
Автор: SERGE_BLIZNUK
Дата сообщения: 23.01.2007 19:36
Pantera3587
Цитата:
=MatchRange(ЗП!A1:B1;КолЧас!$A$1:$C$5;0)

замените на
=MatchRange(ЗП!A1:B1;КолЧас!$A$1:$B$5;0)
всё заработает ;-)) (количество аргументов для поиска должно равняться количеству столбцов в области поиска).
Однако, это не решает вашу задачу - так как вам нужны :
Цитата:
2. Именно значения
продолжаем разговор?... ;-))


Автор: Yuk
Дата сообщения: 23.01.2007 19:39
Pantera3587

Цитата:
Выдал #Error

Потому что судя по 2-й таблице в 3-м отделе Петрова не числится.
А здесь должно быть КолЧас!$A$1:$B$5 (не С).
Цитата:
число столбцов в обоих областях должно совпадать
Автор: SERGE_BLIZNUK
Дата сообщения: 23.01.2007 19:41
да, формулу индекса замените на
Код: =ИНДЕКС(КолЧас!$A$1:$C$5;matchrange(A1:B1;КолЧас!$A$1:$B$5;0);3)
Автор: Yuk
Дата сообщения: 23.01.2007 19:48
Или
Код: =ИНДЕКС(КолЧас!$C$1:$C$5;matchrange(A1:B1;КолЧас!$A$1:$B$5;0);1)
Автор: SERGE_BLIZNUK
Дата сообщения: 23.01.2007 22:15
Pantera3587
Несмотря на то, что я считаю, что 1) задача уже решена и 2) формулы здесь быстрее, красивее и надежнее, тем не менее, скажу свою любимую фразу:
Раз Вы задали вопрос в этом топике - получите программку
переноса данных Sub ZP_and_Hour_to_CommonList() [more]
Код:
Sub ZP_and_Hour_to_CommonList()

' !! Внимание! Все три нижеуказанных листа должны существовать в книге!
Set w1 = ThisWorkbook.Worksheets("ЗП")
Set w2 = ThisWorkbook.Worksheets("КолЧас")
Set w3 = ThisWorkbook.Worksheets("Общая")

ZpMaxColumn = 3 ' сколько столбцов переносить с листа "ЗП" в "Общая"

' Очищаем полностью лист "Общая"
w3.UsedRange.ClearContents

Row1 = w1.UsedRange.Row
Row2 = Row1 + w1.UsedRange.Rows.Count

KhourRow1 = w2.UsedRange.Row
KhourRow2 = KhourRow1 + w2.UsedRange.Rows.Count

'начинаем перенос данных из "ЗП" -> "Общая"
For k = Row1 To Row2
For i = 1 To ZpMaxColumn
w3.Cells(k, i).Value = w1.Cells(k, i).Value
Next i
' для поиска берём первые два столбца из w1
F1 = w1.Cells(k, 1).Value
F2 = w1.Cells(k, 2).Value

' поиск кол-ва часов в листе "КолЧас" по F1/F2
For r = KhourRow1 To KhourRow2
found = False
If (F1 = w2.Cells(r, 1).Value) And (F2 = w2.Cells(r, 2).Value) Then
found = True
Exit For
End If
Next r
If found Then
w3.Cells(k, ZpMaxColumn + 1).Value = w2.Cells(r, 3).Value
Else
w3.Cells(k, ZpMaxColumn + 1).Value = "#Кол.часов не найдено!"
End If

Next k

End Sub
Автор: alin
Дата сообщения: 24.01.2007 08:09

Код: Private Sub OK_Click()
Dim strDate As String
strDate = Format(Now(), "dd.mm")
If Sheets(1).Name <> strDate Then
ActiveSheet.Copy Before:=Sheets(1)
Sheets(1).Select
Sheets(1).Name = strDate
End If
Sheets(1).Select
Sheets(1).Name = strDate
Range("F3:AD25", "F27:AD31").ClearContents
Unload Me
End Sub
Автор: The okk
Дата сообщения: 24.01.2007 09:08
alin
Цитата:
Каким образом можно избежать удаления данных, если лист с именем "dd.mm" уже существует.


Код: Sub Test(strDate As String)
Dim wsList As Worksheet
On Error Resume Next
Set wsList = Worksheets(strDate)
If Err <> 0 Then _
strDate = InputBox("Лист с именем" & strDate & _
" уже существует", "Ошибка", _
"Введите другое имя")
Call YourMacro(strDate As String)
End Sub
Автор: alin
Дата сообщения: 24.01.2007 12:55
The okk
Не выходит каменный цветок.… Предлагает сразу ввести имя нового листа.
Может я, не правильно написал вопрос?
PS: На рабочем листе имеется кнопка при нажатии, на которую появляется форма с предупреждением: «Создание нового листа!», на ней две кнопки «Отмена» (закрывает форму) и «ОК»:

Код: Private Sub OK_Click()
Dim strDate As String
strDate = Format(Now(), "dd.mm")
If Sheets(1).Name <> strDate Then
ActiveSheet.Copy Before:=Sheets(1)
Sheets(1).Select
Sheets(1).Name = strDate
End If
Sheets(1).Select
Sheets(1).Name = strDate
Range("F3:AD25", "F27:AD31").ClearContents
Unload Me
End Sub
Автор: The okk
Дата сообщения: 24.01.2007 13:33
alin

Цитата:
Предлагает сразу ввести имя нового листа.

А что требуется? Ну, не хочешь вводить имя листа, тогда убери вообще строчку
strDate = MsgBox и поставь вместо нее Exit Sub.
Автор: alin
Дата сообщения: 24.01.2007 15:33
The okk

Цитата:
strDate = MsgBox и поставь вместо нее Exit Sub

Удаляются данные текущего дня (strDate = Format(Now(), "dd.mm")).
Тоже происходит если не ввести имя листа и нажать Сancel.
Автор: Yuk
Дата сообщения: 24.01.2007 16:14
alin
Пропиши лист перед Range.


Добавлено:
A какой код на Cancel?
Автор: alin
Дата сообщения: 24.01.2007 16:37
Yuk

Цитата:
A какой код на Cancel?

Подробнее...

Цитата:
Пропиши лист перед Range.

Как это сделать? Я очень плохо разбираюсь в VBA.


Автор: Pantera3587
Дата сообщения: 24.01.2007 17:56
Yuk
Спасибо за функцию. Сначала не заработала, но потом все-таки заработала. Классная штука.

SERGE_BLIZNUK
Зря грешишь на свою программку. У меня работает превосходно. Попоробовала применить для другой таблицы, где больше столбцов, классно работает и быстро. Спасибо за помощь. Теперь буду разбираться с ней. Только объясни, пожайлуста (т.к. может я неправильно понимаю значение), значение вот этих операторов:

KhourRow1 и found
Автор: Yuk
Дата сообщения: 24.01.2007 18:50
alin
Как я понял, кнопка Cancel должна просто закрыть форму.
Код: UnloadMe
Автор: SERGE_BLIZNUK
Дата сообщения: 24.01.2007 19:29
Pantera3587
Цитата:
У меня работает превосходно
ну значит не зря писал...
Цитата:
KhourRow1 и found
ты неправильно выразилась - это не операторы, это - Переменные (variables) туда мы заносим какие-то значения, потом их используем
KhourRow1 - туда заносится номер первой используемой строки на листе w2 (КолЧас)
скорее всего - у вас это будет 1
KhourRow2 - количесвто заполненных строк на листе w2
Эти переменные нужны для организации цикла по всем строкам в листе w2 (для поиска)
found - это переменная, в которую заносится ИСТИНА (True) если мы нашли соответствие для переносимых в данны момент данных с листа w1(ЗП)
Если в ней ЛОЖЬ (False) - значит кол-во часов не найдено...
Автор: alin
Дата сообщения: 24.01.2007 20:15
Yuk
Такая вот проблема.
The okk Предложил свой вариант.
Кнопка Cancel присутствует в InputBox. Дело в том что этот вариант не корректно работает.
Автор: alin
Дата сообщения: 25.01.2007 08:21
Yuk
Огромное спасибо! Подправил код по Вашей рекомендации, теперь, если лист с именем «dd.mm» существует и запустить макрос, то ничего не происходит:

Код: Private Sub OK_Click()' - создания листа на новые сутки.
Dim strDate As String
strDate = Format(Now(), "dd.mm")
If Sheets(1).Name <> strDate Then
ActiveSheet.Copy Before:=Sheets(1)
Sheets(1).Range("F3:AD25", "F27:AD31").ClearContents
Sheets(1).Name = strDate
End If
Unload Me
End Sub
Автор: ViktorA
Дата сообщения: 25.01.2007 16:35
Помогите советом плиз.
Есть задачка: MS Excel 97, кропотливо выстроен вид анкеты, предназначенной для последующего сканирования, распознавания, необходимо обработать события нажатия клавиш так, чтобы в текущую ячейку попал 1 й символ и курсор перешел в следующую ячейку, дошел до крайности, не смог решить проще, никак не пойму как обработать event нажатия клавиши е сли нет объекта управления, нашел код управления через API:
'***************************************************************************
'* *
'* MODULE NAME: CHECK KEYBOARD BUFFER *
'* *
'* AUTHOR & DATE: STEPHEN BULLEN, Stephen@oaltd.co.uk *
'* *
'* DESCRIPTION: This module contains an example of using Windows API *
'* calls to check the state of the message buffer. The *
'* example includes a check for "Key down" events, which *
'* are used to stop a loop. The module contains functions*
'* for both 16-bit and 32-bit versions of Windows. *
'* *
'***************************************************************************

Option Base 1
Option Explicit

'********************************************************************
'* DECLARE WINDOWS 16-BIT API CALLS *
'********************************************************************

'Type to hold the x and y coordinates of the mouse pointer
Type POINTAPI16
x As Integer
y As Integer
End Type

'Type to hold the Windows message information
Type MSG16
hWnd As Integer 'the window handle of the app
message As Integer 'the type of message (e.g. keydown, keyup etc)
wParam As Integer 'stores the key code
lParam As Long '?
time As Long 'time when message posted
pt As POINTAPI16 'coordinate of mouse pointer when messahe posted
End Type

'Find the window handle for this instance of Excel
Declare Function FindWindow16 Lib "User" Alias "FindWindow" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Integer

'Look in the message buffer for a message
Declare Function PeekMessage16 Lib "User" Alias "PeekMessage" (lpMsg As MSG16, _
ByVal hWnd As Integer, ByVal wMsgFilterMin As Integer, ByVal wMsgFilterMax As Integer, _
ByVal wRemoveMsg As Integer) As Integer

'Translate the message from a virtual key code to a ASCII code
Declare Function TranslateMessage16 Lib "User" Alias "TranslateMessage" (lpMsg As MSG16) As Integer


'********************************************************************
'* DECLARE WINDOWS 32-BIT API CALLS *
'********************************************************************

'Type to hold the x and y coordinates of the mouse pointer
Type POINTAPI32
x As Long
y As Long
End Type

'Type to hold the Windows message information
Type MSG32
hWnd As Long 'the window handle of the app
message As Long 'the type of message (e.g. keydown, keyup etc)
wParam As Long 'stores the key code
lParam As Long '?
time As Long 'time when message posted
pt As POINTAPI32 'coordinate of mouse pointer when messahe posted
End Type

'Find the window handle for this instance of Excel
Declare Function FindWindow32 Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

'Look in the message buffer for a message
Declare Function PeekMessage32 Lib "USER32" Alias "PeekMessageA" (lpMsg As MSG32, _
ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, _
ByVal wRemoveMsg As Long) As Long

'Translate the message from a virtual key code to a ASCII code
Declare Function TranslateMessage32 Lib "USER32" Alias "TranslateMessage" (lpMsg As MSG32) As Long


'********************************************************************
'* Demo procedure to test the keyboard checking function *
'********************************************************************

Sub procTestKey()

Dim iCount As Integer
Dim sKey As String

Application.DisplayStatusBar = True

iCount = 0

While sKey <> ""
'Just loop until a key is pressed
Do
'iCount = iCount + 1
'Application.StatusBar = "Loop: " & iCount & " Press any key to stop."
Application.StatusBar = "Режим ввода данных, для окончания нажмите Esc."

'******************************************
'* INSERT YOUR CODE HERE *
'******************************************

'Call the appropriate routine to check the keyboard buffer
If InStr(1, Application.OperatingSystem, "32") = 0 Then
sKey = funCheckKey16
Else
sKey = funCheckKey32
End If
Loop Until sKey <> ""

'Display the key pressed
'MsgBox "You pressed: " & sKey

If sKey <> "" And sKey <> "" And sKey <> "&" And sKey <> "'" And sKey <> "(" And sKey <> "%" And sKey <> "" And sKey <> "" Then 'Esc BackSpase 4Arrows CapsLock Shift
ActiveCell.Value = sKey
ActiveCell.Offset(0, 1).Select
End If
If sKey = "" Then 'BackSpase
ActiveCell.Value = " "
ActiveCell.Offset(0, -1).Select
ActiveCell.Value = " "
End If

If sKey = "&" Then 'ArrowUp &
ActiveCell.Offset(-1, 0).Select
End If
If sKey = "'" Then 'ArrowRight '
ActiveCell.Offset(0, 1).Select
End If
If sKey = "(" Then 'ArrowDown (
ActiveCell.Offset(1, 0).Select
End If
If sKey = "%" Then 'ArrowLeft %
ActiveCell.Offset(0, -1).Select
End If




Wend
Application.StatusBar = False

End Sub


'***************************************************************************
'* *
'* FUNCTION NAME: CHECK KEYBOARD BUFFER - 16 BIT *
'* AUTHOR & DATE: STEPHEN BULLEN, 9 APRIL 1996 *
'* *
'* DESCRIPTION: This function uses Windows API calls to check if there *
'* are any 'Key down' messages for the application. If *
'* there are some, it returns the key pressed as a string *
'* *
'***************************************************************************

Function funCheckKey16() As String

'Dimension variables
Dim msgMessage As MSG16
Dim iHwnd As Integer
Dim i As Integer

'Dimension Windows API constants
Const WM_CHAR As Integer = &H102
Const WM_KEYDOWN As Integer = &H100
Const PM_REMOVE As Integer = &H1
Const PM_NOYIELD As Integer = &H2

'Default to no key pressed
funCheckKey16 = ""

'Get the window handle of this application
iHwnd = FindWindow16("XLMAIN", Application.Caption)

'See if there are any "Key down" messages
i = PeekMessage16(msgMessage, iHwnd, WM_KEYDOWN, WM_KEYDOWN, PM_REMOVE + PM_NOYIELD)

'If so ...
If i <> 0 Then
'... translate the virtual key code to a character code ...
i = TranslateMessage16(msgMessage)

'... and get the character code message
i = PeekMessage16(msgMessage, iHwnd, WM_CHAR, WM_CHAR, PM_REMOVE + PM_NOYIELD)

'Return the character of the key pressed
funCheckKey16 = Chr(msgMessage.wParam)
End If

End Function


'***************************************************************************
'* *
'* FUNCTION NAME: CHECK KEYBOARD BUFFER - 32 BIT *
'* AUTHOR & DATE: STEPHEN BULLEN, 9 APRIL 1996 *
'* *
'* DESCRIPTION: This function uses Windows API calls to check if there *
'* are any 'Key down' messages for the application. If *
'* there are some, it returns the key pressed as a string *
'* *
'***************************************************************************

Function funCheckKey32() As String

'Dimension variables
Dim msgMessage As MSG32
Dim iHwnd As Long
Dim i As Long

'Dimension Windows API constants
Const WM_CHAR As Long = &H102
Const WM_KEYDOWN As Long = &H100
Const PM_REMOVE As Long = &H1
Const PM_NOYIELD As Long = &H2

'Default to no key pressed
funCheckKey32 = ""

'Get the window handle of this application
iHwnd = FindWindow32("XLMAIN", Application.Caption)

'See if there are any "Key down" messages
i = PeekMessage32(msgMessage, iHwnd, WM_KEYDOWN, WM_KEYDOWN, PM_REMOVE + PM_NOYIELD)

'If so ...
If i <> 0 Then
'... translate the virtual key code to a character code ...
i = TranslateMessage32(msgMessage)

'... and get the character code message
i = PeekMessage32(msgMessage, iHwnd, WM_CHAR, WM_CHAR, PM_REMOVE + PM_NOYIELD)

'Return the character of the key pressed
funCheckKey32 = Chr(msgMessage.wParam)
End If

End Function
___________________________
работает конечно, но блин неужели нельзя проще?
Автор: Troitsky
Дата сообщения: 25.01.2007 17:24
alin
Не понимаю к чему тут формы приплели - все вроде на мессаджбоксах легко делается?
Код: Sub Macros1()
Resp = MsgBox("Создание нового листа. Продолжить?", _
vbYesNo + vbQuestion, _
"Создание нового листа")
If Resp = vbYes Then ' нажимаем "Да"
strDate = Format(Now(), "dd.mm")
If Sheets(1).Name <> strDate Then
' собственно, создаем лист с таким именем
ActiveSheet.Copy Before:=Sheets(1)
Sheets(1).Name = strDate
Else
Resp = MsgBox("Лист уже существует! Заполнить лист заново?", _
vbYesNo + vbExclamation, _
"Лист уже существует!")
If Resp = vbNo Then Exit Sub ' нажимаем "Нет"
End If
' заполняем лист
Sheets(1).Cells(1, 1).Value = Rnd(100)
Else ' нажимаем "Нет"
Exit Sub
End If
End Sub
Автор: alin
Дата сообщения: 26.01.2007 07:38
Troitsky
Вот это да! Класс! Все мои формы полетели...

Цитата:
Если можно, помогите сформировать макрос такого плана: в 01:58:00ч планировщик WinXP открывает книгу и на рабочий лист заносятся данные (Macros1), книга закрывается. Какой код необходимо добавить перед Macros1, для того, чтобы лист на новые сутки сам автоматически сформировался, если пользователь забыл это сделать?
PS:Будет ли корректным код, если добавить перед Macros1 эту часть:

Код: Dim strDate As String
strDate = Format(Now(), "dd.mm")
If Sheets(1).Name <> strDate Then
ActiveSheet.Copy Before:=Sheets(1)
Sheets(1).Range("F3:AD25", "F27:AD31").ClearContents
Sheets(1).Name = strDate
End If

Автор: Troitsky
Дата сообщения: 26.01.2007 13:15
alin

Код: Private Sub Workbook_Open()
Dim strDate As String
strDate = Format(Now(), "dd.mm")
If Sheets(1).Name <> strDate Then
ActiveSheet.Copy Before:=Sheets(1)
Sheets(1).Name = strDate
Sheets(1).Range("F3:AD25", "F27:AD31").ClearContents
End If
ActiveWorkbook.Close True
End Sub
Автор: alin
Дата сообщения: 26.01.2007 14:21
Troitsky
Да, новый лист формируется путем копирования старого и очистки области.
PS: В 01:58:00ч планировщик WinXP открывает книгу 01:58:20ч срабатывает макрос (по времени) данные из одного столбца копируются в другой, книга закрывается. Через каждые два часа планировщик открывает книгу, и макрос, который отрабатывает по времени, копирует данные в нужный столбец. Если я вставлю вышеприведенный код в макрос, который сработает в 01:58:20ч – будет ли он работать корректно в случаях: а) лист создан пользователем; б) лист не создан пользователем?
Извиняюсь за настойчивость, дело в том, что ночью я редко бываю на работе.
Автор: Troitsky
Дата сообщения: 26.01.2007 15:05
alin

Цитата:
Если я вставлю вышеприведенный код в макрос, который сработает в 01:58:20ч – будет ли он работать корректно в случаях: а) лист создан пользователем; б) лист не создан пользователем?
Извиняюсь за настойчивость, дело в том, что ночью я редко бываю на работе.

А неужели для того, чтобы проверить нужно обязательно ждать до 01:58:20?

По поводу скрипта vbs: можно что-то типа такого использовать:
Код: strDate = Day(Now()) & "." & Month(Now())

Set objExcel = CreateObject("Excel.Application")

With objExcel
    .Workbooks.Open "test.xls"
    With objExcel.ActiveWorkbook
        If .Sheets(1).Name <> strDate Then
            .ActiveSheet.Copy .Sheets(1)
            .Sheets(1).Name = strDate
            .Sheets(1).Range("F3:AD25", "F27:AD31").ClearContents
        End If
        .Close True
    End With
End With

Set objExcel = Nothing
Автор: alin
Дата сообщения: 26.01.2007 15:49
Troitsky

Цитата:
По поводу скрипта vbs

А куда его прикрутить нужно? Если его запустить с макросом, то он предлагает сохранить копию "test.xls" и в файле "Копия test.xls" происходит создание нового листа и очистка области.
Автор: ViktorA
Дата сообщения: 26.01.2007 15:58
Неужели никто не поможет?

Как проще обрабатывать нажатия клавиш при вводе текста в ячейку?
Автор: Troitsky
Дата сообщения: 26.01.2007 16:05
alin

Цитата:
А куда его прикрутить нужно? Если его запустить с макросом, то он предлагает сохранить копию "test.xls" и в файле "Копия test.xls" происходит создание нового листа и очистка области.

Создай текстовый файл, скопируй туда скрипт, сохрани его с именем бла-бла-бла.vbs. рядом положи книгу test.xls, с которой и будут выполняться операции. запусти файл бла-бла-бла.vbs


Добавлено:
Т.е. в такого типа скрипте ты можешь записать все что хочешь с книгой проделать, не используя макросы. Только планировщик должен не книгу уже запускать, а сам скрипт.
Автор: Yuk
Дата сообщения: 26.01.2007 16:33
Кому интересно, обратите внимание на новую статью с CITForuma вверху.
WinApi. Лекция из курса "Основы офисного программирования и язык VBA"
Очень интересная тема. В шапку.
Автор: Pantera3587
Дата сообщения: 26.01.2007 19:42
Выделяем какой-нибудь диапазон. Вопрос:
Как обозначить в коде выделенный диапазон: начало и конец?
Sub Диапазон()
Range(начало диапазона, конец диапазона)
End Sub
Диапазон может выделятся каждый раз разный.

Добавлено:
Написала такой код, в котором набирая дату можно определить квартал. Код такой:
Sub Вычисление_квартал()
Dim Дата As Date

Дата = InputBox("Введите дату: ")
MsgBox "Соответствует " & _
Квартал(Дата)
If Дата >= "01.01.2006" And Дата < "01.04.2006" Then
ActiveCell = "1 квартал"
ActiveCell.Offset(0, 1) = Дата
End If
If Дата >= "01.04.2006" And Дата < "01.07.2006" Then
ActiveCell = "2 квартал"
ActiveCell.Offset(0, 1) = Дата
End If
If Дата >= "01.07.2006" And Дата < "01.10.2006" Then
ActiveCell = "3 квартал"
ActiveCell.Offset(0, 1) = Дата
End If
If Дата >= "01.10.2006" And Дата < "01.01.2007" Then
ActiveCell = "4 квартал"
ActiveCell.Offset(0, 1) = Дата

End If

End Sub
Но этот код работает только при указании конкретно года. Можно ли как-то сделать так, чтобы даты и месяц не изменялись, а год изменялся, т.е. сейчас 2007 год, поэтому, чтобы работал этот код, нужно в нем изменить 2006 на 2007, а 2007 на 2008.
Хотелось бы, чтобы год менялся автоматически.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Стоит ли переходить с Билдера на Делфи?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.