• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Kapalı dosyadan veri çağırma

Katılım
12 Şubat 2011
Mesajlar
15
Excel Vers. ve Dili
Excel 2007 Türkçe
Arkadaşlar geçen sene Excel Forumdan muygun arkadaşımın yardımıyla oluşturduğumuz, başka bir dosyadan veri ve resim çağıran excel dosyasında sanırım kodları doğru düzenleyemediğim için sürekli bir kilitlenme sorunu yaşıyorum. Yaşadığım sorun şu; kodları data dosyasında büyük küçük harf ayrımı dahil olduğu gibi girmediğimde , girilen kod data dosyasında olmadığında yada kodları doğru girsem bile iki satır arasına ekleme yahut satırda değişiklik yapmak istediğimde program kilitliyor kendini. Örnek dosyaları ekliyorum, "Resim" dosyasını C ' ye atarak denemek gerekiyor. Yardımcı olursanız sevinirim
 

Ekli dosyalar

Sorunuz anlaşılmıyor, hangi dosyada ne yapmak istedinizi örnek yardımıyla açıklayın.
 
Kilitlenme sorunu

Gönderdiğim dosyada "Fiyat" sayfasında kod, isim, ölçü , adet , fiyat vs içeren satırlar var. Ben sadece kodu girip entere bastığımda excel dosyası otomatik olarak c:/resim/data dosyasından o koda ait ismi ,ölçüyü, fiyatı alıp dosyada gereken hücreye ekliyor. Ama ben kodu eksik yada yanlış girdiğimde, yada iki satır arasına satır açıp yeni bir ürün eklediğimde excel dosyası kilitleniyor ve kapanıyor. Ben yanlış kod girdiğimde yada ilave yapacağım zaman programın kilitlenmeden benim düzeltmeme yada satır eklememe imkan vermesini istiyorum. Ekte gönderdiğim "Resim" kalsörünü C sürcüsüne kopyalayıp, resimleri ve data dosyasını içine atarak örnek excel dosyasını çalıştırıp makroyu çaşlıştırarak kodlarda değişiklik yaparsanız sıkıntıyı görmüş olacaksınız.
 
Son düzenleme:
Bu kodu, eskisi ile değiştirin.
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [A2:H65536]) Is Nothing Then Exit Sub
    If Target.Count > 1 Then Exit Sub
    If Target.Column = 2 And Target <> "" Then
    
    On Error Resume Next
        Son = Application.ExecuteExcel4Macro("COUNTA('C:\Resim\[Data.xls]Sayfa1'!C2)")
        Range(Cells(ActiveCell.Row, 3), Cells(ActiveCell.Row, "H")).ClearContents
    On Error GoTo 0
    
    For X = 2 To Son
        If Target.Text = Application.ExecuteExcel4Macro("'C:\Resim\[Data.xls]Sayfa1'!R" & X & "C2") Then
        Cells(Target.Row, "C") = Application.ExecuteExcel4Macro("'C:\Resim\[Data.xls]Sayfa1'!R" & X & "C3")
        Cells(Target.Row, "D") = Application.ExecuteExcel4Macro("'C:\Resim\[Data.xls]Sayfa1'!R" & X & "C4")
        Cells(Target.Row, "E") = Application.ExecuteExcel4Macro("'C:\Resim\[Data.xls]Sayfa1'!R" & X & "C5")
        Cells(Target.Row, "G") = Application.ExecuteExcel4Macro("'C:\Resim\[Data.xls]Sayfa1'!R" & X & "C6")
        Cells(Target.Row, "H") = Application.ExecuteExcel4Macro("'C:\Resim\[Data.xls]Sayfa1'!R" & X & "C7")
        Say = Say + 1
        Exit For
        End If
    Next
    End If
End Sub
 
Hamitcan bey;
Öncelikle sağolun araya satır ekleme ve satır üzerinde kod değiştirmemle ilgili sorunlarım çözüldü. Şuan yanlışlıkla "data" dosyasında bulunmayan bir kod girdiğimde yada kodun ilkharfini küçük harf girdiğimde excel dosyasını kilitliyor ve "ExecuteExcel4Macro" ile ilgili bir hata raporu yayınlıyor. Ayrıca girdiği her satırdan sonraki satırı silmesini engelleyebilirmiyiz , doğru girilmiş satırları da siliyor. Ayırdığınız zaman için tekrar teşekkür ederim.
 
Data dosyasını sayfa olarak *.sınıf donanımı" dosyası içine eklesek olur mu ? Hatanın nereden kaynaklandığını bulamadım. Ama dediğim gibi olursa; dosya hem hızlı çalışacak hem de kodlar basitleşecek.
 
Öncelikle vakit ayırıyorsunuz teşekkür ederim bunun için.
Data dosyamız bütün ürün bilgilerini ve fiyatlarını kapsayan bir dosya , amacımız müşterimizin istediği ürünün bilgilerini ordan alıp teklif haline dönüştürüp resimle birlikte sunmak. Data dosyasını ifade ettiğiniz şekliyle kullanamamız zor. Sadece kodu eklediğimiz satırdan sonraki satırı silmesini engelleyebilmemiz mümkün mü? Bunu yapabilirsek yeterli olur.
 
Dosyanızı biraz değiştirdim. Amacım, hatayı kaynakta halletmekti. Ürünlerinizi bir ComboBox içine aldım böylece hatalı kod girmenizi engelledim. ComboBox, B22:B50 aralığında çalışmaktadır. Eğer müşterilerinize, bu dosyayı gönderiyorsanız, kodları biraz daha genişletebiliriz. Şimdilik bir deneyin, eksiklerine bakarız.
 
Gönderdiğiniz dosyayı açıp makroyu etkinleştirdiğimde dosya uzun süre donuyor ve şu satırlarla ilgili hata mesajı veriyor.

Private Sub Workbook_Activate()
Sayfa3.ComboBox1.Clear
Son = Application.ExecuteExcel4Macro("COUNTA('C:\Resim\[Data.xls]Sayfa1'!c1)")
For i = 3 To Son + 5
Sayfa3.ComboBox1.AddItem ExecuteExcel4Macro("'C:\Resim\[Data.xls]Sayfa1'!R" & i & "C2" & "") Next
End Sub


devama tıklayıp devam ettiğimizde de ComboBox' larda yaptığımız değişiklikler satıra yansımıyor. Daha önce gönderdiğiniz kodlarda sadece bir sonraki satırı silmesini iptal edebilirsek o haliyle kullanabiliriz. Sizi de çok yormamış oluruz, sağolun zaman ayırdığınız için.
 
Evet şimdi farkettim, bir de bunu deneyin.
 
Hamitcan bey dosyayı çalıştırmaya başlarken açılışta hata vererek ve bekleterek açıyor, kutular çalışıyor ama bu sefer "görsel" sayfasındaki resim çağırma makrosu doğru çalışmıyor. Normalde görsel sayfasında boş bir hücrede delete tuşuna bastığımızda ürün resimlerini c:/resim kalsöründen çağırması gerekiyor.
 
Yaptığım değişiklikler;
-Diğer dosyaları sildim.
-Dosyanın yeni halini ekledim.
-Data sayfasını dosya içine ekledim.

Görsel sayfası içindaki kodlar;
Kod:
Private Sub Worksheet_Activate()

ActiveSheet.DrawingObjects.Delete
On Error Resume Next
Yol = "c:\Yeni Klasör\"

resimadi = Trim(Range("C8").Text) & ".jpg"
Range("B13").Select
ActiveSheet.Pictures.Insert Yol & resimadi
Set Resim1 = Pictures(1)
With Resim1
.Height = [b13].Height
.Width = [b13].Width
.Top = [b13].Top + 20
.Left = [b13].Left + 55
End With


Range("F13").Select
resimadi2 = Range("G8").Text & ".jpg"
ActiveSheet.Pictures.Insert Yol & resimadi2
Set Resim2 = Pictures(2)
With Resim2
.Height = [f13].Height
.Width = [f13].Width
.Top = [f13].Top + 20
.Left = [f13].Left + 55
End With


Range("i13").Select
resimadi3 = Range("J8").Text & ".jpg"
ActiveSheet.Pictures.Insert Yol & resimadi3
Set Resim3 = Pictures(3)
With Resim3
.Height = [i13].Height
.Width = [i13].Width
.Top = [i13].Top + 20
.Left = [i13].Left + 55
End With


Range("B27").Select
resimadi4 = Range("C22").Text & ".jpg"
ActiveSheet.Pictures.Insert Yol & resimadi4
Set Resim4 = Pictures(4)
With Resim4
.Height = [b27].Height
.Width = [b27].Width
.Top = [b27].Top + 20
.Left = [b27].Left + 55
End With

Range("F27").Select
resimadi5 = Range("G22").Text & ".jpg"
ActiveSheet.Pictures.Insert Yol & resimadi5
Set Resim5 = Pictures(5)
With Resim5
.Height = [f27].Height
.Width = [f27].Width
.Top = [f27].Top + 20
.Left = [f27].Left + 55
End With

Range("I27").Select
resimadi6 = Range("J22").Text & ".jpg"
ActiveSheet.Pictures.Insert Yol & resimadi6
Set Resim6 = Pictures(6)
With Resim6
.Height = [i27].Height
.Width = [i27].Width
.Top = [i27].Top + 20
.Left = [i27].Left + 55
End With

Range("B41").Select
resimadi7 = Range("C36").Text & ".jpg"
ActiveSheet.Pictures.Insert Yol & resimadi7
Set Resim7 = Pictures(7)
With Resim7
.Height = [b41].Height
.Width = [b41].Width
.Top = [b41].Top + 20
.Left = [b41].Left + 55
End With

Range("F41").Select
resimadi8 = Range("G36").Text & ".jpg"
ActiveSheet.Pictures.Insert Yol & resimadi8
Set Resim8 = Pictures(8)
With Resim8
.Height = [f41].Height
.Width = [f41].Width
.Top = [f41].Top + 20
.Left = [f41].Left + 55
End With

Range("I41").Select
resimadi9 = Range("J36").Text & ".jpg"
ActiveSheet.Pictures.Insert Yol & resimadi9
Set Resim9 = Pictures(9)
With Resim9
.Height = [i41].Height
.Width = [i41].Width
.Top = [i41].Top + 20
.Left = [i41].Left + 55
End With
End Sub
ThisWorkBook kısmındaki kodlar;

Kod:
Private Sub Workbook_Open()
    Sayfa3.ComboBox1.Clear
    Son = Sheets("Data").[b65536].End(3).Row
    For i = 3 To Son + 5
    Sayfa3.ComboBox1.AddItem Sheets("Data").Cells(i, 2)
    Next
End Sub
Fiyat Sayfasındaki kodlar;

Kod:
Private Sub ComboBox1_DropButtonClick()
        ActiveCell = ComboBox1.Text
        k = ComboBox1.ListIndex + 3
        c = ActiveCell.Row
        Cells(c, "C") = Sheets("Data").Cells(k, 3)
        Cells(c, "D") = Sheets("Data").Cells(k, 4)
        Cells(c, "E") = Sheets("Data").Cells(k, 5)
        Cells(c, "G") = Sheets("Data").Cells(k, 6)
        Cells(c, "H") = Sheets("Data").Cells(k, 7)
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, [b22:b50]) Is Nothing Then
    ComboBox1.Visible = True
    ComboBox1.Top = Target.Top
    ComboBox1.Left = Target.Left
    Else: ComboBox1.Visible = False
    End If
End Sub
 

Ekli dosyalar

Elinize sağlık, düşündüğümün ötesinde bir dosya oldu. Şahsınıza ve forma emek veren diğer arkadaşlarıma yürekten teşekkür ediyorum. Son ricam Data dosyasını değiştirdiğimizde yeni dosyayı nasıl ekleyeceğimi yazarsanız sevinirim. Uğraştım biraz ama halledemedim. Bir iki değişiklikte ben yapıpson halini size göndereceğim.
 
Data sayfası gizlidir. Vba içinden görünür hale sokabilirsiniz.
 
Resim sayfasında daha çok resim gösterebilmek için kodları çoğalttım ama sizin tanımladığınız 9 resim dışında resim görüntüleyemedim. Kodlarda bir hatamı yaptım, başka bir alanda bir ayarmı yapılması gerekiyor?


Range("B55").Select
resimadi10 = Range("C50").Text & ".jpg"
ActiveSheet.Pictures.Insert Yol & resimadi10
Set Resim10 = Pictures(10)
With Resim10
.Height = [b55].Height
.Width = [b55].Width
.Top = [b55].Top + 20
.Left = [b55].Left + 55
End With

Range("F55").Select
resimadi11 = Range("G50").Text & ".jpg"
ActiveSheet.Pictures.Insert Yol & resimadi11
Set Resim11 = Pictures(11)
With Resim11
.Height = [f55].Height
.Width = [f55].Width
.Top = [f55].Top + 20
.Left = [f55].Left + 55
End With

Range("I55").Select
resimadi12 = Range("J50").Text & ".jpg"
ActiveSheet.Pictures.Insert Yol & resimadi12
Set Resim12 = Pictures(12)
With Resim12
.Height = [i55].Height
.Width = [i55].Width
.Top = [i55].Top + 20
.Left = [i55].Left + 55
End With
 
Fiyat sayfasındaki kodlar ile Görsel sayfasındaki kodlar birbiri ile kombine çalışmakta. Önce Fiyat sayfasındaki tablo sınırlarını genişletmeli sonra da Görsel sayfasındaki kodları çoğaltmalısınız.
Fiyat sayfasındaki değişiklikleri yapıp eklerseniz, diğer kodlar ile ilgili yardımcı olabilirim.
 
Geri
Üst