Tüm yapmaya çalıştığım bir excel sayfası (yani adlandırılmış aralığı, hatta A1: F100) standart bir aralıkta almak ve üzerinde bazı sql sorguları çalıştırmak ve VBA içinde adım olabilir bir recordset dönmek Aynı çalışma kitabında kod yazabilir veya başka bir sayfaya yapıştırabilirsiniz.SQL deyimlerini excel sayfasındaki adlandırılmış bir aralıkta nasıl çalıştırabilirim?
ADODB'yi kullanmak bir düşüncedir, ancak geçerli çalışma kitabındaki bazı noktalara işaret etmek için bağlantıları nasıl ayarlayabilirim?
Microsoft sorgu sihirbazını kullanmadan önce, ideal olmayan, ancak işe yarayacağını biliyorum. Bunu, sayfanın içindeki bir aralığa, sadece diğer excel dosyalarına başvurmak için göremiyorum.
Burada bıraktığım işlev var. Birkaç kez çalıştırdığımda, excel kaynakların her zamanki hata iletisi ile çöküyor. Bu işlevi e-tablomdan kaldırdım ve her şey kesintisiz olarak birkaç kez çalışır, dolayısıyla kesinlikle buradaki koddan kaynaklanır.
Tüm nesneleri temizledim (doğru mu?). Kimsenin neyin yanlış gidebileceği konusunda bir fikri var mı? Bağlantı dizesinde tweaked olabilecek bir şey olabilir veya GetRows yönteminden döndürülen varyantla ilgili bir şey olabilir mi?
MS ADO 2.8 kullanıyorum ve 2.5 aynı davranışı denedim. Hepiniz bulacaksınız
Function getTimeBuckets() As Collection
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim dateRows As Variant
Dim i As Integer
Dim today As Date
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Set getTimeBuckets = New Collection
strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
cn.Open strCon
strSQL = "SELECT DISTINCT(Expiration) FROM [PositionSummaryTable] where [Instrument Type] = 'LSTOPT'"
rs.Open strSQL, cn
dateRows = rs.GetRows
rs.Close
'today = Date
today = "6-may-2009"
For i = 1 To UBound(dateRows, 2)
If (dateRows(0, i) >= today) Then
getTimeBuckets.Add (dateRows(0, i))
End If
Next i
Set dateRows = Nothing
Set cn = Nothing
Set rs = Nothing
End Function
Teşekkürler, harika çalışıyor. Bağlantı dizgisi ile farklı bir şey yapmak zorunda kaldığımı düşünen başka bir şey yanlış olmalıyım (yukarıdaki yoruma bakınız). – cOrOllArY
Kaydetmediyseniz, ADO ile ilgili sorunlarla karşılaşabilirsiniz. – Fionnuala
Her şey mükemmel çalışıyor, ancak bir tür bellek sızıntısı oluyor. Aşağıdaki işlevi, yorum için çok uzun olduğu için göndereceğim. – cOrOllArY