VBA.
Нужно присвоить ячейке (например поле 3, строка 4) конкретное значение. Посоветуйте пожалуйста как можно указать данную координату
Возникает естественный вопрос: Зачем? Access не Excel все-таки, ячейка Access есть отображение поля записи в базе данных, соответственно надо менять значение в базе данных.silatal писал(а):VBA.
Нужно присвоить ячейке (например поле 3, строка 4) конкретное значение. Посоветуйте пожалуйста как можно указать данную координату
SLIM писал(а):Строкой в одну ячейку? Т.е. вся строка будет в одной ячейке?
Вряд ли получится, может размер не позволить это раз.
Во-вторых самое первое что пришло в голову - делать строку с накомплением из екселя и вставлять эту строку в ячейку Аccess....ну что-то типа того
SLIM писал(а):А что, всегда будет 20 значений? Или ты хочешь динамически это делать? Т.е при необходимости добавлять новые столбцы?
silatal писал(а):
Да, нужно динамически - диапазон СТРОК скачет.
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
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
alibek писал(а):Пока не возникнет понимания, что в Access нет ячеек и строк, любые объяснения бесполезны.
silatal писал(а):alibek писал(а):Пока не возникнет понимания, что в Access нет ячеек и строк, любые объяснения бесполезны.
ты лучше код посмотри, а не название темы.
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
Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 36