Elinize sağlık çok teşekkür ederim yalnız kulunuzun excel bilgisi bu bilgileri işleyip yoğuracak kapasitede değil. Çok büyük bir rahatsızlık olmayacaksa bir excel dosyasına bunları kaydedip eklemeniz mümkün olabilir mi?
|
|
Sayın Objektif;
Excel içinden CSV formatta kaydetme yöntemi kullanılabilir.
Fakat bunun için öncelikli olarak tabloyu başka bir workbook nesnesine aktarıp o nesneyi kaydetmek lazım.
Bu sayede aktif workbook değiştirilmemiş olur.
İkinci yöntem ise direk csv dosya oluşturma yöntemi. Tercihim ikincisi.
Bir UserForm oluşturuyorum: UserFormSET bunu startup içinden UserFormSET.Show ile ya da sheet üzerine ekleyeceğiniz bir butona tıklayarak çalıştırabilirsiniz.
Bir module ekliyorum; Browse folder için;Kod:Option Explicit Private Sub ComboBoxRowID_Change() HeaderRowStartID = CInt(Me.ComboBoxRowID.SelText) End Sub Private Sub ComboBoxSheetNames_Change() Set SelectedWorksheet = Worksheets(Me.ComboBoxSheetNames.Text) SelectedWorksheet.Activate End Sub Private Sub CommandButtonBrowse_Click() If (Not GetDataFolder()) Then MsgBox ("Klasör seçilemedi..") Me.TextBoxFolderName.Text = "" Else Me.TextBoxFolderName.Text = SaveToFolder End If End Sub Private Sub CommandButtonSTART_Click() STARTSavingCSV Unload Me End Sub Private Sub CommandButtonTRY_Click() SaveAsCSV End Sub Private Sub ListBoxInterval_Change() TimeInterval = Me.ListBoxInterval.Text End Sub Private Sub UserForm_Initialize() Dim WS As Worksheet For Each WS In ThisWorkbook.Worksheets Me.ComboBoxSheetNames.AddItem (WS.Name) Next WS Me.ComboBoxSheetNames.ListIndex = 0 Dim i As Integer For i = 1 To 10 Me.ComboBoxRowID.AddItem (CStr(i)) Next i Me.ComboBoxRowID.ListIndex = 0 Me.ListBoxInterval.AddItem ("00:01:00") Me.ListBoxInterval.AddItem ("00:02:30") Me.ListBoxInterval.AddItem ("00:05:00") Me.ListBoxInterval.AddItem ("00:10:00") Me.ListBoxInterval.AddItem ("00:15:00") Me.ListBoxInterval.AddItem ("00:30:00") Me.ListBoxInterval.ListIndex = 2 End Sub
Bir başka modül daha ekliyorum;Kod:Option Explicit Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long Type BrowseInfo hWndOwner As Long pIDLRoot As Long pszDisplayName As Long lpszTitle As Long ulFlags As Long lpfnCallback As Long lParam As Long iImage As Long End Type 'Browse Folder Constants Public Const OFN_HIDEREADONLY = &H4 Public Const BIF_RETURNONLYFSDIRS = 1 Public Const BIF_DONTGOBELOWDOMAIN = 2 Public Const MAX_PATH = 260 Public lngHwnd As Long Public blnHideReadOnly As Boolean Public Function cSHBrowseForFolder(Title As String) As String Dim lpIDList As Long Dim Path$ Dim tBrowseInfo As BrowseInfo ''Title = "Select a folder." With tBrowseInfo .hWndOwner = Application.Hwnd .lpszTitle = lstrcat(Title, "") .ulFlags = BIF_RETURNONLYFSDIRS ''+ BIF_DONTGOBELOWDOMAIN End With lpIDList = SHBrowseForFolder(tBrowseInfo) If (lpIDList) Then Path = Space(MAX_PATH) SHGetPathFromIDList lpIDList, Path Path = Left(Path, InStr(Path, vbNullChar) - 1) cSHBrowseForFolder = Path End If End Function Public Function GetDataFolder() As Boolean SaveToFolder = "" SaveToFolder = cSHBrowseForFolder("Verilerin kaydedileceği klasörü seçin") If SaveToFolder = "" Then Exit Function GetDataFolder = True End Function
Sizin kullanıdığınız şekliyle WorkbookLoad, BeforeClose Eventlara adapte edilebilir.Kod:Option Explicit Public SelectedWorksheet As Worksheet Public HeaderRowStartID As Integer Public SaveToFolder As String Public TimeInterval As String Public RowStartID As Long Public RowEndID As Long Public ColStartID As Long Public ColEndID As Long '' Function GetRowColDefinitions() As Boolean GetRowColDefinitions = False Dim colID As Long colID = 1 While (Cells(HeaderRowStartID, colID) = "") colID = colID + 1 If colID > 255 Then Exit Function Wend ColStartID = colID While (Cells(HeaderRowStartID, colID) <> "") colID = colID + 1 Wend ColEndID = colID - 1 Dim rowID As Long rowID = HeaderRowStartID RowStartID = rowID While (Cells(rowID, ColStartID) <> "") rowID = rowID + 1 Wend RowEndID = rowID - 1 GetRowColDefinitions = True End Function Sub SwapTableToCSV() Dim FName As String FName = SaveToFolder & "\" & SelectedWorksheet.Name & " " & Format(Now, "yyyy.mm.dd") & " " FName = FName & Format(Hour(Now), "00") & "_" FName = FName & Format(Minute(Now), "00") & "_" FName = FName & Format(Second(Now), "00") & ".csv" Dim csvFileNumber csvFileNumber = FreeFile Dim lineString As String Dim iRow As Long Dim jCol As Long Open FName For Output As #csvFileNumber For iRow = RowStartID To RowEndID lineString = "" For jCol = ColStartID To ColEndID lineString = lineString & SelectedWorksheet.Cells(iRow, jCol).Text If jCol < ColEndID Then lineString = lineString & ";" Next jCol Print #csvFileNumber, lineString Next iRow Close #csvFileNumber End Sub Public Sub SaveAsCSV() If (SaveToFolder = "") Then MsgBox ("Klasör seçilmedi..") Exit Sub End If If GetRowColDefinitions Then SwapTableToCSV End If End Sub Public Sub STARTSavingCSV() SaveAsCSV Dim starttime As String starttime = Now + TimeValue(TimeInterval) Application.OnTime starttime, "STARTSavingCSV" End Sub
Yalnız Error Handling eklemek lazım..
Dip Not: Aşağıdaki public tanımlamalar form içinde set edildikten boş bir sayfaya kaydedilip ana işi yapan metod içerisinde bu kayıttan okutulmalı..
Kod:Public SelectedWorksheet As Worksheet Public HeaderRowStartID As Integer Public SaveToFolder As String Public TimeInterval As String Public RowStartID As Long Public RowEndID As Long Public ColStartID As Long Public ColEndID As Long
Son düzenleme : INVENTOR; 10-02-2013 saat: 18:51.
Elinize sağlık çok teşekkür ederim yalnız kulunuzun excel bilgisi bu bilgileri işleyip yoğuracak kapasitede değil. Çok büyük bir rahatsızlık olmayacaksa bir excel dosyasına bunları kaydedip eklemeniz mümkün olabilir mi?
Forum Kurallarını buraya tıklayarak okuyabilirsiniz
Borsanın Altın Kuralları Md. 6: "Seans içinde karar vermeyin. Kararlarınızı, etkilenmeyeceğiniz bir ortamda verin. Seans anında görüşlerinize ters düşen hareketlerin planlarınızı etkilemesine izin vermeyin. Daha önce düşünmediğiniz yeni fikirler oluşturmayın. İyice incelenmeden yapılan hareketlerin genellikle zararla sonuçlandığı gözlenir."
Forumun Altın Kuralı : Forumda okuduğunuz bilgileri fikir vermesi amacıyla ve mantık süzgecinden geçirerek değerlendirin. Hiç kimse sizi tanımadan size para kazandırmak heveslisi değildir. Hayatta karşılaşmadığınız ve adını soyadını dahi bilmediğiniz bir kişinin tavsiyesi ile senet almaya kalkışmayın, sonu %99 hüsran olacaktır.
Not: Forumumuzda dini ve siyasi ile futbol taraftarlığı yazıları kabul edilmiyor.
Rica ederim sayın Objektif.
Asıl sizin ellerinize sağlık, emekleriniz oldukça fazla.
Site ile ilgili çalışanlara teşekkür ederim.
Biraz çalıştım ve bir dosya hazırladım.
Excel dosyayı indirme linki.. SaveAsCSV.rar
Makro içeren Excel 97 çalışma kitabı.
Bu kitapta yer alan sayfalara istediğinizi dahil edebilirsiniz, istediğiniz sayfayı (Worksheet) çıkartabilirsiniz.
Sadece ilk sayfa olan "AutoSaveSettings" ismindeki sayfada herhangi bir değişiklik yapmayınız.
Program ayarları bu sayfada yer almaktadır.
Dosya açıldığında ilk olarak bu sayfa aktif duruma gelecek:
"Görev Başlangıç Formunu Göster" tuşuna bastığınızda aşağıdaki form açılacak:
Sayfalar: Çalışma kitabı içinde yer alan tüm sayfalar arası geçişler bir dropdown list içinden seçerek yapılabilmekte. Otomatik CSV dosya kaydının yapılacağı tablo bu list içinden seçtiğiniz sayfada yer alan tablo olacak.
Tablo başlık bilgisinin bulunduğu satır: Bir CSV dosya içeriği; benim bildiğim kadarıyla; bir başlık bilgisi (header) ve o başlıkta yer alan kolon (columns) sayısı ile tanımlı. WEB üzerinden otomatik güncellenen ya da başka bir uygulamanın otomatik güncellediği sayfalarda başlık bilgisi sayfanın ilk satırında olmayabilir. Onun için kullanıcının bu uygulamaya başlık satırını tanımlaması gerek.
Eğer başlık satırınız ilk 20 satır içinde değilse UserForm Initialize içindeki kodlardan ayarlayabilirsiniz..
Tablonun hangi kolondan başlayıp hangi kolonda sona erdiğine ve de tablonun toplam satır sayısına algoritma karar vermekte:Kod:For i = 1 To 20 '(20 değerini artırabilirsiniz) Me.ComboBoxRowID.AddItem (CStr(i)) Next i Me.ComboBoxRowID.ListIndex = 0
İlk kolon: o satırda yer alan ilk boş olmayan hücre (cell - range object)
Son kolon: o satırda yer alan boş olmayan son hücre
Tablo satır sayısı: ilk kolonda yer alan boş olmayan son hücre.
Otomatik kaydetme zaman aralığı: 30 saniye ile 2 saat aralığında seçim yapılabilir.
UserForm Initialize içinde doldurulmakta. Kodlardan istediğiniz gibi ayarlayabilirsiniz.
CSV dosyaların kaydedileceği klasörün belirlenmesi:Kod:Me.ListBoxInterval.AddItem ("00:00:30") Me.ListBoxInterval.AddItem ("00:01:00") Me.ListBoxInterval.AddItem ("00:02:00") Me.ListBoxInterval.AddItem ("00:05:00") Me.ListBoxInterval.AddItem ("00:10:00") Me.ListBoxInterval.AddItem ("00:15:00") Me.ListBoxInterval.AddItem ("00:30:00") Me.ListBoxInterval.AddItem ("01:00:00") Me.ListBoxInterval.AddItem ("02:00:00") Me.ListBoxInterval.ListIndex = 3
Form üzerinde "Klasör belirleyin.." düğmesi ile C:\ ana dizini haricinde bir klasör belirleyin.
Deneme Kaydı:
Kodların tablo oluşturmakta bir sorunla karşılaşmadığını görmek için deneme yapın.
Seçtiğiniz klasörde dosyanın oluşup oluşmadığını kontrol edin.
Dosya isimleri:
Dosya isminde;
SeçilenÇalışmaSayfasıİsmi YIL(YYYY).AY(MM).GUN(DD) SAAT(hh)DAKİKA(mm)SANİYE(ss).csv
formatı kullanıldı.
Önemli not: CSV dosyalarda Liste ayıracı olarak (ListSeperator) noktalı virgü ( ; ) kullanılmıştır.
Otomatik kaydetmeye başla:
Deneme sonucu csv dosya istediğiniz şekilde oluşuyorsa otomatik kaydetme işine geçebilirsiniz.
Otomatik kaydetme sürecinde kaydedilen sayfanın ismi ve başlık satırı numarası haricinde; başlık satırına kolon ekleyip çıkarmak da dahil; dosya üzerinde istediğiniz işlemi yapabilirsiniz.
Dosya kapanışta (Workbook_BeforeClose içerisinden) kendini kaydedecektir.
"Zamanlanmış Görevleri Durdur" düğmesine basarak aktif olan süreci durdurabilirsiniz.
Excel dosya açık olduğu durumda ve görev aktif olduğu sürece belirlenen zaman aralığında sürekli olarak yeni csv dosya kaydetme işlemi devam edecektir.
Excel dosyayı indirme linki.. SaveAsCSV.rar
Makro içeren Excel 97 çalışma kitabı.
Binlerce kere teşekkür ederim, İngilizce sitelerde bulamayacağım kadar bilgili ve yardımseversiniz. Umarım bu iş için fazla zamanınızı ya da uykunuzu almamışımdır.
Elinize sağlık tam olarak istediğim gibi olmuş. Şu an yaşanan tek problem her kayıtta farklı isim koyması.
csv filename istenen tablo ismi + tarih + saat şeklinde. Tablo 1 2013.02.13.144838.csv gibi.
Sadece tablo ismi olarak kalmalı ki binlerce dosya oluşmasın. Bunu da yapabiliriz değil mi ?
Forum Kurallarını buraya tıklayarak okuyabilirsiniz
Borsanın Altın Kuralları Md. 6: "Seans içinde karar vermeyin. Kararlarınızı, etkilenmeyeceğiniz bir ortamda verin. Seans anında görüşlerinize ters düşen hareketlerin planlarınızı etkilemesine izin vermeyin. Daha önce düşünmediğiniz yeni fikirler oluşturmayın. İyice incelenmeden yapılan hareketlerin genellikle zararla sonuçlandığı gözlenir."
Forumun Altın Kuralı : Forumda okuduğunuz bilgileri fikir vermesi amacıyla ve mantık süzgecinden geçirerek değerlendirin. Hiç kimse sizi tanımadan size para kazandırmak heveslisi değildir. Hayatta karşılaşmadığınız ve adını soyadını dahi bilmediğiniz bir kişinin tavsiyesi ile senet almaya kalkışmayın, sonu %99 hüsran olacaktır.
Not: Forumumuzda dini ve siyasi ile futbol taraftarlığı yazıları kabul edilmiyor.
Rica ederim.
Sadece "Tabloİsmi.csv" olarak: SaveAsCSVSingleFile
Benimde excel ile bir sorum olacaktı .
Temettü oranları güncelleme için kullandığım excel ile
Günlük hisse adı fiyat vs bilgisinin tutulduğu excel dosyam var .
İki tane excel dosyasındaki a kolonlardaki adları eşitse .
O günkü kapanış değerlerini alıp benim temettü excelimdeki değerleri güncellemesini istiyorum .
Bunu nasıl yapabilirim .
Excel bilgi yeterli olmadığı için oracle veritabanına verileri atıp çok kolay yapabiliıyorum ama excelde nasıl yaparım onu bilemiyorum .
Yardımcı olacak arkadaşlara şimdiden teşekurler eder .
İyi Çalışmalar dilerim .
Merhaba Pscyokinesis Hocam, anlattığınız tam olarak düşeyara() formülünün kullanımını tarif ediyor sanki. Ama eğer günlük dosya isimleri sürekli değişiyorsa bugün() gibi tarih formüllerinden faydalanarak her gün kullanılacak düşeyara() formülünü değiştirmek mümkün.
Dosya isimleri ile ilgili bilgi verirseniz örnek üzerinden size bir formül yazabilirim.
İyi haftasonları...
Topik neredeyse iki senedir sessiz kalmış.
Yıllardır uygulamaların VBA arabirimini kullanırım fakat bu sorunu hiç yaşamamıştım.
Office 2013 VBA menüleri uçmuş; Çince midir, Japonca mı farklı bir dil mi bilmiyorum, sorunu çözemedim bir türlü.
Bir bilen vardır belki, bu menüleri nasıl geri getireceğim.