как обратиться к конкретной ячейке access'a

Программирование на Visual Basic for Applications
silatal
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 22.10.2008 (Ср) 10:49

как обратиться к конкретной ячейке access'a

Сообщение silatal » 22.10.2008 (Ср) 10:56

VBA.
Нужно присвоить ячейке (например поле 3, строка 4) конкретное значение. Посоветуйте пожалуйста как можно указать данную координату :(

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: как обратиться к конкретной ячейке access'a

Сообщение Viper » 22.10.2008 (Ср) 11:08

silatal писал(а):VBA.
Нужно присвоить ячейке (например поле 3, строка 4) конкретное значение. Посоветуйте пожалуйста как можно указать данную координату :(
Возникает естественный вопрос: Зачем? Access не Excel все-таки, ячейка Access есть отображение поля записи в базе данных, соответственно надо менять значение в базе данных.
Весь мир матрица, а мы в нем потоки байтов!

silatal
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 22.10.2008 (Ср) 10:49

Re: как обратиться к конкретной ячейке access'a

Сообщение silatal » 22.10.2008 (Ср) 11:11

хорошо. Тогда ставлю вопрос по другому. Нужно из Эксель импортировать столбец, НО! В аксессе этот столбец должен встать строкой.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: как обратиться к конкретной ячейке access'a

Сообщение SLIM » 22.10.2008 (Ср) 11:28

Строкой в одну ячейку? Т.е. вся строка будет в одной ячейке?
Вряд ли получится, может размер не позволить это раз.
Во-вторых самое первое что пришло в голову - делать строку с накомплением из екселя и вставлять эту строку в ячейку Аccess....ну что-то типа того
Пишите жизнь на чистовик.....переписать не удастся.....

silatal
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 22.10.2008 (Ср) 10:49

Re: как обратиться к конкретной ячейке access'a

Сообщение silatal » 22.10.2008 (Ср) 11:31

SLIM писал(а):Строкой в одну ячейку? Т.е. вся строка будет в одной ячейке?
Вряд ли получится, может размер не позволить это раз.
Во-вторых самое первое что пришло в голову - делать строку с накомплением из екселя и вставлять эту строку в ячейку Аccess....ну что-то типа того

Неее. Сори :) Что-то с объяснением у меня туго :)
Покажу на пальцах.
Есть столбец А1 - А20.
И есть таблица в access с полями Поле1, Поле2, Поле3 и т.п.
Нужно чтобы значение А1 появилось в Поле1, значение А2 в Поле2, значение А3 в Поле3.
:)

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: как обратиться к конкретной ячейке access'a

Сообщение SLIM » 22.10.2008 (Ср) 12:34

А что, всегда будет 20 значений? Или ты хочешь динамически это делать? Т.е при необходимости добавлять новые столбцы?
Пишите жизнь на чистовик.....переписать не удастся.....

silatal
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 22.10.2008 (Ср) 10:49

Re: как обратиться к конкретной ячейке access'a

Сообщение silatal » 22.10.2008 (Ср) 12:42

SLIM писал(а):А что, всегда будет 20 значений? Или ты хочешь динамически это делать? Т.е при необходимости добавлять новые столбцы?


Да, нужно динамически - диапазон скачет.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: как обратиться к конкретной ячейке access'a

Сообщение SLIM » 22.10.2008 (Ср) 13:54

Ужас, зачем такое может быть вообще нужно. Где оптимизация базы данных? Это действительно не Exel. Лучшек в Exel прописать что-нибудь чем так извращаться. Представь только - сегодня у тебя 5 записей, завтра 25, после завтра 6, а еще через день - 100. Я вот сижу и не представляю оптимизированную БД в виде таблицы в сто столбцов....ужосссс :roll:
Пишите жизнь на чистовик.....переписать не удастся.....

silatal
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 22.10.2008 (Ср) 10:49

Re: как обратиться к конкретной ячейке access'a

Сообщение silatal » 22.10.2008 (Ср) 14:08

silatal писал(а):
Да, нужно динамически - диапазон СТРОК скачет.


Прошу прощение, голова уже варит с трудом, а руки и за этими мыслями не успевают.
Число столбцов четко 20, а вот строк как бог пошлет (обработать нужно 400 файлов) :)

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: как обратиться к конкретной ячейке access'a

Сообщение SLIM » 22.10.2008 (Ср) 18:51

VBA где используешь в Access или в Exel?
Пишите жизнь на чистовик.....переписать не удастся.....

silatal
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 22.10.2008 (Ср) 10:49

Re: как обратиться к конкретной ячейке access'a

Сообщение silatal » 23.10.2008 (Чт) 3:27

access.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: как обратиться к конкретной ячейке access'a

Сообщение SLIM » 23.10.2008 (Чт) 12:43

Если будет время я попытаюсь написать сам код, но пока что приходит в голову следующее (неотесано и не обработано)
1. Либо все перебираемые файлы находятся в папке и тогда все эти фалы придется программно открывать скорее всего через объект Exel, либо ты указываешь в диалоге какие именно файлы открывать, и соответственно опять таки через объекты Exel
2.После открытия очередного файла --цикл например такой : пока значение ячейки не будет пустым делать следующее...., ну и там по номеру поля в БД заносим значения. Что-то типа того.
3. Что тебе нужно - Библиотека объектов Exel, возможно FSO (для проверки существования файлов и перебора возможно), соответственно средства доступа к БД (Я использую ADO)

Возможно алгоритм не понятен, но опять таки это все необработанно. Просто думать нужно, а щас под рукой нет ничего
Пишите жизнь на чистовик.....переписать не удастся.....

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Re: как обратиться к конкретной ячейке access'a

Сообщение KL » 23.10.2008 (Чт) 14:45

Из-под Аксесса не пишу давно, но если бы я писал нечто подобное из-под Экселя, то наверное это было так:

Код: Выделить всё
Sub Test_Macro()
    ' Ссылка на Microsoft ActiveX Data Objects Library
    Dim cn As ADODB.Connection, rs As ADODB.Recordset
    Dim FieldArray, ValueArray
    Dim rng As Range
    Dim i As Long, nFields As Long
   
    FieldArray = Array("F1", "F2", "F3", "F4", "F5", "F6", "F7")
    nFields = UBound(FieldArray) + 1
   
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
    "Data Source=C:\Users\KL\Desktop\Database1.mdb;"
   
    Set rs = New ADODB.Recordset
    rs.Open "Table1", cn, adOpenKeyset, adLockOptimistic, adCmdTable
   
    With Worksheets(1)
        Set rng = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
    End With
   
    For i = 1 To rng.Rows.Count / nFields
        ValueArray = Application.Transpose(rng.Offset(nFields * i - nFields).Resize(nFields))
        rs.AddNew FieldArray, ValueArray
        rs.Update
    Next i
   
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Sub

Остается переписать это под Аксесс ;-)
Привет,
KL

silatal
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 22.10.2008 (Ср) 10:49

Re: как обратиться к конкретной ячейке access'a

Сообщение silatal » 11.11.2008 (Вт) 5:13

Благодарю за советы. Такой вопрос:

Код: Выделить всё
Sub imp_test()

Dim i As Integer    'столбец в аксессе
Dim str As String   ' переменная
Dim j As Integer    'строка в экселе

Dim xlaProd As Excel.Application
Dim xlwProd As Excel.Workbook
Dim xlsProd As Excel.Worksheet
Dim PathFile As String
Dim DB As DAO.Database
Dim rec As Recordset

Set DB = CurrentDb
Set rec = DB.OpenRecordset("Table")

PathFile = "C:\xz\pp.xls"

Set xlwProd = GetObject(PathFile, "Excel.Sheet")
Set xlsProd = xlwProd.ActiveSheet
       
       i = 1
       
        For j = 1 To 9
        i =i + 1
        rec.AddNew
        str = i
        rec.Fields(str) = xlsProd.Cells(j, 2)   'ячейка в экселе
        rec.Update
        Next j

End Sub


у меня вставляется из экселя в аксесс по диагонали. Немудрено, потому как i =i + 1. Если же i = 1 то все вставится в первый столбец таблицы аксесса. Как правильно задать параметр, чтобы данные вставлялись в строчку?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: как обратиться к конкретной ячейке access'a

Сообщение alibek » 11.11.2008 (Вт) 8:47

Пока не возникнет понимания, что в Access нет ячеек и строк, любые объяснения бесполезны.
Lasciate ogni speranza, voi ch'entrate.

silatal
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 22.10.2008 (Ср) 10:49

Re: как обратиться к конкретной ячейке access'a

Сообщение silatal » 11.11.2008 (Вт) 8:55

alibek писал(а):Пока не возникнет понимания, что в Access нет ячеек и строк, любые объяснения бесполезны.

ты лучше код посмотри, а не название темы. :)

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: как обратиться к конкретной ячейке access'a

Сообщение Sebas » 11.11.2008 (Вт) 11:12

silatal писал(а):
alibek писал(а):Пока не возникнет понимания, что в Access нет ячеек и строк, любые объяснения бесполезны.

ты лучше код посмотри, а не название темы. :)


1. Читаем ещё раз пост alibek`a
2. Думаем.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

dormouse
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 140
Зарегистрирован: 10.01.2007 (Ср) 21:58
Откуда: Волжский

Re: как обратиться к конкретной ячейке access'a

Сообщение dormouse » 07.12.2008 (Вс) 19:27

Код: Выделить всё
Dim rst As Recordset, str As String, i As Byte, fld As String, tdf As TableDef
Set rst = CurrentDb.OpenRecordset("select * from Лист1;")
Set tdf = CurrentDb.TableDefs("table1")
DoCmd.SetWarnings False  'отключаем сообщения о добавлении записей
 
If Not (rst.EOF) Then
    For i = 0 To rst.Fields.Count - 1               'перебор полей в таблице
        While Not (rst.EOF)                         'перебор ячеек в столбце
            If str <> "" Then str = str & ","
            str = str & Nz(rst.Fields(i).Value, 0)  'копируем значение ячейки
            If fld <> "" Then fld = fld & ","
            fld = fld & tdf.Fields(rst.AbsolutePosition).Name  'сохраняем имя поля
            rst.MoveNext
        Wend
        DoCmd.RunSQL "INSERT INTO table1 (" & fld & ") VALUES (" & str & ");" 'вставляем запись
        str = "": fld = ""      'очищаем переменные для следующего цикла
        rst.MoveFirst           'в следующем цикле начинаем перебор с первой записи
    Next
End If
DoCmd.SetWarnings True
VBA, MSA97


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 41

    TopList