• DİKKAT

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

Scada excel vba

  • Konbuyu başlatan Konbuyu başlatan inci55
  • Başlangıç tarihi Başlangıç tarihi
Katılım
19 Ocak 2009
Mesajlar
15
Excel Vers. ve Dili
2007 TR
Arkadaşlar kolay gelsin,

Bir plc ile scada da script yazdım. Raporlama amaçlı yazmış olduğum bu script çalışıyor. Fakat eğer biri adı geçen excel sayfasını açık unuttu ise program "üzerine yazılsın mı " uyarısı veriyor. evet yada hayır desek bile kayıt yapmıyor. excel sayfası arka planda açık kaldığı için bu andan itbaret rapor alamıyorum.

excel sayfası açık olsa bile boş olan satıra istenilen bilgileri yazacak , iş bitince kaydedip kapatacak şekilde bu programı nasıl düzeltebiliriz.

Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)
Dim TORBASAYISI1
Set TORBASAYISI1 = HMIRuntime.Tags("TORBASAYISI1")
Dim URUNCINSI1
Set URUNCINSI1 = HMIRuntime.Tags("URUNCINSI1")
Dim ZAYITORBASAYISI1
Set ZAYITORBASAYISI1 = HMIRuntime.Tags("ZAYITORBASAYISI1")
Dim YUKLEYICI1
Set YUKLEYICI1 = HMIRuntime.Tags("YUKLEYICI1")
Dim KAMYONPLAKA1
Set KAMYONPLAKA1 = HMIRuntime.Tags("KAMYONPLAKA1")
Dim OPERATOR1
Set OPERATOR1 = HMIRuntime.Tags("OPERATOR1")
Dim ExcelNesne
Set ExcelNesne = CreateObject ("Excel.Application")
Dim KENAR1
Set KENAR1 = HMIRuntime.Tags("KENAR1")
Dim ACIKLAMA_1
Set ACIKLAMA_1 = HMIRuntime.Tags("ACIKLAMA_1")

ExcelNesne.Workbooks.Open "c:\rapor2.xls",,,, "9906007","9906007"

X = 2
Do Until ExcelNesne.CELLS(X,1)=false
X = X + 1
Loop
ExcelNesne.Cells(X,1).value = Date
ExcelNesne.Cells(X,2).value = Time
ExcelNesne.Cells(X,3).value = "KANTAR2"
ExcelNesne.Cells(X,4).value = URUNCINSI1.Read
ExcelNesne.Cells(X,5).value = KAMYONPLAKA1.Read
ExcelNesne.Cells(X,6).value = OPERATOR1.Read
ExcelNesne.Cells(X,7).value = YUKLEYICI1.Read
ExcelNesne.Cells(X,8).value = TORBASAYISI1.Read
ExcelNesne.Cells(X,9).value = ZAYITORBASAYISI1.Read
ExcelNesne.Cells(X,10).value = KENAR1.Read
ExcelNesne.Cells(X,11).value = ACIKLAMA_1.Read

ExcelNesne.ActiveWorkbook.Save
excelnesne.Workbooks.close
excelnesne.Quit

End Sub
 
Kod:
X = 2
Do Until ExcelNesne.CELLS(X,1)=false
X = X + 1
Loop

Yukarıdaki satırları silip aşağıdaki gibi kullanın.

Kod:
X = ExcelNesne.CELLS(X,1).end(3).row+1
 
İlginize teşekkür ederim.

Sorunu tam anlatamadım ben,
mevcut hali ile de sizin gönderdiğiniz düzeltme ile de program zaten çalışıyor.

Sorun şu;

Diyelim ki bu (excel : rapor2.xls) sayfa açık,
Programı yürüttüğümde sayfa zaten açık üzerine yazılsın mı uyarısı veriyor. Evet desemde kayıt etmiyor. Bu sorunu çözmek istiyorum. Teşekkür ederim.
 
İlginize teşekkür ederim.

Sorunu tam anlatamadım ben,
mevcut hali ile de sizin gönderdiğiniz düzeltme ile de program zaten çalışıyor.

Sorun şu;

Diyelim ki bu (excel : rapor2.xls) sayfa açık,
Programı yürüttüğümde sayfa zaten açık üzerine yazılsın mı uyarısı veriyor. Evet desemde kayıt etmiyor. Bu sorunu çözmek istiyorum. Teşekkür ederim.

Birde dosyayı ekli görsek. Eminim Üstadlarım daha rahat yardım edecektir konuya.
 
Bu durumda size dosyanın açık olup olmadığını kontrol eden bir fonksiyon önereyim. Aşağıdaki fonksiyonu bir normal modüle kopyalayın.

Kod:
Function IsExcelFileOpen(sFile As String) As Boolean
Dim iHandle As Integer
On Error Resume Next
iHandle = FreeFile
Open sFile For Input Lock Read As #iHandle
If Err.Number = 0 Then
IsExcelFileOpen = False
Else
IsExcelFileOpen = True
If Err.Number <> 70 Then
MsgBox Err.Description
End If
End If
Close iHandle
End Function
Daha sonra aşağıdaki satırı önereceğim kodlarla değiştirin.

Kod:
ExcelNesne.Workbooks.Open "c:\rapor2.xls",,,, "9906007","9906007"
yerine

Kod:
If IsExcelFileOpen("c:\rapor2.xls") = False Then
ExcelNesne.Workbooks.Open "c:\rapor2.xls",,,, "9906007","9906007"
End If
Not: Bu arada kullandığınız PLC'nin markasını öğrenebilirmiyim.
 
Scada wincc 6.2 ,
PLC Siemens S7-200

excel sayfası açıkken niye yazamyor acaba, açıksa devam etsin olsun bitsin.
 
Yukarıda verdiğim fonksiyonu kullanmak kaydıyla kendi kodunuzu aşağıdaki ile değiştirerek deneyin.

Kod:
Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)
Dim TORBASAYISI1
Set TORBASAYISI1 = HMIRuntime.Tags("TORBASAYISI1")
Dim URUNCINSI1
Set URUNCINSI1 = HMIRuntime.Tags("URUNCINSI1")
Dim ZAYITORBASAYISI1
Set ZAYITORBASAYISI1 = HMIRuntime.Tags("ZAYITORBASAYISI1")
Dim YUKLEYICI1
Set YUKLEYICI1 = HMIRuntime.Tags("YUKLEYICI1")
Dim KAMYONPLAKA1
Set KAMYONPLAKA1 = HMIRuntime.Tags("KAMYONPLAKA1")
Dim OPERATOR1
Set OPERATOR1 = HMIRuntime.Tags("OPERATOR1")
Dim ExcelNesne
Set ExcelNesne = CreateObject("Excel.Application")
Dim KENAR1
Set KENAR1 = HMIRuntime.Tags("KENAR1")
Dim ACIKLAMA_1
Set ACIKLAMA_1 = HMIRuntime.Tags("ACIKLAMA_1")

If IsExcelFileOpen("c:\rapor2.xls") = False Then
ExcelNesne.Workbooks.Open "c:\rapor2.xls", , , , "9906007", "9906007"
x = ExcelNesne.Cells(x, 1).End(3).Row + 1
ExcelNesne.Cells(x, 1).Value = Date
ExcelNesne.Cells(x, 2).Value = Time
ExcelNesne.Cells(x, 3).Value = "KANTAR2"
ExcelNesne.Cells(x, 4).Value = URUNCINSI1.Read
ExcelNesne.Cells(x, 5).Value = KAMYONPLAKA1.Read
ExcelNesne.Cells(x, 6).Value = OPERATOR1.Read
ExcelNesne.Cells(x, 7).Value = YUKLEYICI1.Read
ExcelNesne.Cells(x, 8).Value = TORBASAYISI1.Read
ExcelNesne.Cells(x, 9).Value = ZAYITORBASAYISI1.Read
ExcelNesne.Cells(x, 10).Value = KENAR1.Read
ExcelNesne.Cells(x, 11).Value = ACIKLAMA_1.Read
ExcelNesne.ActiveWorkbook.Save
ExcelNesne.Workbooks.Close
ExcelNesne.Quit
Else
Set s = Workbooks("rapor2.xls").ActiveSheet
x = s.ActiveSheet.Cells(1, 1).End(3).Row + 1
s.Cells(x, 1).Value = Date
s.Cells(x, 2).Value = Time
s.Cells(x, 3).Value = "KANTAR2"
s.Cells(x, 4).Value = URUNCINSI1.Read
s.Cells(x, 5).Value = KAMYONPLAKA1.Read
s.Cells(x, 6).Value = OPERATOR1.Read
s.Cells(x, 7).Value = YUKLEYICI1.Read
s.Cells(x, 8).Value = TORBASAYISI1.Read
s.Cells(x, 9).Value = ZAYITORBASAYISI1.Read
s.Cells(x, 10).Value = KENAR1.Read
s.Cells(x, 11).Value = ACIKLAMA_1.Read
s.ActiveWorkbook.Save
s.Workbooks.Close
End If
End Sub

Not: Önerdiğim kod istediğiniz sonucu vermeyebilir. Kodlamayı excel içinde yapmış olsaydınız çözüm bulmak daha kolay olurdu. Yukarıda verdiğim fonksiyon ile dosyanın açık olup olmadığı kontrol edildikten sonra exceli kapatıp sonra tekrar açan bir mantık kurmak daha doğru sonuç verebilir.
 
Levent Bey,
Program ı kopyalayıp yapıştırdım. Ama çalışmadı.
Teşekkür ederim.
 
Bu durumda verdiğim fonksiyon ile uygulamanın açık olup olmadığını kontrol edip eğer açıksa el ile kapatılmasını sağlayabilirsiniz. Bunun dışında bir çözüm maalesef bulamadım. Belki daha iyi çözümler bulan arkadaşlarımız olabilir. Açıkçası bende böyle bir çözümü merakla bekleyeceğim.

Not: Ayrı ayrı birden fazla açık olan Excel programını (aynı uygulama üzerinde açık dosyaları kasdetmiyorum) tarayıp açık çalışma kitabı isimlerini bulan ve buna göre uygulamayı kapatan bir kodlama bulunabilirse çözüm bulunabilir.
 
Geri
Üst