|
|
|
| Люди помогите,
есть excel таблица нужно из неё выбрать оределённые поля и внести их в accessтаблицу.
Например из „Excel.xls“ поля D2-G5 в „Accessdaten.db“ солбец „имя“. (посредством VBA) | |
|
| |
|
|
|
| открыть книгу, скопировать данные в переменную, занести в базу Рекордсет - запрос на добавление.... | |
|
| |
|
|
|
| Привет Ирча спасибо за ответ честно признаюсь поняла не всё потому что не сталкивалась с VBA есть небольшой опыт с SQL к тому же учу информатику на немецком поэтому например несовсем ястно что значит „открыть книгу“.
В общем история такая моему шефу на фирме где я делаю практику приспичило cделать двухсторонний датентрансфер из ненормированной Excelтаблици в AccessДБ посредством VBA. Может подскажешь как в VBA открыть таблицу и какие функции, как можно взять содержимое определённой ячейки и занести данные в ДБ.
Спасибо заранее Ника. | |
|
| |
|
|
|
| создать связанную тбл, и запрос на добавление | |
|
| |
|
|
|
|
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "tbl1", "c:\Excel.xls", False, "d2:g5"
|
Этот метод не подойдет? | |
|
| |
|
|
|
| Привет спасибо за предложенное решение Пока не пробовала но всё равно спасибо. Я тут кое что другое нарыла. Почемуто не работает хотя ошибок не даёт.
Public Sub GetFromExcel()
On Error GoTo er
Dim cmd As ADODB.Command
Dim obj As Object
Dim st As Variant
Dim curGrp As String
Dim i As Long
Dim rst As ADODB.Recordset
Set cmd = New ADODB.Command
'Tabelle löschen
cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = "DROP TABLE probe"
cmd.CommandType = adCmdText
cmd.Execute 'Tabelle neu erzeugen
cmd.CommandText = "CREATE TABLE probe (Id int,Name nvarchar(255),Nummer int, Zeichen nvarchar(255))"
cmd.Execute
Set cmd = Nothing 'Zeiger auf Null setzen (zeigt nicht mehr auf ein Objekt)
Set rst = New ADODB.Recordset 'Recordset Objekt erzeugen
rst.Open "SELECT * FROM probe", CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic
'Tabelle fuhlen
Set obj = GetObject("H:\excel_probe1.xls") 'Pfad zu excel Tabelle
i = 2
'st = obj.ActiveSheet.Range("a" & i & ":a" & i) curGrp = vbNullString
Do While st <> vbNullString
rst.AddNew
'If st Like "?*" Then
'If st <> curGrp Then
'curGrp = st
'End If
'i = i + 1
st = obj.ActiveSheet.Range("a" & i & ":a" & i)
If st = vbNullString Then Exit Do
'End If
'rst![NGroup] = curGrp
rst![Name] = st
rst![Nummer] = CLng(obj.ActiveSheet.Range("b" & i & ":b" & i))
rst![Zeichen] = CLng(obj.ActiveSheet.Range("c" & i & ":c" & i))
rst.Update
i = i + 1
'st = obj.ActiveSheet.Range("a" & i & ":a" & i)
Loop
Set obj = Nothing
rst.Close
Set rst = Nothing
Exit Sub
er:
Select Case Err.Number
Case -2147217865
Resume Next
Case Else
MsgBox Err.Number & vbCrLf & Err.Description
End Select
End Sub | |
|
| |
|
|
|
|
| если имя эксель файла известно и если известен диапазон ячеек, то проще (и, наверное, правильнее) это делать из аксеса | |
|
| |
|
|
|
| Есть такая замечательная вещь - OLE.Automation
Dim XL As Object
Dim XLBook As Object
Dim XLSheet As Object
XL=CreateObject("Excel.Application")
XLBook=XL.Workbooks.Open(Полное имя книги Эксель в кавычках)
XLSheet=XLBook.Worksheets(Имя или номер листа)
далее используем XLSheet.Cells(НомерСтроки,НомерСтолбца).Value для чтения значений из ячеек. | |
|
| |