Genel Bakış
UpdateFromFile (Workbook.UpdateFromFile yöntemi), açık duran bir çalışma kitabını diskteki en son kaydedilmiş kopyasından günceller. Özellikle salt okunur açılan ve başkaları tarafından değiştirilebilen paylaşımlı raporlarda, kitabı kapatıp yeniden açmadan güncel içeriği almak için kullanılır. Yöntemin parametresi yoktur ve değer döndürmez.
Yöntemi çağırmadan önce şu iki özelliğe bakın:
B2 hücresinde ReadOnly değeri (YANLIŞ), B3 hücresinde Saved değeri (YANLIŞ) görünür. B4 hücresindeki (Çağrılmadı) metin, UpdateFromFile çağrısının yapılıp yapılmadığını gösterir. Kitap salt okunur değilse çağrı hiç yapılmaz; bu, gereksiz hata almanızı önler.
Yalnızca ilk satırda hem ReadOnly hem Saved değeri TRUE olduğundan karar D2 hücresinde (UpdateFromFile çağrılabilir) çıkar. İkinci satırda (Bekleyin: kaydedilmemiş değişiklik var) kaydedilmemiş değişiklik bulunduğu için beklenir. Son iki satırda (Gerekmez: kitap salt okunur değil ve Gerekmez: kitap salt okunur değil) kitap salt okunur olmadığından güncellemeye gerek kalmaz.
Makro ilk çalıştırmada dosyayı salt okunur açar. Sonraki çalıştırmalarda kitap açıksa ve Saved değeri True ise UpdateFromFile ile diskteki en son kayıtlı sürüm alınır. Kaydedilmemiş değişiklik varsa kullanıcıya iletiyle bilgi verilir ve kitaba dokunulmaz. Bu örnek dosya açma ve MsgBox içerdiği için sayfada çalıştırılmamıştır.
Söz dizimi
UpdateFromFile bir Workbook nesnesinin yöntemidir:
VBA
5 satır
ifade.UpdateFromFile
' Örnek
ThisWorkbook.UpdateFromFile
Workbooks("Satis.xlsx").UpdateFromFile
- ifade: Bir Workbook nesnesini veren ifade (ThisWorkbook, ActiveWorkbook, Workbooks("Ad") ya da bir nesne değişkeni). Zorunludur.
- Parametre: Yöntemin parametresi yoktur.
- Dönüş değeri: Yoktur. Başarı ya da başarısızlık, çalışma zamanı hatasıyla anlaşılır.
Nasıl çalışır ve ne zaman kullanılır
Yöntem, açık kitabın içeriğini diskteki son kayıtlı kopyayla değiştirir. Bu nedenle kitapta kaydedilmemiş değişiklik bulunmaması beklenir; kaydedilmemiş değişiklik varsa güncelleme yapılmayabilir ya da hata oluşabilir. Bu yüzden çağırmadan önce kitabın durumunu denetlemek iyi bir alışkanlıktır.Yöntemi çağırmadan önce şu iki özelliğe bakın:
- ReadOnly: Kitap salt okunur açıldıysa True döner. Güncel veriyi izleyen rapor kitaplarında asıl kullanım alanı budur.
- Saved: Kitapta son kayıttan beri değişiklik yoksa True döner. False ise kullanıcının kaybolabilecek değişiklikleri vardır.
Hata yönetimi ve sınırlar
Dosya başka bir kullanıcı ya da süreç tarafından kilitlenmişse, ağ bağlantısı kopmuşsa veya dosya taşınmış ya da silinmişse çağrı hata verir. Üretim kodunda çağrıyı On Error ile sarın, Err.Number ve Err.Description değerlerini kontrol edin. Yöntem yalnızca çağrıldığı kitabı etkiler; kitabın dış bağlantılarını ya da veri sorgularını yenilemez. Bunlar için UpdateLink ve RefreshAll ayrıca kullanılır.1. Koşullu güncelleme ve durum denetimi
Bir standart modül ekleyin (Alt+F11, sonra Ekle > Modül (Insert > Module)) ve kodu yapıştırın. Makro kitabın salt okunur ve kayıtlı olup olmadığını önce değişkenlere alır, sonra B2 ile B3 hücrelerine yazar. Yalnızca iki koşul birlikte sağlanırsa UpdateFromFile çağırır, sonucu B4 hücresine yazar.
VBA
32 satır
Option Explicit
Sub DurumKontrol()
Dim wb As Workbook
Dim ws As Worksheet
Dim saltOkunur As Boolean
Dim kayitli As Boolean
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Durum Kontrol")
' Durumu hücreye yazmadan önce alın: hücreye yazmak kitabı değiştirir ve Saved değerini False yapar
saltOkunur = wb.ReadOnly
kayitli = wb.Saved
' Mevcut durumu sayfaya yaz
ws.Range("B2").Value = saltOkunur
ws.Range("B3").Value = kayitli
ws.Range("B4").Value = "Çağrılmadı"
' Yalnız salt okunur ve kaydedilmemiş değişiklik yoksa güncelle
If saltOkunur And kayitli Then
On Error Resume Next
wb.UpdateFromFile
If Err.Number = 0 Then
ws.Range("B4").Value = "Çağrıldı"
Else
ws.Range("B4").Value = "Hata: " & Err.Description
End If
On Error GoTo 0
End If
End Sub
UpdateFromFile
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Denetim | Sonuç |
| 2 | Salt okunur mu | YANLIŞ |
| 3 | Kayıtlı mı (değişiklik yok) | YANLIŞ |
| 4 | UpdateFromFile durumu | Çağrılmadı |
Durum KontrolExcelDepo v1.0.0
2. Güncelleme kararını bir işleve taşımak
Aşağıdaki kodu standart modüle yapıştırın. Tabloda dört olası senaryo vardır. GuncellemeKarari işlevi, her satır için UpdateFromFile çağrılıp çağrılamayacağına karar verir ve sonucu D sütununa yazar. Gerçek bir uygulamada Uygun durumda wb.UpdateFromFile satırını bu işlevin çağrıldığı yere eklersiniz.
VBA
23 satır
Option Explicit
' Salt okunur ve kaydedilmiş durumuna göre karar metni üretir
Function GuncellemeKarari(ByVal saltOkunur As Boolean, ByVal kaydedildi As Boolean) As String
If Not saltOkunur Then
GuncellemeKarari = "Gerekmez: kitap salt okunur değil"
ElseIf Not kaydedildi Then
GuncellemeKarari = "Bekleyin: kaydedilmemiş değişiklik var"
Else
GuncellemeKarari = "UpdateFromFile çağrılabilir"
End If
End Function
Sub KararlariYaz()
Dim ws As Worksheet
Dim r As Long
Set ws = ThisWorkbook.Worksheets("Karar Tablosu")
For r = 2 To 5
ws.Cells(r, 4).Value = GuncellemeKarari(CBool(ws.Cells(r, 2).Value), CBool(ws.Cells(r, 3).Value))
Next r
End Sub
UpdateFromFile
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Senaryo | Salt Okunur | Kayıtlı | Karar |
| 2 | Paylaşılan rapor, değişiklik yok | DOĞRU | DOĞRU | UpdateFromFile çağrılabilir |
| 3 | Paylaşılan rapor, değişiklik var | DOĞRU | YANLIŞ | Bekleyin: kaydedilmemiş değişiklik var |
| 4 | Yerel dosya, değişiklik yok | YANLIŞ | DOĞRU | Gerekmez: kitap salt okunur değil |
| 5 | Yerel dosya, değişiklik var | YANLIŞ | YANLIŞ | Gerekmez: kitap salt okunur değil |
Karar TablosuExcelDepo v1.0.0
3. Salt okunur rapor kitabını açıp yenilemek
Bu örnek dosya açtığı için Excel'de otomatik çalıştırılmaz; kodu standart modüle yapıştırıp kendi dosya yolunuzla deneyin. Makro, ağda paylaşılan satış raporunu salt okunur açar. Daha sonra aynı makro tekrar çalıştırıldığında açık kitap zaten bulunduğu için doğrudan UpdateFromFile ile güncel veriyi alır. Yanındaki tablo, raporun yapısını örnekler.
VBA
24 satır
Option Explicit
Sub RaporuGuncelle()
Dim wb As Workbook
On Error Resume Next
Set wb = Workbooks("Satis.xlsx")
On Error GoTo 0
If wb Is Nothing Then
' Kitap açık değilse salt okunur aç
Set wb = Workbooks.Open(Filename:="C:\Raporlar\Satis.xlsx", ReadOnly:=True)
ElseIf wb.Saved Then
' Kitap açık ve değişiklik yoksa diskteki son sürümü al
On Error Resume Next
wb.UpdateFromFile
If Err.Number <> 0 Then
MsgBox "Güncelleme yapılamadı: " & Err.Description
End If
On Error GoTo 0
Else
MsgBox "Kitapta kaydedilmemiş değişiklik var, güncelleme yapılmadı."
End If
End Sub
UpdateFromFile
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Rapor | Bölge | Satış |
| 2 | Ocak Satış Özeti | Marmara | 125.000,00 |
| 3 | Ocak Satış Özeti | Ege | 84.500,00 |
| 4 | Ocak Satış Özeti | İç Anadolu | 97.250,00 |
| 5 | Ocak Satış Özeti | Akdeniz | 61.800,00 |
Rapor ListesiExcelDepo v1.0.0
Kullanırken dikkat edin
- Önce durumu denetleyin: Çağırmadan önce ReadOnly ve Saved özelliklerini kontrol edin. Kaydedilmemiş değişikliği olan bir kitapta yöntem hata verebilir ya da çalışmanın bir kısmı kaybolabilir.
- Hiç kaydedilmemiş kitap: Diskte kopyası bulunmayan, yeni oluşturulmuş bir kitapta güncellenecek bir dosya yoktur. Bu durumda çağrı hata verir; hatayı On Error ile yakalayın.
- Dış bağlantılar yenilenmez: UpdateFromFile kitabın kendisini diskten yeniler; kitaptaki dış bağlantıları, sorguları ve pivot tabloları ayrıca yenilemez. Bunlar için UpdateLink ya da RefreshAll kullanın.
- Hata ve kilit durumları: Dosya ağda başka bir süreç tarafından kilitliyse, taşınmışsa ya da silinmişse çağrı çalışma zamanı hatasıyla sonlanır. Kullanıcıya anlaşılır bir ileti göstermek için Err.Description değerini kullanın.
- Parametre yok, dönüş değeri yok: Yöntemin sonucunu bir değişkene atamaya çalışmayın. Güncellemenin başarılı olup olmadığını hata oluşup oluşmadığına bakarak anlarsınız.
- İlgili konular: Workbook.ReadOnly özelliği, Workbook.Saved özelliği, Workbooks.Open yöntemi ve ReadOnly bağımsız değişkeni, Workbook.Close yöntemi, Workbook.UpdateLink yöntemi, Workbook.RefreshAll yöntemi, Application.DisplayAlerts özelliği, On Error deyimi.