Delphi'de excel makrolarını kullanmaya yardım lütfen

Katılım
11 Aralık 2005
Mesajlar
3
Arkadaşlar öncelikle bu sayfası hangi kardeşimiz açmışsa Allah razı olsun dilekleriyle soruma geçiyorum. Dephi de bir proje yapıyorum.Projemde veritabanından aldığım bilgileri excele aktarıyorum.Bunda sorun yok. Sorunum şu:Ben aynı sayfaya veritabanından aldığım 5 kişinin bilgilerini kaydettirecem. Yani for döngüsü gibi bir döngü kullanmam lazım. Aşağıdaki örnektede görüldüğü gibi mesala şu şekilde olsun:

Birinci kişinin kaydını B20 hücresine . İkinci kişinin kaydını B40 hücresine , üçüncü kişiyi B60 hücresine kaydetme şeklinde olacak.Tabi bu B20 içindi. Aşağıda kullandığım(B16,B17,D17....) hücreleride bu şekilde kaydetmek istiyorum. Þimdiden teşekkürler. Çalışmalarınızda başarılar.Allah yar ve yardımcınız olsun.SAYGILAR.

EXCEL := CREATEOLEOBJECT('EXCEL.APPLICATION');{EXCEL 'İ AÇMA}
EXCEL.VISIBLE :=TRUE;{EXCEL 'İ AKTİF YAPMA}
WORKBOOK :=EXCEL.WORKBOOKS.open('D:\PROJE TASLAK\veli.xls');

SHEET:=WORKBOOK.WORKSHEETS[1];{SAYFA NUMARASI}


SHEET.RANGE['b16']:=edit4.Text;
SHEET.RANGE['d16']:=edit5.Text;
SHEET.RANGE['b17']:=edit6.Text;
SHEET.RANGE['d17']:=edit2.Text;
SHEET.RANGE['b18']:=edit2.Text;
SHEET.RANGE['b19']:=edit8.Text;
SHEET.RANGE['b20']:=edit9.Text;
SHEET.RANGE['j9']:=edit2.Text;
SHEET.RANGE['j12']:=edit10.Text;

if RadioButton1.Checked then

begin
Table1.filtered:= true;

SHEET.RANGE['d20'].Interior.Color := 00E88017;
end;
if RadioButton2.Checked then

begin
Table1.filtered:= true;
SHEET.RANGE['a20'].Interior.Color := 00E88017;
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Merhaba;

Sizin sorunuz Excel ile değil, Delphi ile ilgili.

Yani, Delphi' de döngüyü tasarlamak için Delphi dilini bilmek gerekiyor. Bu nedenle, sorunuzun cevabını Delphi ile ilgili sitelerde aramanız sanki bana daha mantıklı geliyor.

Ben de dahil olmak üzere, buradaki üyelerin herhalde çok büyük bölümünde Delphi yoktur.
 
Katılım
11 Aralık 2005
Mesajlar
3
yo yanlışlık yok

Yoo döngü işini excelin makrosunu kullanarak yapmalıyım. Makronun herhalde kendine ait döngüsü vardır değilmi. Bu döngü içerisinde bu kodlar nasıl olacak?Döngü her yerde zaten aynı. Ben makro kodlara yabancı oluğumdan dolayı zaten sordum.Yoksa bende biliyorum delphideki döngüyü. Bu verdiğim kodları siz makro diline çevirseniz sevinirim. Saygılar...
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Ben konuyu anlayamadım galiba.

Sizin yapmak istediğiniz Delphi'de bir Excel dosyası açıp, içine Delphi kodlarıyla;

r_korkmaz44' Alıntı:
".... Birinci kişinin kaydını B20 hücresine . İkinci kişinin kaydını B40 hücresine , üçüncü kişiyi B60 hücresine kaydetme şeklinde olacak.Tabi bu B20 içindi. Aşağıda kullandığım(B16,B17,D17....) hücreleride bu şekilde kaydetmek istiyorum. "
yapmak değil mi ?
 
Katılım
11 Aralık 2005
Mesajlar
3
Ben herhalde yanlış anlattım. Dephide exceli çağırıp dataları excele aktaracağım. Bunu yapıyorum. Hazır kodlar sayesinde. Ben bu hazır makro kodlarını döngüde kullanmak istiyorum. Yani delphi kodlarını döngüde değilde makro kodlarını döngüde kullanacağım. Zaten deplhi kodlarını döngüdekullanacak olsam buraya yazmazdım.Bu yazdığım sheet gibi kodlar sayesinde hücrelere erişiyoruzya. Ben sheetleri döngüde kullanacağım. Ayrıntıda ki kodları yani hücreleri, birden fazla kişinin bilgilerini girdiğim zaman alt taraflara otomatik olarak yazmam gerekiyor.SAYGILAR.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
EXCEL := CREATEOLEOBJECT('EXCEL.APPLICATION');{EXCEL 'İ AÇMA}
EXCEL.VISIBLE :=TRUE;{EXCEL 'İ AKTİF YAPMA}
WORKBOOK :=EXCEL.WORKBOOKS.open('D:\PROJE TASLAK\veli.xls');
SHEET:=WORKBOOK.WORKSHEETS[1];{SAYFA NUMARASI}
SHEET.RANGE['b16']:=edit4.Text;
SHEET.RANGE['d16']:=edit5.Text;
SHEET.RANGE['b17']:=edit6.Text;
SHEET.RANGE['d17']:=edit2.Text;
SHEET.RANGE['b18']:=edit2.Text;
SHEET.RANGE['b19']:=edit8.Text;
SHEET.RANGE['b20']:=edit9.Text;
SHEET.RANGE['j9']:=edit2.Text;
SHEET.RANGE['j12']:=edit10.Text;
if RadioButton1.Checked then
begin
Table1.filtered:= true;
SHEET.RANGE['d20'].Interior.Color := 00E88017;
end;
if RadioButton2.Checked then
begin
Table1.filtered:= true;
SHEET.RANGE['a20'].Interior.Color := 00E88017;
Yukarıda verdiğiniz kodların muhtemel karşılığı aşağıdaki gibidir, buna göre deneyebilirsiniz.

[vb:1:9571ad62d3]Set yeni = CreateObject("Excel.Application")
yeni.Visible = True
yeni.Workbooks.Open Filename:="D:\PROJE TASLAK\veli.xls"
Sheets(1).Select
Sheets(1).[b16] = edit4.Text 'textbox olabilir.
.
.
.
.
.
If RadioButton1.Value = True Then 'optionbutton olabilir.
Table1.filtered:= true; 'bunu anlayamadım, sayfada süz ise .autofilter olabilir.
Sheets(1).[d20].Interior.ColorIndex = 6 '6 sarıdır
.
.
.
[/vb:1:9571ad62d3]
 
Katılım
26 Eylül 2004
Mesajlar
62
Excel Vers. ve Dili
Ofis XP Türkçe
Aşağıda örnek VB ve ADO kodu var Delphiye uyarlaman sorunu çözebilir
...........
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
Dim MyExcel As Object
Dim i, dosyam
dosyam = CurrentProject.Path & "\denemyol.xls" 'access dosyamızın olduğu klasörde deneme.xls olduğunu varsayıyoruz.
'On Error GoTo Hata
Set MyExcel = CreateObject("Excel.Application")
MyExcel.Visible = True ' Aplikasyonumuzu mutlaka visible=true etmeliyiz yoksa çalışmayacaktır(!!!).
'MyExcel.Workbooks.Add ' Gayet Açık yeni bir Çalışma kitabi yani excel belgesi oluşturuyor..
'Eğer varolan bir excel sayfasını açmak isterseniz;
MyExcel.Workbooks.Open (dosyam)
MyExcel.Sheets("alınanveri").Select 'alınanveri adında bir sayfamızın olduğunu varsayıyoruz.
MyExcel.Cells(1, 1).Value = "Adı"
MyExcel.Cells(1, 2).Value = "Soyadı"
MyExcel.Cells(1, 3).Value = "Yaşı"
MyExcel.Cells(1, 1).Font.Bold = True
MyExcel.Cells(1, 2).Font.Bold = True
MyExcel.Cells(1, 3).Font.Bold = True
'Þimdi Databasemizdeki kullanıcı tablosundaki tüm değerleri Excel e aktaralım.
'Tabi sorgu sonucuda aktarabiliriz..
rst.Open "Kullanıcı", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
'Cursorun ilk kayitta oldugundan emin olmak için
rst.MoveFirst
'ilk satira başlıkları yazdırmıştık.2.satırdan başlayarak kayıtlarımızı yazdıralım.
i = 2
'şimdi sıra döngümüzde
While Not rst.EOF
MyExcel.range("A" & i).Value = rst.Fields("Ad")
MyExcel.range("B" & i).Value = rst.Fields("Soyad")
MyExcel.range("C" & i).Value = rst.Fields("Yas")
i = i + 1
rst.MoveNext
Wend
'Þimdi de kullanıcıların yaşlarını toplamını bulan bir formulu(sum) hucrenin birine yazdıralım.
MyExcel.Cells(i, 3).Formula = "=sum(C2:C" & i - 1 & ")"
'Sıra geldi Excel i kapatmaya (tabi istersek)
'MyExcel.Workbooks(1).Close (True)
'MyExcel.Application.Quit
'Set MyExcel = Nothing
'Exit Sub
'Hata:
'MsgBox Error(Err)
'If Not (MyExcel Is Nothing) Then
'Set MyExcel = Nothing
'End If
..................................
ikinci yöntem
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
Dim dosyam
Dim MyExcel As Object
Dim i As Integer
Set MyExcel = CreateObject("Excel.Application")

dosyam = CurrentProject.Path & "\denemyol.xls"
MyExcel.Visible = True ' Aplikasyonumuzu mutlaka visible=true etmeliyiz
MyExcel.Workbooks.Open (dosyam)
rst.Open "Kullanıcı", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

For i = 0 To rst.Fields.Count - 1
MyExcel.Sheets("alınanveri").Range("a1").Offset(0, i).Value = rst.Fields(i).Name
Next i
MyExcel.Sheets("alınanveri").Range("a2").CopyFromRecordset rst
rst.Close
Set rst = Nothing

'Sıra geldi Excel i kapatmaya (tabi istersek)
'MyExcel.Workbooks(1).Close (True)
'MyExcel.Application.Quit
'Set MyExcel = Nothing
'Exit Sub
'Hata:
'MsgBox Error(Err)
'If Not (MyExcel Is Nothing) Then
'Set MyExcel = Nothing
'End If
 
Üst