Wa'alaikumussalam wr wb
mas Nang,
melalui proses tersebut tidak dimungkinkan.
begini :
[image: imgVBAcopysht.gif]Dari gambar di atas :
1. Proses copy sheet di workbook yang sama dengan context menu milik tab
sheet
yaitu proses klik kanan tab sheet -> move or copy -> ke workbook yang
sama sebelum sheet tertentu -> centang create a copy -> OK
> hasilnya seperti gambar pojok kiri atas <myData.xlsx:1 [baca: file
myData.xlsx window 1 (yaitu di sheet DATA)]> ke gambar pojok kiri bawah
(myData.xlsx:2)
> sheet akan di-copy secara utuh (formula, format [termasuk conditional
formatting], dsb)
> memanfaatkan VBA, bisa dengan kode berbunyi seperti ini : (sesuaikan
object dengan keadaan setempat)
Sheet1.Copy after:=Sheets(Sheets.Count)
> jadi, ketika ingin hasilnya values tapi tetap menjaga semua format,
maka hasil copy sheet tersebut yang di-values dengan kode :
Sheets(Sheets.Count).usedrange.copy
Sheets(Sheets.Count).usedrange.pastespecial xlpastevalues
2. Proses copy sheet ke workbook baru dengan context menu milik tab sheet
yaitu proses klik kanan tab sheet -> move or copy -> pilih (new book)
-> centang create a copy -> OK
> hasilnya seperti gambar pojok kiri atas <myData.xlsx:1 [baca: file
myData.xlsx window 1 (yaitu di sheet DATA)]> ke gambar atas kedua dari kiri
(book2)
> sheet akan di-copy secara utuh (formula, format [termasuk conditional
formatting], dsb) ke workbook baru
> memanfaatkan VBA, perlu 2 proses, yaitu :
1. membuat workbook baru sebagai target
2. copy sheet dari file sumber ke workbook baru
> hal ini dimungkinkan karena workbook baru dibuat di instance Excel
yang sama (lihat gambar task manager), yaitu :
pada instance Microsoft Excel (3) berisi workbook bernama book2
(hasil buat workbook baru sebagai target lokasi paste) dan workbook
myData.xlsx (file sumber)
> terkadang, perlu juga untuk membuang sheets yang dibuat Excel saat
membentuk workbook baru.
> secara umum, baris kodenya begini :
Dim wbkb As Workbook, shta As Worksheet
Set shta = Sheet1
Set wbkb = Workbooks.Add
shta.Copy after:=wbkb.Sheets( wbkb.Sheets.count)
> jika butuh mem-values formula, maka lakukan copy paste values
terhadap object wbkb.Sheets( wbkb.Sheets.count)
3. Proses copy sheet ke workbook baru langsung hanya values-nya (tanpa
formula, tanpa conditional format, dsb)
> dilakukan dengan cara melakukan copy paste ke workbook baru yang ada
di-instance Excel yang berbeda
> hasilnya seperti gambar pojok kiri atas <myData.xlsx:1 [baca: file
myData.xlsx window 1 (yaitu di sheet DATA)]> ke gambar kanan bawah (book1)
> pada task manager, workbook myData.xlsx berada di instance Microsoft
Excel (3) [yang bawah], sedangkan workbook book1 berada di instance
Microsoft Excel [yang atas]
> memanfaatkan VBA, perlu 4 proses, yaitu :
1. membentuk Excel Application baru (instance Excel yang baru)
2. membentuk workbook baru dalam instance baru tersebut
3. meng-copy area range data di file sumber (instance Excel sumber)
4. mem-paste ke sheet target di workbook baru yang ada di instance
Excel yang baru
> secara umum, bunyi baris kode-nya begini :
Dim shta As Worksheet, xlapp2 As Excel.Application, wbkb As Workbook
Set shta = Sheet1
Set xlapp2 = New Excel.Application
xlapp2.Visible = True
Set wbkb = xlapp2.Workbooks.Add
shta.UsedRange.Copy
wbkb.Sheets(1).Paste
Set xlapp2 = Nothing
Dari uraian diatas, maka perlu penanganan tersendiri untuk mencegah
munculnya menu move or copy sheet di dalam context menu tab sheet.
Hal ini bisa dilakukan dengan cara mem-protect struktur workbook (cukup
strukturnya saja).
Proses proteksi pertama kali bisa dilakukan secara manual melalui menu
Review -> grup menu Protect -> Protect Workbook -> isi password -> centang
hanya Structure -> OK -> save workbook
Kemudian dalam proses copy sheet oleh VBA, diawali dengan baris :
thisworkbook.unprotect "passwordnya"
lalu sebelum proses selesai, dilakukan protek workbook kembali :
thisworkbook.protect "passwordnya", structure:=true
Kira-kira demikianlah...
Wassalamu'alaikum wr wb
Kid
On Wed, Jun 26, 2019 at 7:34 PM Agus [email protected] [belajar-excel] <
[email protected]> wrote:
>
>
> Assalamu'alaikum warahmatullah wabarakatuh,
> Mas Kid mau tanya:
> Kalau seandainya saya klik kanan di sheet, terus Move or copy .. pilih
> to_book :(newbook).
> bisa apa tidak diatur lewat vba hasil copyannya hanya values.
> Maksudnya mencegah orang lain untuk copy seluruh sheet, namun hanya copy
> values-nya saja.
> terima kasih
> Wasalamualaikum warahmatullah.
> Kenang Agus
>
>
> On 6/26/2019 10:34, 'Mr. Kid' [email protected] [belajar-excel] wrote:
>
>
> Hai Budi Priyo,
>
> 1. apakah ada protec nya menggunakan macro juga. dan apakah protec tsb
> tidak berpengaruh dengan macro yg ada
> *** yang ini terkait proteksi sheet dan proteksi cells
> > pastikan sheet tidak dalam keadaan ter-protect
> > blok seluruh cells (atau hanya cells tertentu yang akan disembunyikan
> formulanya) -> klik kanan cells terpilih -> format cells -> tab Protection
> -> centang Locked dan Hidden -> OK
> > lalu protect sheet secara manual
> > atau dengan baris kode berbunyi (jalankan di intermediate window [tekan
> ctrl G -> tulis baris kodenya -> tekan enter])
> sheets("nama sheetnya").protect "passwordnya"
> > jika ingin agar VBA bisa bekerja pada sheet terproteksi tanpa perlu
> membuka proteksi sheet, gunakan baris kode berikut ini :
> sheets("nama sheetnya")..protect "passwordnya", userinterfaceonly:=true
> > save workbook
>
> 2. apa bila sheet tersebut di copy (copysheet) formula yg ada dalam sheet
> tersebut tidak ikut alias values secara otomatis,
> *** yang ini terkait copy values sheet
> > buat sebuah general module -> buat sebuah blok prosedur jenis sub, misal
> bernama CopasValueSheet
> > jika sheet diproteksi secara manual atau dengan VBA tanpa opsi
> userinterfaceonly:=true, maka perlu di-unprotect dulu dengan baris kode :
> sheets("nama sheetnya").unprotect "passwordnya"
> > proses akan terdiri dari 2 bagian utama, yaitu copy sheet menjadi sheet
> baru, kemudian copy values nilai yang ada di hasil copy sheet tadi
> 'jika copy di workbook yang sama
> sheets("nama sheetnya").copy before:=sheets(1) 'copy sheet
> 'copy paste values hasil copy sheet
> sheets(1).usedrange.copy
> sheets(1).usedrange.pastespecial xlpastevalues
>
> 'jika copy ke workbook baru :
> dim wbka as workbook, wbkb as workbook
> set wbka=thisworkbook
> set wbkb=workbooks.add
> with wbkb
> wbka.sheets("nama sheetnya").copy before:= .sheets(1) 'copy
> sheet
> .sheets(1).usedrange.copy
> .sheets(1).usedrange.pastespecial xlpastevalues
> end with
> wbka.activate
>
> 3. dijalankan dengan macro di sheet
> *** ini tentang pemicu (event) yang digunakan agar VBA copy sheet diproses
> > sebaiknya diletakkan di modul Thisworkbook dengan event yang sesuai,
> misal event ketika cells a1 di double click (sila disesuaikan dengan
> kebutuhan setempat)
> > pada modul Thisworkbook -> di object Workbook -> buat event
> bernama Workbook_SheetBeforeDoubleClick -> isi dengan baris kode berikut
> (sesuaikan dengan keadaan setempat)
> if sht.name="nama sheetnya" then
> 'jalankan prosedur copy sheet, misal prosedur CopasValueSheet hasil
> nomor 2 di atas
> CopasValueSheet
> cancel=true
> endif
> > dengan begini, maka VBA code yang ada di sheet yang di-copy tidak akan
> terbawa ke hasil copy sheet
>
> Regards,
> Kid
>
>
> On Thu, Jun 20, 2019 at 11:28 AM Budi Priyo [email protected]
> <[email protected]> [belajar-excel] <[email protected]>
> wrote:
>
>>
>> Salam kenal, saya baru bergabung di sini dan ingin menanyakan,
>> Saya punya dokument yg dijalankan dengan macro di sheet dan apa bila
>> sheet tersebut di copy (copysheet) formula yg ada dalam sheet tersebut
>> tidak ikut alias values secara otomatis, apakah ada protec nya menggunakan
>> macro juga. dan apakah protec tsb tidak berpengaruh dengan macro yg ada,
>> karena dokument tersebut terdapat formula rahasianya.
>> Mohon rekan milis mungkin ada yg bisa bantu.
>> Sayaucapkan terima kasih
>>
>
>
>