Userform'dan başka bir çalışma kitabını açma

Katılım
6 Eylül 2007
Mesajlar
655
Excel Vers. ve Dili
excel 2016 32 Bit ve Excel 2020 32 Bit Türkçe ve İngilizce
Altın Üyelik Bitiş Tarihi
10-12-2024
Arkadaşlar mrb; şöyle bir sorunum var;
Bir UserForm'dan başka bir çalışma kitabını açmak istiyorum, ancak bu çalışma kitabı açık ise onun açık olan sayfasına gitsin , eğer açık değil ise anasayfasını açsın.
Bu arada her iki işlemde'de çalıştığım kitap kapansın istiyorum.
Böyle bir kod'a ihtiyacım var.Teşekkürler;
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,018
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Aşağıdaki kodu deneyiniz.

Kod:
Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    Set Dosya = Nothing
    On Error Resume Next
    Set Dosya = Workbooks("DENEME2.xlsm")
    On Error GoTo 0
    
    If Not Dosya Is Nothing Then
        Unload Me
        Dosya.Activate
        ThisWorkbook.Close 1
    Else
        Unload Me
        Set Dosya = Workbooks.Open(ThisWorkbook.Path & "\DENEME2.xlsm")
        Dosya.Activate
        ThisWorkbook.Close 1
    End If
    Application.ScreenUpdating = True
End Sub
 
Katılım
6 Eylül 2007
Mesajlar
655
Excel Vers. ve Dili
excel 2016 32 Bit ve Excel 2020 32 Bit Türkçe ve İngilizce
Altın Üyelik Bitiş Tarihi
10-12-2024
Korhan bey; çok teşekkürler tam istediğim gibi olmuş :)
 

kaos3

Altın Üye
Katılım
30 Haziran 2008
Mesajlar
62
Excel Vers. ve Dili
excel 2010 tr
Altın Üyelik Bitiş Tarihi
03-01-2026
Aşağıdaki kodu deneyiniz.

Kod:
Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    Set Dosya = Nothing
    On Error Resume Next
    Set Dosya = Workbooks("DENEME2.xlsm")
    On Error GoTo 0
   
    If Not Dosya Is Nothing Then
        Unload Me
        Dosya.Activate
        ThisWorkbook.Close 1
    Else
        Unload Me
        Set Dosya = Workbooks.Open(ThisWorkbook.Path & "\DENEME2.xlsm")
        Dosya.Activate
        ThisWorkbook.Close 1
    End If
    Application.ScreenUpdating = True
End Sub
Korhan Bey Merhaba, konuyu yeniden canlandırıyorum ama bu çalışma kitabını User Formda bir framein içinde açtırmamız mümkünmüdür?
 

kaos3

Altın Üye
Katılım
30 Haziran 2008
Mesajlar
62
Excel Vers. ve Dili
excel 2010 tr
Altın Üyelik Bitiş Tarihi
03-01-2026
Korhan Hocam Merhabalar,
Kısaca anlatmak gerekirse;
Ekteki dosyada user isimli çalışma kitabında Butona tıkladığımda açılan bir bir user form var.
user formda;
Form1 butonuna tıkladığımda FORM1 isimli çalışma kitabının 1. sayfasını Userformda Frame1 de açsın
Form2 butonunda tıkladığımda FORM2 isimli çalışma kitabının 2.sayfasını Userformda Farem1 de açsın istiyorum.
Burada Frame yerine Multıpage yada başka ne kullanılır bilmiyorum.
Benim istediğim user formda başka çalışma kitabının sayfasını açmak ve o sayfada veri girişi yapmak.
Bu işlem mümkün müdür?
Tam olarak amacınız nedir?
Korhan Hocam Merhabalar,
Kısaca anlatmak gerekirse;
Ekteki dosyada user isimli çalışma kitabında Butona tıkladığımda açılan bir bir user form var.
user formda;
Form1 butonuna tıkladığımda FORM1 isimli çalışma kitabının 1. sayfasını Userformda Frame1 de açsın
Form2 butonunda tıkladığımda FORM2 isimli çalışma kitabının 2.sayfasını Userformda Farem1 de açsın istiyorum.
Burada Frame yerine Multıpage yada başka ne kullanılır bilmiyorum.
Benim istediğim user formda başka çalışma kitabının sayfasını açmak ve o sayfada veri girişi yapmak.
Bu işlem mümkün müdür?
 

Ekli dosyalar

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
617
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029
Korhan Hocam Merhabalar,
Kısaca anlatmak gerekirse;
Ekteki dosyada user isimli çalışma kitabında Butona tıkladığımda açılan bir bir user form var.
user formda;
Form1 butonuna tıkladığımda FORM1 isimli çalışma kitabının 1. sayfasını Userformda Frame1 de açsın
Form2 butonunda tıkladığımda FORM2 isimli çalışma kitabının 2.sayfasını Userformda Farem1 de açsın istiyorum.
Burada Frame yerine Multıpage yada başka ne kullanılır bilmiyorum.
Benim istediğim user formda başka çalışma kitabının sayfasını açmak ve o sayfada veri girişi yapmak.
Bu işlem mümkün müdür?
belki işinize yarar. uyarlama yaparsınız.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,018
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Paylaşılan videoda CLASS kullanılarak işlem yapılmış...

Daha önce forumda linkteki gibi paylaşım yapılmış. Ama sanırım artık Spreadsheet eklentisi kullanılamıyor.


Bunun dışında farklı dosyadaki verileri ListBox üzerinde gösterebilirsiniz. Sonra satır seçerek ADO-UPDATE sorgusu ile verileri güncelleyebilirsiniz.

Forumda örnekleri olması lazım... Arama yaparsanız ulaşabilirsiniz.
 
Katılım
11 Temmuz 2024
Mesajlar
335
Excel Vers. ve Dili
Excel 2021 Türkçe
Şöyle bir yöntem çözüm olur mu emin değilim ancak yedek alıp deneme yapabilirsiniz.

Sistemi kullanabilmek için aşağıdaki Excel dosyalarının aynı klasörde bulunması gerekmekte:
USER.xlsm
FORM1.xlsm
FORM2.xlsm

Userform oluşturduktan sonra ( Insert - Userform sekmesinden: MultiPage kontrolü -2 sayfalı- , 2 adet CommandButton -Form1 ve Form2 için-, 1 adet Frame -verilerin gösterileceği alan-)

Sonrasından aşağıda vereceğim VBA kodunu ekleyin.

Denemeyi yedek aldıktan sonra şöyle yapabilirsiniz hocam; USER.xlsm dosyasını açın "UserForm'u Aç" butonuna tıklayın, MultiPage kontrolünde "Form1" veya "Form2" sekmelerini seçerek ya da "FORM1'i Aç" veya "FORM2'i Aç" butonlarına tıklayarak ilgili formları görüntüleyebilirsiniz. Veriler üzerinde değişiklik yapabilir ve "Değişiklikleri Kaydet" butonuna tıklayarak değişiklikleri ilgili dosyaya kaydedebilirsiniz.

Kod:
Option Explicit

Private Sub UserForm_Initialize()
    Me.MultiPage1.Pages(0).Caption = "Form1"
    Me.MultiPage1.Pages(1).Caption = "Form2"
    YukleSayfa "FORM1", 1
End Sub

Private Sub CommandButton1_Click()
    YukleSayfa "FORM1", 1
End Sub

Private Sub CommandButton2_Click()
    YukleSayfa "FORM2", 2
End Sub

Private Sub MultiPage1_Change()
    If MultiPage1.Value = 0 Then
        YukleSayfa "FORM1", 1
    Else
        YukleSayfa "FORM2", 2
    End If
End Sub

Private Sub YukleSayfa(calismaKitabiAdi As String, sayfaNo As Integer)
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim rngVeri As Range
    Dim satirSayisi As Integer, sutunSayisi As Integer
    Dim i As Integer, j As Integer
    Dim tb As MSForms.TextBox
    Dim lblHeader As MSForms.Label
    Dim satirYuksekligi As Single
    Dim sutunGenisligi As Single
    
    TemizleFrame

    On Error Resume Next
    Set wb = Workbooks(calismaKitabiAdi & ".xlsm")
    If wb Is Nothing Then
        Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & calismaKitabiAdi & ".xlsm", ReadOnly:=False)
    End If
    On Error GoTo 0
    
    If wb Is Nothing Then
        MsgBox "Çalışma kitabı bulunamadı: " & calismaKitabiAdi & ".xlsm", vbExclamation
        Exit Sub
    End If
    
    On Error Resume Next
    Set ws = wb.Worksheets(sayfaNo)
    On Error GoTo 0
    
    If ws Is Nothing Then
        MsgBox "Sayfa bulunamadı: " & sayfaNo, vbExclamation
        Exit Sub
    End If
    
    Set rngVeri = ws.Range("A1:E10")
    satirSayisi = rngVeri.Rows.Count
    sutunSayisi = rngVeri.Columns.Count
    satirYuksekligi = Frame1.Height / (satirSayisi + 1)
    sutunGenisligi = Frame1.Width / sutunSayisi
    
    For j = 1 To sutunSayisi
        Set lblHeader = Me.Controls.Add("Forms.Label.1", "lblHeader_" & j)
        With lblHeader
            .Caption = rngVeri.Cells(1, j).Value
            .Left = Frame1.Left + (j - 1) * sutunGenisligi
            .Top = Frame1.Top + 5
            .Width = sutunGenisligi
            .Height = satirYuksekligi
            .BackColor = RGB(200, 200, 200)
            .BorderStyle = 1
        End With
    Next j
    
    For i = 2 To satirSayisi
        For j = 1 To sutunSayisi
            Set tb = Me.Controls.Add("Forms.TextBox.1", "txtCell_" & i & "_" & j)
            With tb
                .Text = rngVeri.Cells(i, j).Value
                .Left = Frame1.Left + (j - 1) * sutunGenisligi
                .Top = Frame1.Top + (i - 1) * satirYuksekligi + satirYuksekligi
                .Width = sutunGenisligi
                .Height = satirYuksekligi
                .Tag = ws.Name & "|" & rngVeri.Cells(i, j).Address
            End With
        Next j
    Next i
    
    Dim btnKaydet As MSForms.CommandButton
    Set btnKaydet = Me.Controls.Add("Forms.CommandButton.1", "btnKaydet_" & calismaKitabiAdi)
    With btnKaydet
        .Caption = "Değişiklikleri Kaydet"
        .Left = Frame1.Left
        .Top = Frame1.Top + Frame1.Height + 10
        .Width = 150
        .Height = 25
        .Tag = calismaKitabiAdi
    End With
    
    With btnKaydet
        .OnClick = "KaydetButonuTikla"
    End With
End Sub

Private Sub TemizleFrame()
    Dim ctrl As Control
    Dim i As Integer
    
    For i = Me.Controls.Count - 1 To 0 Step -1
        On Error Resume Next
        Set ctrl = Me.Controls(i)
        If TypeOf ctrl Is MSForms.TextBox Or _
           TypeOf ctrl Is MSForms.Label Or _
           (TypeOf ctrl Is MSForms.CommandButton And Left(ctrl.Name, 10) = "btnKaydet_") Then
            Me.Controls.Remove i
        End If
        On Error GoTo 0
    Next i
End Sub

Private Sub KaydetButonuTikla()
    Dim calismaKitabiAdi As String
    calismaKitabiAdi = Me.ActiveControl.Tag
    Dim ctrl As Control
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim adresBilgisi As Variant
    Dim sayfaAdi As String
    Dim hucreBilgisi As String
    
    Set wb = Workbooks(calismaKitabiAdi & ".xlsm")
    
    For Each ctrl In Me.Controls
        If TypeOf ctrl Is MSForms.TextBox And ctrl.Tag <> "" Then
            adresBilgisi = Split(ctrl.Tag, "|")
            sayfaAdi = adresBilgisi(0)
            hucreBilgisi = adresBilgisi(1)
            Set ws = wb.Worksheets(sayfaAdi)
            ws.Range(hucreBilgisi).Value = ctrl.Text
        End If
    Next ctrl
    MsgBox "Değişiklikler kaydedildi!", vbInformation
End Sub

' Ana modülde kullanılacak kod
Public Sub AcUserForm()
    UserForm1.Show
End Sub
 
Üst