VBA Makro ile Access'teki verileri formatlı Excel sayfasına aktarma hatası

1 2 3 4 5
28/09/2016, 07:49

balkan85

Merhaba;

Sayın atoz112,

Alıntı:WindowState ifadesinin olduğu satırlar için,sayısal değerin yerine =xlMaximized ifadesini kullanmak uygun olabilir mi.

dediğiniz gibi yaptım ama maalesef aynı satırda aynı hatayı verdi.

Sayın ozanakkaya,

Öncelikle size de, yorumunuz ve desteğiniz için teşekkür ederim. Ancak maalesef aşağıdaki kod denemesi de aynı sonucu verdi.


MyXL.Application.Visible = True
MyXL.Application.WindowState = 3
MyXL.Parent.Windows(1).Visible = True
MyXL.Parent.ActiveWindow.WindowState = 2

İyi çalışmalar.
28/09/2016, 10:45

atoz112

Sayın balkan85,

Sadece bir hatırlatma olması adına naçizane bir tavsiye olmak üzere;daha önceki mesajlarda örnek uygulama eklemeniz talep edildiğinde yazılı olan özelliklerde olması istenmiştir.(farazi uydurma bilgiler olması kast edilmiştir).

Fakat,excel uygulamanız incelendiğinde görülmektedir ki;içeriğinde gerçek şahıslara ait mevcut bilgiler yer almaktadır.(telefon,email,adres,v.s.gibi).eğer T.C.Kimlik bilgileri de olsaydı,sanırım bu da dahil olacaktı.

Bu nedenle,eklediğiniz örnek uygulamada yer alan gerek Excel dosyanızdaki ve gerekse de eğer mevcutsa Access uygulamanızdaki bu özel bilgileri ya boş bırakmak sureti ile iptal edip içeriğini temizleyiniz ya da bu bilgileri uydurma farazi bilgiler ile değiştiriniz.

Son olarak,bir diğer tavsiye olması adına;uygulamanızda (özellikle,Access uygulamanızda);ille de tablolarınızda tüm kayıtları göstermeniz gerekmemektedir.sadece konudaki taleplerinizin sonuçlarını görebilmek üzere birkaç kayıt (örneğin;4-5 ya da gerekiyorsa 10 kayıt) olması yeterlidir.

Bu önemsiz gibi görünen fakat kendi hallerinde değerlendirildiğinde aslında doğru olması gereken hususlara dair olumlu yaklaşıp uygun görülen düzenlemeleri yapmanız ve uygulamalarınızı yeniden konunuza eklemeniz temennisi ile.elbette ki her zaman olduğu gibi,tercih ve takdir sizindir.

Bilginize…iyi çalışmalar,saygılar.
28/09/2016, 10:55

balkan85

Sayın atoz112;

Uyarınız için çok teşekkür ederim. Access dosyasındaki hassass bilgileri sildim ama Excel'dekileri atlamışım. Hemen ilgili mesajdaki ek dosyayı güncelledim. Kusura bakmayın...

Access'teki verileri tekrar kontrol ettim ama veriler eski tarihli olması nedeniyle ve hangisi işleyişi bozabilir emin olamadığım için sadece 2 satır olarak yine bıraktım.

İyi çalışmalar,
28/09/2016, 11:02

atoz112

Sayın balkan85,

Access'teki verileri tekrar kontrol ettim ama veriler eski tarihli olması nedeniyle ve hangisi işleyişi bozabilir emin olamadığım için sadece 2 satır olarak yine bıraktım.

İfadenize yönelik olarak,Yine bir hatırlatma bilgisi olması adına;
Gerek konu sahipleri ve gerekse de konularınıza katılımcı olacak katılımcılar için,tablolarınızdaki verilerin ne içeriği ve ne de eski bilgiler olması önemli değildir.

Önemli olan;konularınızı açmanıza vesile olan sorunlarınız ya da talepleriniz ile ilgili olarak eklediğiniz örnek uygulamaların incelenmesi aşamalarında sonuçları görebilmek üzere eğer incelemeler neticesinde sonuçların doğru elde edilmesi isteniyorsa - ki bu gerekli olacaktır – o zaman,tablolardaki verilerin olması gerektiği gibi doğru ve boş olmayacak halde dolu olmasını sağlamanız yeterlidir.

Son olarak;
Örnek uygulamanızı inceleyemediğimden dolayı ne yazık ki uygulamanız üzerinden kendi adıma yardımcı olamıyorum.ancak,eğer bazı araştırmalar neticesinde bilgiler edindikçe bunarlı paylaşabiliyorum.

Bilginize…iyi çalışmalar,saygılar.
28/09/2016, 15:02

atoz112

Sayın balkan85,

Bahsettiğiniz talebinize yönelik olarak;
Yine deneme olarak geçerli olması ve tahmini kodlar sayılması adına,ilgili olay yordamı içerisine aşağıdaki kodları ekleyerek deneyiniz.

      Dim MyXL As Excel.Application
      Dim strTemplate As String
     
      Dim strOutPut As String
     
      Dim objBook As Excel.Workbook
     
      Dim objSheet As Excel.Worksheet
   
      strTemplate = "buraya_sablon_excel_dosya_adi_yazilacak" 'ornek: Application.ThisWorkbook.Path & "dosya_adi" & ".xlsx"
      strOutPut = "C:\Users\UMIT.BALKAN\Desktop\Talimat " & Ülke & " ID" & Invoice_ID & " " & Kap_Sayısı & " Kap.xlsx"
      If Dir(strOutPut) <> "" Then
      If MsgBox(strOutPut & " exists" & Chr(13) & Chr(10) & _
               "Yeni dosya oluşturmak için mevcut dosya silinecek," & Chr(13) & Chr(10) & _
               " Devam etmek istiyor musunuz?", vbYesNo) = vbNo Then
             Exit Sub
        Else
        Kill strOutut
       End If
      End if
      FileCopy strTemplate, strOutPut
          Set MyXL = New Excel.Application
          MyXL.Visible = True
          Set objBook = MyXL.Workbooks.Open(strOutPut)
          Set objSheet = objBook.Worksheets(1)
          With objSheet
       .Range("B4").Value = Acente
       .Range("B3").Value = Adı & " " & Soyadı
       .Range("E3").Value = Date
       .Range("B30").Value = Banka
       .Range("B14").Value = Alıcı_Firma_Ünvanı
       .Range("B16").Value = Alıcı_Firma_Adresi
       .Range("B32").Value = Ödeme_Şekli
       .Range("B34").Value = Teslim_Şekli
       .Range("D38").Value = Gross_Weight
       .Range("D39").Value = Net_Weight
       .Range("D40").Value = Kap_Sayısı
       .Range("D41").Value = Invoice_ID
       .Range("B24").Value = Varış_Yeri
       .Range("C43").Value = CI
       .Range("C44").Value = PL
       .Range("C45").Value = PRL
       .Range("C46").Value = CO
       .Range("C48").Value = FORMA
       .Range("C49").Value = CMR
       .Range("C50").Value = AWB
       .Range("B54").Value = Talimat_Notları
          End With

If CI_Onay = True Then
MyXL.worksheets(1).Range("E43").Value = "<- TİCARET ODASI ONAYLI"
End If

If PRL_Onay = True Then
MyXL.worksheets(1).Range("E45").Value = "<- TİCARET ODASI ONAYLI"
End If

        objBook.Save
       
     
OpenEnd:
      On Error Resume Next
          Set objSheet = Nothing
          Set objBook = Nothing
          Set MyXL = Nothing
          Exit Sub
         
OpenErr:
          Select Case Err.Number
              Case 1004, 3265
                  Resume Next
              Case Else
                  MsgBox Err.Number & "  -  " & Err.Description, vbCritical, "Critical error: isExcelSetup()"
                  Resume OpenEnd
          End Select


Bilginize…iyi çalışmalar,saygılar.
28/09/2016, 15:43

balkan85

Merhaba sayın atoz112;


Harikasınız! Mükemmel bir şekilde çalıştı! Öncelikle size; nezaketiniz, desteğiniz, zamanınız ve ilginiz için çok ama çok teşekkür ederim. Harika bir iş çıkardınız. Gerçi hala nasıl oldu tam anlamadım ama önemli değil. Süpersiniz!

Dediğiniz gibi aşağıdaki kod Office 2013 (64 Bit) için çözüm oldu. Nasıl yapılacağını bilmediğim için yapamadım ama konuyu çözüldü olarak işaretleyebilir miyiz? Belki başkalarına da yardımcı olur...

Konuya bakan, okuyan, yorum yapan herkese de ayrıca teşekkür ederim.


     Dim MyXL As Excel.Application
      Dim strTemplate As String
     
      Dim strOutPut As String
     
      Dim objBook As Excel.Workbook
     
      Dim objSheet As Excel.Worksheet
   
      strTemplate = "buraya_sablon_excel_dosya_adi_yazilacak" 'ornek: Application.ThisWorkbook.Path & "dosya_adi" & ".xlsx"
      strOutPut = "C:\Users\UMIT.BALKAN\Desktop\Talimat " & Ülke & " ID" & Invoice_ID & " " & Kap_Sayısı & " Kap.xlsx"
      If Dir(strOutPut) <> "" Then
      If MsgBox(strOutPut & " exists" & Chr(13) & Chr(10) & _
               "Yeni dosya oluşturmak için mevcut dosya silinecek," & Chr(13) & Chr(10) & _
               " Devam etmek istiyor musunuz?", vbYesNo) = vbNo Then
             Exit Sub
        Else
        Kill strOutut
       End If
      End if
      FileCopy strTemplate, strOutPut
          Set MyXL = New Excel.Application
          MyXL.Visible = True
          Set objBook = MyXL.Workbooks.Open(strOutPut)
          Set objSheet = objBook.Worksheets(1)
          With objSheet
       .Range("B4").Value = Acente
       .Range("B3").Value = Adı & " " & Soyadı
       .Range("E3").Value = Date
       .Range("B30").Value = Banka
       .Range("B14").Value = Alıcı_Firma_Ünvanı
       .Range("B16").Value = Alıcı_Firma_Adresi
       .Range("B32").Value = Ödeme_Şekli
       .Range("B34").Value = Teslim_Şekli
       .Range("D38").Value = Gross_Weight
       .Range("D39").Value = Net_Weight
       .Range("D40").Value = Kap_Sayısı
       .Range("D41").Value = Invoice_ID
       .Range("B24").Value = Varış_Yeri
       .Range("C43").Value = CI
       .Range("C44").Value = PL
       .Range("C45").Value = PRL
       .Range("C46").Value = CO
       .Range("C48").Value = FORMA
       .Range("C49").Value = CMR
       .Range("C50").Value = AWB
       .Range("B54").Value = Talimat_Notları
          End With

If CI_Onay = True Then
MyXL.worksheets(1).Range("E43").Value = "<- TİCARET ODASI ONAYLI"
End If

If PRL_Onay = True Then
MyXL.worksheets(1).Range("E45").Value = "<- TİCARET ODASI ONAYLI"
End If

        objBook.Save
       
     
OpenEnd:
      On Error Resume Next
          Set objSheet = Nothing
          Set objBook = Nothing
          Set MyXL = Nothing
          Exit Sub
         
OpenErr:
          Select Case Err.Number
              Case 1004, 3265
                  Resume Next
              Case Else
                  MsgBox Err.Number & "  -  " & Err.Description, vbCritical, "Critical error: isExcelSetup()"
                  Resume OpenEnd
          End Select

İyi günler,
1 2 3 4 5