|
автор: Alex (01.08.2006 в 00:00) |
|
| У меня имеется таблица (Excel) вида:
ГРУППА1
Наименование1 Цена К-во
Наименование2 Цена К-во
Наименование3 Цена К-во
ГРУППА2
Наименование4 Цена К-во
Наименование5 Цена К-во
Наименование6 Цена К-во
и т.д.
Как сделать связанную (или через импорт) таблицу в Access вида:
ГРУППА1 Наименование1 Цена К-во
ГРУППА1 Наименование2 Цена К-во
ГРУППА1 Наименование3 Цена К-во
ГРУППА2 Наименование4 Цена К-во
ГРУППА2 Наименование5 Цена К-во
ГРУППА2 Наименование6 Цена К-во
???
Мне не важно будет ли это две связанные таблицы (группы и товары) или одна таблица Товары с текстовым полем Группа.
Каждый раз вручную править таблицу в Excel-е не очень хочется.
Если кто может помочь - заранее благодарен! | |
|
| |
|
автор: ?????? (01.08.2006 в 00:00) |
|
| Re: Связь таблиц Немного непонятна задача. Это надо сделать разово, а потом вести это дело в access или все изменения должны отображаться и в Excel? | |
|
| |
|
автор: Alex (02.08.2006 в 00:00) |
|
| Re[1]: Связь таблиц Нет, не разово. Рассказываю с самого начала... У нас компьютерная фирма, учет ведется в 1С. Нужно сделать "считалку" (приблуда которая позволяет расчитывать стоимость конфигурации). Для считалки, понятно, нужно иметь список комплектующих с ценами и количествами, т.е. из 1С я делаю экспорт в справочника товаров в екселевский файл, изменить форму отчета я не могу и никто в нашей конторе тоже не может, т.е. только то что есть (см.выше). | |
|
| |
|
автор: ?????? (02.08.2006 в 00:00) |
|
| Re[1]: Связь таблиц Vba Вам в руки :)
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
удалим таблицу
cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = "DROP TABLE FromExcel"
cmd.CommandType = adCmdText
cmd.Execute
создадим её заново
cmd.CommandText = "CREATE TABLE FromExcel (NGroup nvarchar(50),Naim nvarchar(255),Price double, Kolvo int)"
cmd.Execute
Set cmd = Nothing
Set rst = New ADODB.Recordset
rst.Open "SELECT * FROM FromExcel", CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic
начнём заполнять таблицу
Set obj = GetObject("c: 1.xls") место, где лежит файл
i = 1
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![Naim] = st
rst![Price] = CDbl(obj.ActiveSheet.Range("b" & i & ":b" & i))
rst![Kolvo] = 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 | |
|
| |
|
автор: Alex (02.08.2006 в 00:00) |
|
| Re[1]: Связь таблиц Спасибо!
Попробую разобраться | |
|
| |
|
автор: Alex (02.08.2006 в 00:00) |
|
| В принципе код работает, но... в результате я получаю таблицу FromExcel опять же вида:
Группа1 0 0
Наименование1 #.00 #
Наименование2 #.00 #
Наименование3 #.00 #
Группа2 0 0
Наименование4 #.00 #
Наименование5 #.00 #
Наименование6 #.00 #
и т.д. (поле NGroup остается пустым), а мне то надо:
Группа1 Наименование1 #.00 #
Группа1 Наименование2 #.00 #
Группа1 Наименование3 #.00 #
Группа2 Наименование4 #.00 #
Группа2 Наименование5 #.00 #
Группа2 Наименование6 #.00 # | |
|
| |
|
автор: ?????? (02.08.2006 в 00:00) |
|
| Re: В принципе код работает, но... Посмотрите ссылки на ячейки. У меня же нет Вашего Excel-файла. Можно, конечно, выслать его на leo_nid77@mail.ru | |
|
| |
|
автор: Alex (02.08.2006 в 00:00) |
|
| Re[1]: В принципе код работает, но... Если Вас это не затруднит!
Посмотрите пожалуйста!
Буду очень признателен!
Отправил на mail ексельный файлик: Price.zip | |
|
| |