file baru yg sudah ada macronya

  1. 3 bulan yang lalu
    Di sunting 3 bulan yang lalu oleh bejo

    Yth. All Master BE.Org yg semoga selalu dalam keadaan Sehat Sejahtera beserta keluarga Bahagianya,
    saya belajar membuat Form Penilaian, yg hasil dari file tersebut adalah create new file yg sudah ada datanya.

    pertanyaan
    dapatkah pada file yg baru tersebut saya selibkan macro pada workbookk agar nama filenya tidak dapat dirubah??
    Terima kasih Sebelumnya

  2. Caton

    Mar 30 Terverifikasi Indonesia + 18.633 Poin

    Mas @bejo ...

    Untuk pertanyaan :

    ... dapatkah pada file yg baru tersebut saya selibkan macro pada workbookk ...

    jawabannya, bisa. Asal Workbook tersebut disimpan dengan format Macro Enabled, misalkan :

    ...
    Dim xVBComponent As VBIDE.VBComponent
    Dim xVBCodeModule As VBIDE.CodeModule
    Dim sScript As String, sFilePath As String
    Dim xlNewWB As Workbook
    
    sFilePath = ThisWorkbook.Path & "\NamaFilenya.xlsm"
    
    Set xlNewWB = Application.ActiveWorkbook
    Set xVBComponent = xlNewWB.VBProject.VBComponents.Add(vbext_ct_StdModule)
    xVBComponent.Name = "modMain"
            
    Set xVBCodeModule = xVBComponent.CodeModule
    sScript = InitScriptsText()
    xVBCodeModule.InsertLines xVBCodeModule.CountOfLines + 1, sScript
            
    xlNewWB.SaveAs sFilePath, xlOpenXMLWorkbookMacroEnabled
    ...

    Baris sScript = InitScriptsText() merupakan perintah untuk mengambil teks script dari prosedur InitScriptsText, misalkan seperti berikut :

    Private Function InitScriptsText() As String
        Dim sScript As String
        
        sScript = vbNullString
        sScript = sScript & "Option Explicit" & vbCrLf & vbCrLf
        sScript = sScript & "Public Sub Auto_Open()" & vbCrLf
        sScript = sScript & "MsgBox ""Halo...!""" & vbCrLf
        sScript = sScript & "End Sub"
    
        InitScriptsText= sScript
        
    End Function

    Untuk fungsi InitModuleAutoOpen tersebut, bisa digantikan dengan script untuk membaca file modul eksternal yang akan disisipkan, misalkan :

    Private Function InitScriptsText() As String
        Dim xFSO As Object, xFileToRead As Object
        Dim sFile As String, sScript As String
        
        sFile = ThisWorkbook.Path & "modMain.bas"
        Set xFSO = CreateObject("Scripting.FileSystemObject")
        Set xFileToRead = xFSO.OpenTextFile(sFile, 1)
        
        sScript = xFileToRead.ReadAll
        xFileToRead.Close
    
        InitScriptsText= sScript    
    End Function

    Initinya, variabel sScript harus berisi script VBA yang akan disisipkan ke dalam modul, jadi bisa variabel tersebut bisa diisi secara langsung, atau diisi melalui prosedur (fungsi) seperti contoh di atas.

    Sedangkan untuk pertanyaan :

    ... agar nama filenya tidak dapat dirubah ...

    Saya tidak tahu apakah ini memungkinkan. Kalau Workbook (file Excel) sudah ditutup, saya yakin pengguna bisa mengubah nama Workbook (file Excel) tersebut dengan mudah. Kalau mas punya triknya, bisa dong dibagikan?

    Demikian.

  3. Saya kasi contoh saveAs (xlsm) dan saveAs (xlsx), bisa dilihat perbedaannya.
    Kalau file tidak bisa diubah/pengguna tidak bisa menggubah nama Workbook (file Excel) bisa menggunakan teknik Ribbon dengan menonaktifkan beberapa fungsi yang digunakan (SaveAs, Rename, Copy, Cut dll) tetapi dampaknya akan terjadi pada file-file yang lain.

    Terima Kasih..

  4. Terima kasih banyak atas perhatian dan bantuann para master sekalian,
    @Caton
    akan saya pelajari master, masih belum fokus, terima kasih banyak

    Saya tidak tahu apakah ini memungkinkan. Kalau Workbook (file Excel) sudah ditutup, saya yakin pengguna bisa mengubah nama Workbook (file Excel) tersebut dengan mudah. Kalau mas punya triknya, bisa dong dibagikan?

    maksud saya ketika file dibuka dan di tutup kembali maka file macro akan menjalankan perintah macro pada workbook master.

    @Eunike Abigail
    terima kasih banyak master, akan saya pelajari

  5. Yth. master @Caton, saya bingung, script sebanyak itu saya letakkan dimana pada file yg saya upload,
    maaf kalau saya tidak cerdas. terima kasih sebelumnya

  6. Caton

    Mar 31 Terverifikasi Indonesia + 18.633 Poin
    Di sunting 3 bulan yang lalu oleh Caton

    Mas @bejo ...

    Jangan terlalu formal mas... Lagian saya juga bukan master. :)

    Terlampir contohnya, di modul UserForm1 pada baris-baris yang saya berikan komentar. Kalau script VBA yang ingin disisipkan cukup banyak, lebih baik scriptnya disimpan dalam file terpisah, lalu baca script pada file tersebut ke dalam variabel atau impor file ke dalam Workbook.

    Demikian.

  7. Terima kasih banyak master @caton, semoga Allah SWT, selalu mempermudah tugas2 anda.

  8. Caton

    Mar 31 Terverifikasi Indonesia + 18.633 Poin

    @bejo Terima kasih banyak master @caton, semoga Allah SWT, selalu mempermudah tugas2 anda.

    Aamiin. Semoga mas @bejo pun demikian.

 

atau Mendaftar untuk ikut berdiskusi!