SSecurity » 15.10.2008 (Ср) 11:09
нашел тут на одном сайте код, который потряс ресурсоемкостью и ошибками
))
- Код: Выделить всё
Private Sub CommandButton1_Click()
Dim MyPath As String 'Путь
Dim MyFileName As String 'Название файл(ов) которые мы будем открывать
Dim MyFileName_ As String 'Название файл(ов) которые мы будем открывать
Dim ID() As Integer 'Массив ID которые по которым мы будет собирать данные
Dim KolID As Integer
Dim KolCells As Integer 'Количество строчек по которым мы будет искать данные
Dim KolRows As Integer 'Количество столбцов по которым мы будет искать данные
Dim ICells As Integer, JCells As Integer, ICellsID ' Счетчикu для цикла
Dim WorkMas() As String
Dim MasStat() As Integer
MyPath_ = "C:\bd\"
MyPath = "C:\xls\"
MyFile = Application.GetOpenFilename("(*.xls),*.xls")
MyFileName = MyFile 'Пишем имя файла в ктором храняться ID
Workbooks.Open(MyFileName).Activate 'Открываем нужную нам книгу
With ActiveWorkbook.ActiveSheet
KolCells = .Cells(1, 1).End(xlDown).Row
KolID = KolCells
ReDim ID(KolCells)
For ICells = 1 To KolCells
ID(ICells) = .Cells(ICells, 1)
' все что есть в первом столбце заносим в массив
Next ICells
End With
ActiveWindow.Close 'Закрываем книгу
MyFileName_ = "BD.xls" 'Пишем имя файла базы данных
Workbooks.Open(MyPath_ & "\" & MyFileName_).Activate 'Открываем нужную нам книгу
With ActiveWorkbook.ActiveSheet
KolCells = .Cells(1, 1).End(xlDown).Row
KolRows = .Cells(1, 1).End(xlToRight).Column
ReDim WorkMas(KolCells, KolRows)
For ICells = 1 To KolCells
For ICellsID = 1 To KolID
If .Cells(ICells, 1) = ID(ICellsID) Then
For JCells = 1 To KolRows
WorkMas(ICells, JCells) = .Cells(ICells, JCells)
' Если тут есть нужный нам ID то заносим его в память
Next JCells
End If
Next ICellsID
Next ICells
End With
ActiveWindow.Close 'Закрываем книгу
' Все что нам надо у нас есть в памяти=))
'Все что есть выводим
ReDim MasStat("20")
For ICells = 1 To KolID
For JCells = 1 To KolRows
If WorkMas(ICells, JCells) = "Значение1" Then MasStat(1) = MasStat(1) + 1
If WorkMas(ICells, JCells) = "Значение2" Then MasStat(2) = MasStat(2) + 1
Cells(ICells, JCells) = WorkMas(ICells, JCells)
Next JCells
Next ICells
End Sub
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)