Application-defined or object-defined error

Katılım
21 Eylül 2006
Mesajlar
14
Excel Vers. ve Dili
xp türkçe
hata ile ilgili mesajları araştırdım ancak soruma cevap bulamadım öncelikle bunu belirteyim; Şimdide sorunumu dile getireyim. Özetle bir .xla dosyası yaptım ve Excel'ime bunu ekledim başka ekranlarda (UserForm) bağlantı ayarlarını yaptıktan sonra MSSQL'den veri çeken bir Public Function Yapmaya çalışıyorum fonksiyonum şu
/*
Public Function Get_CekiB_Values(ByVal CekiNo As Variant, ByVal FieldName As String) As Variant
*/

Bu fonksiyon MSSQL'de tanımlı olan bir tablo (başlık tablosu ile ilişkili olan) başlık tablosu ile ilişkili detay hareketlerin tutulduğu bir tablo (İrsaliye hareketlerinin tutulması gibi) fonksiyon ise verilen anahtar değerine göre istenilen sütunun değerlerini veri tabanında o harekete ait kayıt sayısı kadar excel'de aktif range'ten alt satırlara doğru yazmasını sağlıyor. ancak ilk satırda fonksiyona değeri yükledikten sonra (ilk satıra ait sütun değeri) alt satırlara sadece formülsüz o sütuna ait diğer satır değerlerini yazmaya çalıştığım zaman başlıkta belirttiğim hatayı alıyorum...
Yardımlarınız için şimdiden teşekkürler...

kod örneği

'**************************************
Public Function Get_CekiB_Values(ByVal CekiNo As Variant, ByVal FieldName As String) As Variant
Dim VogueConn As ADODB.Connection
Dim CekiBRst As ADODB.Recordset
Dim strSQL As String
Dim CekiBSatirN As Integer
On Error GoTo cekibHata
LoadGlobalStr
strSQL = "select " & FieldName & " from CEKIB where CEKINO=" & CekiNo
Set VogueConn = New ADODB.Connection
With VogueConn
.CursorLocation = adUseClient
.Open strADOConString
Set CekiBRst = .Execute(strSQL)
End With
CekiBRst.MoveFirst
Get_CekiB_Values = CekiBRst(FieldName)
CekiBSatirN = ActiveCell.Row
While Not CekiBRst.EOF
ActiveSheet.Cells(CekiBSatirN + 1, ActiveCell.Column).Select
With Selection
.NumberFormat = "General"
.HorizontalAlignment = xlCenter: .VerticalAlignment = xlCenter: .WrapText = False: .Orientation = 0: .AddIndent = False
.IndentLevel = 0: .ShrinkToFit = False: .ReadingOrder = xlContext: .MergeCells = True
End With
'Hatayı bu satırda veriyor.....
ActiveSheet.Cells(CekiBSatirN + 1, ActiveCell.Column) = CekiBRst(FieldName)
CekiBSatirN = CekiBSatirN + 1
CekiBRst.MoveNext
Wend
CekiBRst.Close
VogueConn.Close
Set CekiBRst = Nothing
Set VogueConn = Nothing
cekibHata:
MsgBox (Err.Description)
Exit Function
End Function
'********************************************
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Public Function kullanarak, bu işlemi yapamazsınız. Normalde function, şu satırda;
Kod:
Get_CekiB_Values = CekiBRst(FieldName)
işlemi bitiriyor ve herhangi bir hata yoksa muhtemelen bir değer üretiyor.

Bu değeri de; siz, aktif hücrede görüyorsunuz.

Eğer çoklu sonuç üreten ve hata bulduğunda mesaj gösteren bir yapı geliştirmek istiyorsanız, Public Function değil (Public) Sub kullanmalısınız. Parametreleri, bir iletişim kutusundan alabileceğiniz gibi bir başka yordamdan da gönderebilirsiniz.
 
Katılım
21 Eylül 2006
Mesajlar
14
Excel Vers. ve Dili
xp türkçe
yani sıkıntı şurdamı ben = (eşittir) ile başlayan bir formül yazarken excel sadece o hücre ile ilgili bir iş yapıyor. ve o iş bitmeden benim aynı fonksiyon üzerinden başka bir hücreye değer yazmama müsade etmiyor sanırım yanlış anlamadıysam....
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Evet kısmen öyle ... Çünkü fonksiyondan beklenen bir değer üretmesi .

Yani bir hücreye "=" ile formülü girdiğinizde, sadece o hücreye bir değer gelir. Formülü girdiğiniz hücre dışında bir yerde aynı fonksiyonla, değer üretemezsiniz.

Get_CekiB_Values functionunda; CekiNo ve FieldName parametrelerine bir tane daha ilave edip, örneğin Recordset'in 0,1,2,3 .... gibi indexlerine de erieşebilirsiniz.

Örneğin A1 hücresine =Get_CekiB_Values(CekiNo,FieldName,0) yazdığınızda RS'in ilk elemanını, A2 hücreine =Get_CekiB_Values(CekiNo,FieldName,1) yazdığınızda da ikinci elemanını getirebilirsiniz.

Bu şekilde, RS'de biriken verileri hücrelere formüllerle girebilirsiniz.
 
Katılım
21 Eylül 2006
Mesajlar
14
Excel Vers. ve Dili
xp türkçe
o şekilde çalışıyordu zaten ben kullanıcının işi biraz daha pratik olsun diye düşünmüştüm zaten bu kodun önceki hali şu idi...


Public Function Print_CekiB_Values(ByVal CekiNo, Satir As Variant) As Variant
'ActiveCell.FormulaR1C1 = "=Get_Cekih_Values(4,""ORDERNO"")"
Dim VogueConn As ADODB.Connection
Dim CekiBRst As ADODB.Recordset
Dim strSQL As String
LoadGlobalStr
strSQL = "select * from CEKIB where CEKINO=" & CekiNo
Set VogueConn = New ADODB.Connection
With VogueConn
.CursorLocation = adUseClient
.Open strADOConString
Set CekiBRst = .Execute(strSQL)
End With

While Not CekiBRst.EOF
'KOLI
ActiveSheet.Cells(Satir, 1).Select
SelField = "KOLI"
With Selection
.NumberFormat = "General"
.HorizontalAlignment = xlCenter: .VerticalAlignment = xlCenter: .WrapText = False: .Orientation = 0: .AddIndent = False
.IndentLevel = 0: .ShrinkToFit = False: .ReadingOrder = xlContext: .MergeCells = True
End With
ActiveCell.FormulaR1C1 = "=Get_CekiB_Values(" & CekiNo & "," & CekiBRst("SATIR") & "," & """" & SelField & """" & ")"
'KOLI2
ActiveSheet.Cells(Satir, 2).Select
SelField = "KOLI2"
With Selection
.NumberFormat = "General"
.HorizontalAlignment = xlCenter: .VerticalAlignment = xlCenter: .WrapText = False: .Orientation = 0: .AddIndent = False
.IndentLevel = 0: .ShrinkToFit = False: .ReadingOrder = xlContext: .MergeCells = True
End With
ActiveCell.FormulaR1C1 = "=Get_CekiB_Values(" & CekiNo & "," & CekiBRst("SATIR") & "," & """" & SelField & """" & ")"
'RENK
ActiveSheet.Cells(Satir, 4).Select
SelField = "RENK"
With Selection
.NumberFormat = "General"
.HorizontalAlignment = xlCenter: .VerticalAlignment = xlCenter: .WrapText = False: .Orientation = 0: .AddIndent = False
.IndentLevel = 0: .ShrinkToFit = False: .ReadingOrder = xlContext: .MergeCells = True
End With
ActiveCell.FormulaR1C1 = "=Get_CekiB_Values(" & CekiNo & "," & CekiBRst("SATIR") & "," & """" & SelField & """" & ")"
'OZEL1
ActiveSheet.Cells(Satir, 5).Select
SelField = "OZEL1"
With Selection
.NumberFormat = "General"
.HorizontalAlignment = xlCenter: .VerticalAlignment = xlCenter: .WrapText = False: .Orientation = 0: .AddIndent = False
.IndentLevel = 0: .ShrinkToFit = False: .ReadingOrder = xlContext: .MergeCells = True
End With
ActiveCell.FormulaR1C1 = "=Get_CekiB_Values(" & CekiNo & "," & CekiBRst("SATIR") & "," & """" & SelField & """" & ")"
'Bedenler
Bdn = 1
For Stn = 6 To 36
If ActiveSheet.Cells(Satir - 1, Stn).Text <> "" Then
ActiveSheet.Cells(Satir, Stn).Select
SelField = "B" & Bdn
With Selection
.NumberFormat = "General"
.HorizontalAlignment = xlCenter: .VerticalAlignment = xlCenter: .WrapText = False: .Orientation = 0: .AddIndent = False
.IndentLevel = 0: .ShrinkToFit = False: .ReadingOrder = xlContext: .MergeCells = True
End With
ActiveCell.FormulaR1C1 = "=Get_CekiB_Values(" & CekiNo & "," & CekiBRst("SATIR") & "," & """" & SelField & """" & ")"
End If
Next Stn

Satir = Satir + 1
CekiBRst.MoveNext
Wend
CekiBRst.Close
VogueConn.Close
Set CekiBRst = Nothing
Set VogueConn = Nothing
End Function
 
Katılım
21 Eylül 2006
Mesajlar
14
Excel Vers. ve Dili
xp türkçe
yard&#305;mlar&#305;n&#305;z i&#231;in te&#351;ekk&#252;r ederim ;

kolay gelsin....
 
Üst