Тема: Excel. Создание и работа с БД

Здравствуйте!
Нужно создать таблицу(базу данных) в Екселе для хранения, полученной в результате исследования информации. Исследование заключается в следующем: открывается диалоговое окно, в кот нужно ввести необходимые данные для расчетов, нажимается кнопка «Произвести расчеты» и результаты высвечиваются в самой же форме. Это я вроде сделала(код выглядит каряво, но работает) . Так же надо, чтобы и данные, и результаты расчетов заносились на форму, расположенную на листе екселя и предназначенную для распечатки, и в эту таблицу(базу). С формой, думаю, я смогу разобраться, но само словосочетание «база данных» вводит меня в отчаяние.
Помогите, пожалуйста, с созданием БД, вводом в нее данных из UserForm, просмотром  БД и поиском  (пример:завожу фамилию в UserForm, и мне выдается полная инфа о человеке), стиранием и корректированием записей.

Re: Excel. Создание и работа с БД

А когда у вас каникулы начнуться :)
Тут пока вижу два потхода:
1. Обрашаться к xls файлу как к базе данных
2. Бегать по ячейкам при помощи for или while пока не найдем интересующую нас фамилию.
1 Вот примерчик как приконектится к хls как к базе данных

dim cn as new adodb.connection
dim rs as new adodb.recordset
cn.Connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\dbXls.xls;Extended Properties = Excel 10.0;"
...
cn.Open
...
rs.open "Select A.* from [Sheet1$] A", cn, adOpenKeySet, adLockreadOnky
...
rs.close
cn.close

2 А вот примерчик, как пробежаться по ячейкам упустил из-за простоты.

Re: Excel. Создание и работа с БД

Не знаю кого как, а меня в уныние повергает сочетание слов

(базу данных) в Екселе

:(((

2. Бегать по ячейкам при помощи for или while пока не найдем интересующую нас фамилию.

А сразу в запросе прописать WHERE не получится чтоль? Фамилия то наверняка в каком то определенном столбце...
Честно скажу, с Екселем так не обращался...

Re: Excel. Создание и работа с БД

> SmeL
каникулы уже начались, прост я решила заранее лабы делать. И вобще, мне действительно хотелось бы разобраться в VBA, а в течение семестра это очень трудно осуществить, времени мало.
А по поводу базы, все вышеописанное должно осуществляться в одной книге(и форма, и база и источник, и т.д.)

Re: Excel. Создание и работа с БД

> VK
Поясню именно для Вас :)

Тут пока вижу два потхода:

Что то смахивает на то, что тут два варианта, один из них через Select, второй пробегать по ячейкам.

Re: Excel. Создание и работа с БД

> SmeL
А, сразу не догнал :))
Тогда есть еще и третий - поиск по листу, программный, разумеется :)

Re: Excel. Создание и работа с БД

> VK
это через Find что ли?

Re: Excel. Создание и работа с БД

Ага, как раз метод .Find применительно к Worksheet или Cells имел в виду.

Re: Excel. Создание и работа с БД

Народ, помогите с удалением записей из базы, созданной в Excel
Вот здесь коды создания и поиска записей, может кто знает, как стирать найденные записи так, чтобы не оставалось пустой строки
И что имеется ввиду под понятием «возможность просмотра БД»?

 Private Sub CommandButton1_Click()
  ' поиск по Ф
  With Sheets("База данных")
    ' сортировка...
   yend = .Cells(65536, 1).End(xlUp).Row
   .Columns("A:R").Sort Key1:=.Cells(4, 1), Order1:=xlAscending, _
              Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
       Orientation:=xlTopToBottom
            ' последняя строка
    i = 0  ' счетчик строк с одинаковой Ф
    Set r1 = .Range(.Cells(4, 1), .Cells(yend, 1))  ' от первой до последней
    Set rf = r1.Find(TextBox_FIO.Text, LookIn:=xlValues, LookAt:=xlWhole) ' поиск по Ф
    If Not rf Is Nothing Then
      y = rf.Row
      Do While .Cells(y, 1) = TextBox_FIO.Text
        i = i + 1
        mes1 = .Cells(y, 1)
        mes2 = .Cells(y, 2)
        mes3 = .Cells(y, 3)
        mes4 = .Cells(y, 4)
        mes5 = .Cells(y, 5)
        mes6 = .Cells(y, 6)
        mes7 = .Cells(y, 7)
        mes8 = .Cells(y, 8)
        mes9 = .Cells(y, 9)
        mes10 = .Cells(y, 10)
        mes11 = .Cells(y, 11)
        mes12 = .Cells(y, 12)
        mes13 = .Cells(y, 13)
        mes14 = .Cells(y, 14)
        mes15 = .Cells(y, 15)
        mes16 = .Cells(y, 16)
        mes17 = .Cells(y, 17)
        mes18 = .Cells(y, 18)
        y = y + 1
      Loop
      ' вывод в форму...
If mes3 = "M" Then
Pol_M.Value = -1
Pol_W.Value = 0
ElseIf mes3 = "W" Then
Pol_W.Value = -1
Pol_M.Value = 0
End If
TextBox_Vozr.Value = mes2
TextBox_Lev_dlina.Value = mes4
TextBox_lev_shir.Value = mes5
TextBox_Lev_Tolw.Value = mes6
TextBox_Prav_Dlina.Value = mes7
TextBox_Prav_Shir.Value = mes8
TextBox_Prav_Tolw.Value = mes9
Label_V_PD_2.Caption = mes10
Label_V_PD_3.Caption = mes11
Label_Prav_Dol.Caption = mes12
Label_V_LD_2.Caption = mes13
Label_V_LD_З.Caption = mes14
Label_Lev_Dol.Caption = mes15
Label_Ob_V_2.Caption = mes16
Label_Ob_V_3.Caption = mes17
Label_V_Ob.Caption = mes18
    Else
      MsgBox "Данных о " & Me.TextBox_FIO.Text & " нет...", vbCritical, ""
    End If
  End With
End Sub
 Private Sub CommandButton2_Click()
' сортируем...
  ' ищем И,
  ' если нашли, ищем Возраст,
  ' запоминаем номер строки...
  ' если нет такого Им , то запись в конец листа
  Application.StatusBar = "Запись, ждите..."
  With Sheets("База данных")
     yend = .Cells(65536, 1).End(xlUp).Row
     ' сортировка...
    .Columns("A:R").Sort Key1:=.Cells(4, 1), Order1:=xlAscending, _
       Key2:=.Cells(4, 2), Order2:=xlAscending, _
             Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
       Orientation:=xlTopToBottom
           ' последняя строка
    yy = yend + 1                                   ' указатель куда записывать
    Set r1 = .Range(.Cells(1, 1), .Cells(yend, 1))  ' от первой до последней
    Set rf = r1.Find(Me.TextBox_FIO.Text, LookIn:=xlValues, LookAt:=xlWhole) ' поиск по Ф
    If Not rf Is Nothing Then
      ' такая запись уже есть...
      y = rf.Row ' первая с такой Ф
      Set r2 = .Range(.Cells(y - 3, 2), .Cells(yend, 2)) ' от первой Ф до последней
      Set rf = r2.Find(Me.TextBox_Vozr.Text, LookIn:=xlValues, LookAt:=xlWhole) ' поиск по Возр
      If Not rf Is Nothing Then
        ' такая Ф и возр уже есть...
          yy = rf.Row ' строка с такой Ф И О        ' меняем указатель куда записывать...
          If MsgBox("Данные о " & .Cells(yy, 1) & " " & .Cells(yy, 2) & " " & " уже есть" & " " & "перезаписываем ?", vbQuestion + vbOKCancel, "") = vbCancel Then Exit Sub
        End If
      End If
  End With
  Call Записать(yy)   ' записать...
  MsgBox "Готово", vbInformation, ""
End Sub
Sub Записать(y)
With Sheets("База данных")
    If Pol_M.Value = -1 Then
.Cells(y, 3).Value = "M"
ElseIf Pol_W.Value = -1 Then
.Cells(y, 3).Value = "W"
End If
.Cells(y, 1).Value = TextBox_FIO.Text
.Cells(y, 2).Value = TextBox_Vozr.Text
.Cells(y, 4).Value = TextBox_Lev_dlina.Value
.Cells(y, 5).Value = TextBox_lev_shir.Value
.Cells(y, 6).Value = TextBox_Lev_Tolw.Value
.Cells(y, 7).Value = TextBox_Prav_Dlina.Value
.Cells(y, 8).Value = TextBox_Prav_Shir.Value
.Cells(y, 9).Value = TextBox_Prav_Tolw.Value
.Cells(y, 10).Value = Label_V_PD_2.Caption
.Cells(y, 11).Value = Label_V_PD_3.Caption
.Cells(y, 12).Value = Label_Prav_Dol.Caption
.Cells(y, 13).Value = Label_V_LD_2.Caption
.Cells(y, 14).Value = Label_V_LD_З.Caption
.Cells(y, 15).Value = Label_Lev_Dol.Caption
.Cells(y, 16).Value = Label_Ob_V_2.Caption
.Cells(y, 17).Value = Label_Ob_V_3.Caption
.Cells(y, 18).Value = Label_V_Ob.Caption
  End With
  Application.StatusBar = ""
End Sub

Re: Excel. Создание и работа с БД

Mypppka пишет:

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

Базы данных я так и не увидел, но вот как удалять строку.

    Range("A15").Select
    Selection.Delete Shift:=xlUp