Terima kasih Mr. Kid atas jawabannya. Semoga amal baiknya diterima disisiNya. Amiin.
No. 2 Saya sudah buat function berikut untuk menentukan apakah file di server dibuka di network atau di computer sendiri. Tapi belum dicoba. Tolong tanggapannya. Public Function FileTerbuka() As Boolean Dim alamatfilemaster As String alamatfilemaster = "\\AlamatServer\FolderServer\Subfolder\NamaFilenya.xlsx" FileTerbuka = False On Error GoTo not_open Workbooks(alamatfilemaster).Activate Exit Function not_open: MsgBox "File master terbuka di computer anda" & vbNewLine & vbNewLine & _ "Silahkan tutup file master dulu", vbInformation, "Info" FileTerbuka = True Err.Clear Resume Next End Function 5. Berarti kesimpulannya, setiap variable local maka akan dihancurkan VBA setelah keluar procedure. Berarti juga kalau set range di local procedure yg diperlukan hanya di local procedure, maka tidak perlu set range=nothing. Begitukah ? Contoh : Private sub contohsaja() Dim myrange as range Set myrange=Cells(1,1) ‘’Code lain….. Set myrange=nothing ‘’’--------> Karena myrange tidak diperlukan oleh procedure lain, ini tidak perlu. Benarkah ? End sub Nomor lain sudah puas jawabannya. Terima kasih atas jawabannya. Tambahan pertanyaan : 1. Apakah public variable juga harus di clear kan memory nya ? Contoh Public rangesaya as range Maka karena public variable juga dibutuhkan oleh procedure lain, maka di clear kan setelah form ditutup yakni dengan set rangesaya=nothing. Benarkah ? Terima kasih . Mohon jawabannya. Tio From: belajar-excel@yahoogroups.com [mailto:belajar-excel@yahoogroups.com] Sent: 17 Maret 2019 18:31 To: BeExcel Subject: Re: [belajar-excel] Cek file open di server apakah dibuka dikomputer sendiri atau di komputer orang lain No.. 2 Yup, pasti. Hanya cara bukanya bermacam-macam tergantung media yang digunakan. Kalau pakai workbooks.open berarti pakai cara excel melalui menu file open. Kalau pakai select * from namaLinkedServer...[nama_sheet$] berarti pakai linked server memanfaatkan data provider tertentu via sql server Kalau pakai objectConnection.open connectionstring berarti pakai ado object Kalau pakai Open filefullname for blbla (open statement) berarti pakai io file dan masih banyak lagi cara lain. Semua itu diawali dengan membuka si file. Ada yang tampak tampil dimata user, ada yang tidak. Semua juga bisa dipakai untuk cek apakah file tersebut sedang digunakan secara ekslusif di tempat lain atau tidak. Kalau dari dalam Excel (misal melalui VBA), ingin tahu file sedang terbuka atau tidak, lalu kalau tidak terbuka maka dilakukan proses buka file, yang paling aman adalah pakai Workbooks.Open, karena lebih mudah diatur dan mudah diprediksi hasilnya, apalagi untuk yang awam dengan programming. Tentang : "file yang dibuka ukurannya besar, jadi kalau buka file dulu, maka akan lama" > tergantung apa tujuan pemeriksaan terbuka dan tidaknya file. > kalau sekadar tahu saja dan tidak perlu melakukan sesuatu di dalam file > tersebut, bisa pakai cara lain, seperti open statement misalnya. > tapi kalau tujuan akhirnya, yaitu ketika tahu bahwa file tidak dibuka di > tempat lain, lalu ingin membuka dan melakukan sesuatu terhadapnya, ya tetap > pakai workbooks.open yang aman. Karena pada kondisi ingin membuka dan > melakukan sesuatu terhadap file itu, tidak akan ada bedanya antara cepat atau > lambatnya membuka file, karena hasil akhirnya ingin membuka file dan > melakukan sesuatu. No. 3 Sebelum diubah dengan memberi error handler : > bisa jadi ada pengubah error handler di bunyi baris kode di bagian Code lain > milik Anda Setelah diubah : > mestinya sudah tidak muncul error No. 4 Yang mana saja sesuai kebutuhan proses yang Anda buat. No. 5 Begitulah kira-kira. Prinsipnya, variabel dengan scope local akan dihancurkan oleh VB/VBA begitu proses sudah sampai diluar scope. Sedang untuk variabel dengan scope module atau yang lebih luas, tergantung alur proses utuhnya membutuhkan hal tersebut atau tidak. No. 6 Saya tidak tahu apa itu public events. Biasanya events itu diusahakan dengan scope modular. Regards, Kid Sent from my smart enough phone On Mar 17, 2019, at 01:27, Tio Adi Bayu Adjie tio.ad...@ptssb.co.id<mailto:tio.ad...@ptssb.co.id> [belajar-excel] <belajar-excel@yahoogroups.com<mailto:belajar-excel@yahoogroups.com>> wrote: Terima kasih banyak Mr. Kid atas jawabannya semoga amal baiknya diterima Allah SWT. Amiin. Pertanyaan lanjutan : 1. Mr. Kid menulis wbkF.Close False dimana wbkF adalah workbook yang isinya adalah nama file beserta path nya. Tapi yang saya baca di referensi lain adalah kalau menutup workbook, maka cukup dengan nama filenya saja tanpa path seperti workbooks(“namafilenya.xlsx”).close true. Mohon bimbingannya lagi, kapan saya harus menutup workbook dengan path dan kapan tanpa path ? 2. Berarti kalau mau tahu apakah file itu terbuka di computer saya atau di computer orang lain, saya harus buka file itu dulu ya ? Adakah code VBA yang bisa mengetahui itu tanpa harus buka file dulu ? Maaf karena file yang dibuka ukurannya besar, jadi kalau buka file dulu, maka akan lama . 3. Kalau ada kasus dengan code VBA seperti ini. Dim Alamatfile as string Dim Mywb as workbook,Wbbaru as workbook Dim wbbaruSh as worksheet,MywbSh as worksheet On error goto Keluar Alamatfile=”D:\\myfolder\mysubfolder\namafilesaya.xlsx” ‘’‘Buka file dari server BukaFile Alamatfile,"PasswordSaya" Set Mywb=ThisWorkbook Set Wbbaru=workbooks(“namafilesaya.xlsx”) Wbbaru.activate Set WbbaruSh=Wbbaru.worksheets(“mySheet”) With WbbaruSh .Cells(1,1).value=”XXX” ‘’‘Code lain…..…. End with Mywb.activate Set MywbSh=Mywb.worksheets(“mySheetJuga”) With MywbSh .Cells(1,1).value=”YYY” ‘’‘Code lain… End with Wbbaru.close true ---------------> Saya selalu error disini. Adakah yang salah dari coding saya ?padahal saya sudah modif dengan On error resume next ‘modif saya Wbbaru..Close true ‘modif saya Err.clear ‘modif saya On error goto 0 ‘modif saya Set mywb=nothing Set wbbaru=nothing Set wbbaruSh=nothing Set MywbSh=nothing Keluar: Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.DisplayAlerts = True Err.Clear On Error GoTo 0 End sub 4. Bagaimana urutan penulisan yang benar seperti contoh dibawah ini : Label dulu atau clear memory (set rg=nothing misalnya ) ? Private sub contohsaja() On error goto Keluar Set myrange=range(Cells(1,1),Cells(1,100)) Set myrange=nothing Keluar: Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End sub Atau…. Private sub contohsaja() On error goto Keluar Set myrange=range(Cells(1,1),Cells(1,100)) Keluar: Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Set myrange=nothing End sub Mana urutan penulisan yang benar. Label dulu atau clear memory (dengan set myrange=nothing) ? 5. Kalau mengurangi memory untuk range, dengan menulis diakhirnya set myRange=nothing. Bagaimana dengan worksheet apakah harus set mySheet=nothing ? Bagaimana juga dengan ukuran variable seperti Dim L as long dan ditulis di akhirnya L=empty atau variable byte, string apakah juga ditulis myString=vbnullstring ? 6. Bagaimana clear memory untuk Public Events ? Tolong diberi contoh clear memory untuk Public Events.. Terima kasih atas bimbingannya, semoga amal baiknya diterima Allah SWT. Amiin Tio From: belajar-excel@yahoogroups.com<mailto:belajar-ex...@yahoogroups..com> [mailto:belajar-excel@yahoogroups.com] Sent: 15 Maret 2019 9:03 To: BeExcel Subject: Re: [belajar-excel] Cek file open di server apakah dibuka dikomputer sendiri atau di komputer orang lain Public Sub BukaFile(Optional sFile As String, Optional sPwdOpen As String = vbNullString) Dim sMsgTxt As String, sMsgTitle As String, lMsg As Long, lTry As Long, wbkF As Workbook sMsgTxt = "Pembukaan ke-" sMsgTitle = "Buka File" lMsg = 20 If Len(sFile) * Len(Dir(sFile, vbNormal)) = 0 Then MsgBox "File tidak ada atau tidak dapat di akses.", vbExclamation, sMsgTitle Exit Sub End If Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Application.DisplayAlerts = False On Error GoTo Keluar Ulangi: lTry = lTry + 1 Set wbkF = Workbooks.Open(sFile, 0, True, Password:=sPwdOpen, IgnoreReadOnlyRecommended:=True, Notify:=False) wbkF.ChangeFileAccess xlReadWrite, Notify:=False If wbkF.ReadOnly Then wbkF.Close False If lTry Mod lMsg > 0 Then GoTo Ulangi If MsgBox(sMsgTxt & lTry, vbExclamation + vbRetryCancel + vbDefaultButton2, sMsgTitle & " : Read Only") = vbRetry Then GoTo Ulangi End If Keluar: Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.DisplayAlerts = True Err.Clear On Error GoTo 0 End Sub Cara pakai : BukaFile "path\file.extension","Pwd" On Thu, Mar 14, 2019 at 5:46 AM Tio Adi Bayu Adjie tio.ad...@ptssb.co.id<mailto:tio.ad...@ptssb.co.id> [belajar-excel] <belajar-excel@yahoogroups.com<mailto:belajar-excel@yahoogroups.com>> wrote: Dear Be-Exceller, Saya mau cek apakah file di server dibuka oleh orang lain atau dibuka dikomputer sendiri. File itu ada di server. Saya sudah bikin code nya tapi kok gak bisa ya ? Mohon bimbingannya. Ini code saya : Public function sFileAdaAccess(fname) as Boolean sFileAdaAccess = True If IsFileOpen(fname) = True Then Set wbbook = Workbooks(fname) If Not wbbook.ReadOnly = True Then MsgBox "Silahkan ditutup dulu File Master", vbExclamation, "File master terbuka" sFileAdaAccess = false Exit Function Else sFileAdaAccess = True End If Set wbbook = Nothing 'End If Public Function IsFileOpen(filename As String) As Boolean Dim filenum As Integer Dim errnum As Integer On Error Resume Next ' Turn error checking off.. ''''''''''''''''''''''''''''''''''''''''''' ' If we were passed in an empty string, ' there is no file to test so return FALSE. ''''''''''''''''''''''''''''''''''''''''''' If filename = vbNullString Then IsFileOpen = False Exit Function End If ''''''''''''''''''''''''''''''' ' If the file doesn't exist, ' it isn't open so get out now. ''''''''''''''''''''''''''''''' If Dir(filename) = vbNullString Then IsFileOpen = False Exit Function End If '''''''''''''''''''''''''' ' Get a free file number. '''''''''''''''''''''''''' filenum = FreeFile() ''''''''''''''''''''''''''' ' Attempt to open the file ' and lock it. ''''''''''''''''''''''''''' Err.Clear Open filename For Input Lock Read As #filenum '''''''''''''''''''''''''''''''''''''' ' Save the error number that occurred. '''''''''''''''''''''''''''''''''''''' errnum = Err.Number On Error GoTo 0 ' Turn error checking back on. Close #filenum ' Close the file. '''''''''''''''''''''''''''''''''''' ' Check to see which error occurred. '''''''''''''''''''''''''''''''''''' Select Case errnum Case 0 ''''''''''''''''''''''''''''''''''''''''''' ' No error occurred. ' File is NOT already open by another user. ''''''''''''''''''''''''''''''''''''''''''' IsFileOpen = False Case 70 ''''''''''''''''''''''''''''''''''''''''''' ' Error number for "Permission Denied." ' File is already opened by another user. ''''''''''''''''''''''''''''''''''''''''''' IsFileOpen = True ''''''''''''''''''''''''''''''''''''''''''' ' Another error occurred. Assume the file ' cannot be accessed. ''''''''''''''''''''''''''''''''''''''''''' Case Else IsFileOpen = True End Select End Function Kenapa tidak berhasil ? Mohon bimbingannya. Terima kasih. Tio