leumruk
28-06-2011, 15:34
Merhaba,
Üyelerimizden belirli aralıklarla makro çalıştırma konusunda sıkça sorular soruluyor. Bu soruların belirli standartlarda cevapları var.
Do-Loop döngüsüyle veya "Application.Wait" yöntemiyle çözümler bulunabiliyor. Ancak bu yöntemlerin arka planda sürekli çalışan bir makro olması gibi dezavantajları var. Bunun için "Dış Veri Al" yöntemiyle dakika aralıklı bir yöntem geliştirdim. Uzun soluklu deneme şansım olmadı. "Dış Veri Al" yöntemini pek kullanmadığım için artısı eksisi nedir bilemiyorum. Konuyla ilgili olumlu-olumsuz görüşlerinizi paylaşırsanız memnun olurum.
Private Sub Workbook_Open()
On Error GoTo son:
Application.ScreenUpdating = False
Set Aktif_Sayfa = ActiveSheet
Sheets("İslem_Sayfasi").Select
Application.EnableEvents = False
Sheets("İslem_Sayfasi").Columns(1).Delete
yol = ThisWorkbook.Path & "\" & ThisWorkbook.Name
adres = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=" & yol
With ActiveSheet.QueryTables.Add(Connection:=Array(adre s _
, ";Mode=Share Deny Write;Extended Properties=""HDR=NO;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database" _
, "Password="""";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk" _
, "Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet" _
, "OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False" _
), Destination:=Range("A1"))
.CommandType = xlCmdTable
.CommandText = Array("İslem_Sayfasi$")
.Name = "dva"
.RefreshPeriod = 1
.PreserveColumnInfo = True
.SourceDataFile = ThisWorkbook.Path & "\dısveral.xls"
.Refresh BackgroundQuery:=False
End With
son:
Aktif_Sayfa.Select
Application.EnableEvents = True
End Sub
Üyelerimizden belirli aralıklarla makro çalıştırma konusunda sıkça sorular soruluyor. Bu soruların belirli standartlarda cevapları var.
Do-Loop döngüsüyle veya "Application.Wait" yöntemiyle çözümler bulunabiliyor. Ancak bu yöntemlerin arka planda sürekli çalışan bir makro olması gibi dezavantajları var. Bunun için "Dış Veri Al" yöntemiyle dakika aralıklı bir yöntem geliştirdim. Uzun soluklu deneme şansım olmadı. "Dış Veri Al" yöntemini pek kullanmadığım için artısı eksisi nedir bilemiyorum. Konuyla ilgili olumlu-olumsuz görüşlerinizi paylaşırsanız memnun olurum.
Private Sub Workbook_Open()
On Error GoTo son:
Application.ScreenUpdating = False
Set Aktif_Sayfa = ActiveSheet
Sheets("İslem_Sayfasi").Select
Application.EnableEvents = False
Sheets("İslem_Sayfasi").Columns(1).Delete
yol = ThisWorkbook.Path & "\" & ThisWorkbook.Name
adres = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=" & yol
With ActiveSheet.QueryTables.Add(Connection:=Array(adre s _
, ";Mode=Share Deny Write;Extended Properties=""HDR=NO;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database" _
, "Password="""";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk" _
, "Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet" _
, "OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False" _
), Destination:=Range("A1"))
.CommandType = xlCmdTable
.CommandText = Array("İslem_Sayfasi$")
.Name = "dva"
.RefreshPeriod = 1
.PreserveColumnInfo = True
.SourceDataFile = ThisWorkbook.Path & "\dısveral.xls"
.Refresh BackgroundQuery:=False
End With
son:
Aktif_Sayfa.Select
Application.EnableEvents = True
End Sub