AccessTr.neT

Tam Versiyon: Excel'den Veri Alma Aktarma
Şu anda arşiv modunu görüntülemektesiniz. Tam versiyonu görüntülemek için buraya tıklayınız.
Sayfalar: 1 2
Arkadaşlar merhaba,
Excel'e veri aktarıyorum aktarım sonrasında birincil anahtar olan (NO) otomatik sayıda gidiyor. Aktardığım excel'den tekrar access'e veri çektiğimde otomatik sayı alanı (NO) sorun çıkartıyor. Kısacası aşağıdaki kullandığım kodda nasıl bir değişiklik yapmalııyımki no alanını excele aktarmasın.
On Error GoTo Err_Komut33
Dim Klasor
Klasor = CurrentProject.Path & "\" & "BİLGİTAKİP (EXCEL OLARAK YEDEK)-" & " " & Format(Date, "mm/dd/yy") & " " & Format(Time, "hh-mm-ss-AM/PM") & ".xls"
If MsgBox("Aktarma işlemi,programın bulunduğu yere kayıt olacak,oradan bulun,Verileri Excele aktarmak istiyor musunuz? ", 36, "EXCELE VERI AKTARIMI") = 6 Then
DoCmd.TransferSpreadsheet acExport, 8, "PERSONEL", Klasor, True, "ÇEKER BİLGİLER"

MsgBox "Dikkat programın bulunduğu yere Aktarma işlemi Tamamlandı", 0, "EXCELE VERI AKTARIMI"
Exit_Komut33:
    Exit Sub
Err_Komut33:
    MsgBox Error$
    Resume Exit_Komut33
End If
doğrudan tablo yerine otomatik alan dışındakilerin yer aldığı bir sorgu kullanmayı deneyebilirsiniz
Bu kodda sadece aktaracağım alanları belirteceğim bir değişiklik yapamazmıyız.
Dim dbs As DAO.Database
Dim rsSQL As DAO.Recordset
Dim strSQL As String
Dim xlApp As Excel.Application
Dim xlSh As Excel.Worksheet
Dim objWkb As Excel.Workbook
Dim i As Long

Set xlApp = New Excel.Application

With xlApp
            .Visible = True
            Set objWkb = .Workbooks.Add
            Set xlSh = objWkb.Worksheets(1)
            xlSh.Name = "İş listesi"
End With

xlApp.Visible = True
xlApp.ActiveWindow.WindowState = xlMaximized

xlSh.Cells(1, 2).value = "Tür"
xlSh.Cells(1, 3).value = "Konu1"
xlSh.Cells(1, 4).value = "Konu2"
xlSh.Cells(1, 5).value = "Mevcut Durum"
xlSh.Cells(1, 6).value = "Açıklama"


Set dbs = CurrentDb
strSQL = "SELECT * FROM srg_plan"
Set rsSQL = dbs.OpenRecordset(strSQL, dbOpenSnapshot)

If rsSQL.RecordCount > 0 Then
rsSQL.MoveFirst
rsSQL.MoveLast
End If


rsSQL.MoveFirst
If rsSQL.RecordCount > 0 Then
For i = 0 To rsSQL.RecordCount - 1



xlSh.Cells(GSayi + i + 1, 2).value = rsSQL!tur
xlSh.Cells(GSayi + i + 1, 3).value = rsSQL!konu1
xlSh.Cells(GSayi + i + 1, 4).value = rsSQL!konu2
xlSh.Cells(GSayi + i + 1, 5).value = rsSQL!mevcutdurum
xlSh.Cells(GSayi + i + 1, 6).value = rsSQL!bildirimaciklama

rsSQL.MoveNext
Next i
End If



rsSQL.Close
Set rsSQL = Nothing

Şeklinde kod kullanılabilir, ancak @berduşun da belirttiği gibi istenilen alanları içeren sorgu oluşturulup excele aktarmak daha mantıklı.
(23/06/2020, 10:39)edacan19 yazdı: [ -> ]DoCmd.TransferSpreadsheet acExport, 8, "PERSONEL", Klasor, True, "ÇEKER BİLGİLER"
bu kodda kullanılan mantık sorgu yada tablonun tümüdür, excelden alırken sayfanın sınırlarını belirleyebiliyorsunuz ama bildiğim kadarıyla Access tabloları için öyle bir şey yapılamıyor sadece aktarılacak veriler ve alanlar için uygun bir sorgu olusturup onu aktarırsınız ama excelden alırken zaten alanı belirleyebiliyorsunuz, içer aktarırken otomatik alanı devre dışı bırakıp almayı deneyebilirsiniz.
Sorguyla denedim hata kaydı oluşturuyor. çekmeye çalıştığım Excel tablosunu ekledim.
Sayfalar: 1 2