• DİKKAT

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

Değişkene Bağlı Çalışma Kitabı Açıksa Son Halini Kaydet ve Ekrana Getir, Açık Değilse Aç.

ToHaNS

Altın Üye
Katılım
29 Haziran 2015
Mesajlar
29
Excel Vers. ve Dili
Office 365 TR
Arkadaşlar merhaba, tam olarak yapmak istediğim şey kullanıcı olur da kitap ismi değişken olarak atanmış kitabını manuel olarak açar ve kendince düzenler kaydetmeyi unutursa, sonra da ana sayfa üzerinden makro ile işlem yapmaya kalkarsa manuel girdiği veriler kaybolmasın

Eğer çalışma kitabı açıksa pencereyi ekrana getir verileri kaydet, sonra kodlara devam et, eğer açık değilse de aç ve pencereyi aktif et işleme devam et şeklinde ilk yardım rica ettiğim konu bu.

Diğeri ise kodun son satırında başka alternatif bilmediğim için onu yazdım. DosyaAdı olarak tanımladığım değişkene ait pencereyi aktif etmesini istiyorum, 3-5 tane excel çalışma kitabı açık olunca problem çıkartır mı? "ActiveWindow.ActivateNext" Komutu deneme yanılma ile windows(DosyaAdı).Activate şeklinde bir kaç alternatif denedim muvaffak olmadım.
Kod:
Sub İşlemKayıt()

If [B4] = "" Then
    MsgBox ("Lütfen işlem yapmak istediğiniz kişiyi seçiniz."), vbInformation, " Kişi Seç"
    [B4].Select
    Else
    If [B9] = "" Then
    MsgBox ("Lütfen 'Tarih' giriniz"), vbInformation, " Tarih Giriniz"
    [B9].Select
    Else
    If [B10] = "" Then
    MsgBox ("Lütfen 'İşlem Türü' seçiniz"), vbInformation, " İşlem Türü"
    [B10].Select
    Else
    If [b11] = "" Then
    MsgBox ("Lütfen 'İşlem Detayı' belirleyiniz"), vbInformation, " İşlem Detayı"
    [b11].Select
    Else
    If [B12] = "" Then
    MsgBox ("Lütfen 'Detay Bilgisi' giriniz"), vbInformation, " Detay Bilgisi"
    [B12].Select
    
    Else
    Dim Kişi, DosyaAdı As Variant
    Kişi = Sheets("İşlemler").Range("b4")
    DosyaAdı = Sheets("Sabitler").Range("u1") & Kişi & ".xlsm"
    Application.DisplayAlerts = False
   If Workbooks.Open(DosyaAdı).ReadOnly = True Then
        Workbooks(DosyaAdı).Close SaveChanges:=True
    Application.DisplayAlerts = True
    Else
    Sheets("Detay").Select
    Application.Goto Reference:="R100000C1"
    Selection.End(xlUp).Select
    ActiveCell.Range("A1:P1").Select
    Selection.Copy
    ActiveCell.Offset(1, 0).Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    ActiveCell.Select
    Application.CutCopyMode = False
    Windows("AnaSayfa.xlsm").Activate 'Bu isim sabit buralarda sıkıntı yok çalışıyor
    Range("B9:B11").Select
    Selection.Copy
  
   ActiveWindow.ActivateNext' Bu kısım için DosyaAdı değişkenine Ait çalışma kitabı penceresini aktifleştir
 
Çok mu imkansız bir şey istiyorum acaba? 3 gündür kendim araştırdım bulamayınca dedim herhalde doğru anahtar kelimeleri bulamıyorum diye düşündüm. Burada sormak istedim.

Yok mu bir hayır sahibi konunun ehli arkadaş :)
 
Merhaba
Kodlarınızdaki
DosyaAdı = Sheets("Sabitler").Range("u1") & Kişi & ".xlsm"
satırı ile değişkene alınan dosya adı açık ve (3-5 tane açık dosya içinden) geri planda kalıyor ve onu aktif olmasını istiyorsanız
ActiveWindow.ActivateNext
yerine
workbooks(dosyaadı).activate
ile yapabilirsiniz
Üstteki şu satırı değiştirin
("Variant" yerine "string")

Dim Kişi as string, DosyaAdı As string
 
Son düzenleme:
Aşağıdaki şekildede; ("dosyaadı") işlem yapılıp kaydedilmemiş açık ise mesajla bidirir
Kod:
If Workbooks(dosyaadı).Saved = False Then
Workbooks(dosyaadı).Activate
sor = MsgBox(dosyaadı & " kaydedilmemiş Kaydedilsnmi?", vbYesNo)
If sor = vbYes Then Workbooks(dosyaadı).Save
Else
MsgBox dosyaadı & " dosyası kaydedilmiş"
End If
 
Olmadı Maalesef, ya da ben mi beceremedim bilemiyorum. Kodu tam olarak benim kodda hangi araya ekleyeceğim. Ben mi yanlış konumlandırdım acaba
 
Merhaba,

Aşağıdaki kod ile dosya açıkmı kontrol edebilirsiniz.

C++:
    Dim Kişi, DosyaAdı As String, K1 As Workbook
    Kişi = Sheets("İşlemler").Range("b4")
    DosyaAdı = Sheets("Sabitler").Range("u1") & Kişi & ".xlsm"
    On Error Resume Next
    Set K1 = Workbooks(DosyaAdı)
    On Error GoTo 0
    If K1 Is Nothing Then
        Set K1 = Workbooks.Open(DosyaAdı, False, False)
    Else
        K1.Activate
    End If
 
Yardımlarınız için teşekkür ederim. Beceremedim, bir uyarı mesajıyla kullanıcıyı uyardım. Her şeyin de kusursuz olmasına gerek yok, biraz da kullanan dikkat etsin :)
 
Geri
Üst