Dear Mr. Kid,Assalamuallaikum Wr.Wb.
Terima kasih banyak atas bantuanya, tetapi saya masih mendapatkan kesulitan
dalam melakukan proses pemanggilan transform code-nya dan selalu error.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, lRow As Long
If Not Intersect(Target, Range("C:C")) Is Nothing Then 'cek yang
berubah beririsan dengan kolom C
Application.EnableEvents = False 'cegah Excel untuk responsif
terhadap perilaku
On Error Resume Next 'lewati error yang terjadi
For Each rng In Intersect(Target, Range("C:C")) 'di setiap cells yang
berubah di kolom C
lRow = rng.Row 'simpan baris
Cells(lRow, 3).Value = TransformCode.Cells(lRow, 3).Offset(0,
-1).Resize(1, 2)
Next rng 'ke range yang berubah berikutnya
On Error GoTo 0 'kembalikan setting trap error ke default
Application.EnableEvents = True 'excel boleh responsif lagi
End If 'selesai cek
End Sub
Saya dapatkan error di bagian yang merah tersebut. Kira-kira kesalahannya ada
dimana ya?
Mohon bantuannya sekali lagi.
Terima kasih
Edo
On Saturday, November 28, 2015 10:00 PM, "'Mr. Kid' [email protected]
[belajar-excel]" <[email protected]> wrote:
Wa'alaikumussalam wr wb
Hai Edo,
*** sesuaikan dengan keadaan setempat jika berbeda dengan preview file lampiran
milik Pak Edo
Pada sebuah general module, buat prosedur berikut : (misal diberi nama
TransformCode)
public sub TransformCode( rngProc as range )
dim lChar as long, sDate as string, sCode as string
with rngproc 'kerja di range inputan rngProc
sdate=.cells(1).value2 'simpan nilai asli tanggal inputan ke
sdate
scode=.cells(2).value2 'simpan nilai asli kode inputan ke scode
lchar=1 'karakter ke-1 -> mulainya proses
loop
'dapatkan angka pertama (max di karakter ke-6 alias ada ruang max 5
karakter untuk header kode)
do until isnumeric( mid( scode , lchar , 1 ) ) or lchar>6 'cek dah
nemu angka belum atau karakter diproses dah lebih dari 6
lchar=lchar+1 'pindah ke karakter berikutnya
loop 'ke proses loop dengan nilai karakter yang baru
'tulis ke cells ke-2 dari inputan (posisi cell kode)
'diawali petik satu ( ' )
'disambung hasil vlookup untuk ambil dari kolom H tabel yang
atas (kode barang)
'disambung format tahun YY didahului delimiter dash ( - )
'disambung hasil vlookup untuk ambil dari kolom i tabel yang
bawah (kode tanggal)
'disambung format kode digit dengan struktur format hasil
vlookup untuk ambil dari kolom i tabel yang atas (kode digit)
'didahului delimiter dash ( - )
.cells(2).value= "'" _
& evaluate( "=vlookup(""" & left(scode,lchar-1) &
""",g3:h8,2,0)" ) _
& format( sdate , "-YY" ) _
& evaluate( "=vlookup(" & sdate & ", h12:i18 , 2 , 0 )" ) _
& format( mid( scode , lchar , 9 ) , "-" & evaluate(
"=vlookup(""" & left(scode,lchar-1) & """,g3:i8,3,0)" ) ) end with
end sub
Kemudian, pada event change milik worksheet terkait, diisi baris kode seperti
di-imil yang lalu, yang bunyinya begini :
dim rng as range,lRow as long
if not intersect( target,range("c:c") ) is nothing then 'cek yang
berubah beririsan dengan kolom C
application.enableevents=false 'cegah Excel untuk responsif
terhadap perilaku
on error resume next 'lewati error yang terjadi
for each rng in intersect( target,range("c:c") ) 'di setiap cells yang
berubah di kolom C
lrow=rng.row 'simpan baris
cells(lrow,4).value=cells(lrow,2).value*cells(lrow,3).value
'isi kolom D
if err.number=0 then 'kolom D terisi dengan baik ?
cells(lrow,2).value=cells(lrow,2).value-cells(lrow,4).value
'isi kolom B
endif 'selesai cek kolom D terisi dengan baik
err.clear 'hapus error yang terjadi
next rng 'ke range yang berubah berikutnya
on error goto 0 'kembalikan setting trap error ke default
application.enableevents=true 'excel boleh responsif lagi
endif 'selesai cek
tapi, ganti bagian yang merah dengan baris kode memanggil prosedur
TransformCode dengan menyertakan range yang diproses, yaitu range tanggal
inputan dan kode inputan (1 baris x 2 kolom) seperti bergini :
transformcode cells(lrow,3).offset(0,-1).resize(1,2)
yang bahasa manusianya :
"bi pibi, suruh anak buahmu si transformcode kerja ye. bi, kamu bawa range yang
bisa kamu ambil sendiri ngikutin arahanku ini,
1. kamu ke kolom C lalu jalan sampe baris yang kuproses ini (sambil nyerahin
nota ke pibi yang isinya nomer baris Excel)
[ cells(lrow,3) ] (lrow adalah lembaran nota yang diserahkan)
2. kalo dah nemu, kamu pindah ke kolom sebelumnya (berarti geser ke kiri 1
kolom) tapi tetep dibaris itu ya
[ .offset( 0 , -1 ) ] (kalau kolom, ke kanan itu ples, dan ke kiri itu min)
3. terus, karungin tuh range, mulai tempatmu itu, sampai kamu dapetin 2 kolom.
Tapi cuman sebaris tempatmu doink ya
[ .resize( 1 , 2 ) ]
nah.. kalo dah penuh tuh karung, segera ke tempatnya si transformcode. Dia
bakal minta syarat tuh kalo disuruh.
Kalo dia minta syarat, kasihin tuh karung. Kamu harus nungguin dia sampai
selesai ya. Kalo dah selesai, lapor kesini."
Catatan :
a. kode barang baru diset untuk maksimal diawali oleh 5 karakter bukan angka.
Silakan dikembangkan dan disesuaikan sendiri.
b. pencegahan kesalahan input tanggal (tidak bertipe datetime dan tidak bisa
dijadikan datetime yang benar) ditambahkan sendiri.
c. inputan tanggal (bertipe datetime) atau kode yang tidak ada dalam daftar,
silakan dicegah atau diberi proses sendiri.
d. pengubahan letak daftar-daftar, penambahan atau pengurangan isi dalam
daftar, dan kesesuaian tipe data dalam daftar, silakan dilakukan penyesuaian di
dalam baris-baris kode di atas secara mandiri.
e. proses yang dipicu bukan oleh pengubahan nilai kolom C atau beserta kolom
lainnya, silakan disesuaikan sendiri baris kodenya.
f. pengembangkan dan penyesuaian dengan permasalahan yang mirip tetapi tidak
sama datanya atau strukturnya, silakan dilakukan secara setahap demi setahap
secara mandiri.
Moga-moga gak error ya..
Kalo error, silakan dilacak dan dicari solusinya per penyebab error.
btw,
kenapa kasusnya selalu mengganti nilai inputan user ? kok gak ditulis di kolom
lain saja ? bukankah malah akan ada informasi dan bukti bahwa user pernah
mengisi kurang tepat (salah ketik atau seklian struktur isiannya keliru) kalau
hasil diletakkan di kolom lain.
Dan juga, bisa tanpa VBA.
Moga-moga bukan karena pengen tampak keren dengan begitu di-input langsung
ganti... Soale, dikuatirkan malah nanti jadi masalah...
Kalo jadi menimbulkan masalah, jadi gak keren lagi dah...
Moga-moga...
Wa'alaikumussalam wr wb
Kid
2015-11-28 14:49 GMT+07:00 [email protected] [belajar-excel]
<[email protected]>:
Assalamualaikum Wr.Wb.
Dear All,Saya sedang mencoba untuk membuat kodeVBA dan mohon bantuannya untuk
dapat membuat kode VBA untuk formatcell secara otomatis dimana jika seandainya
pada kolom Tanggal terdapat tanggal1 jan 2016 dan pada kolom Nomer Kode
diketikan "SD1", maka akansecara otomatis menjadi "SD002-1601-0001" (SD002 =
Kode Barang, 16=Kode Tahun , 02=Kode Tanggal, 0001 =Kode Digit).
Dan untuk lebih jelasnya saya lampirkan filenya.
Terima Kasih sebelumnya.
Salam
Edo
#yiv1481508598 #yiv1481508598 -- #yiv1481508598ygrp-mkp {border:1px solid
#d8d8d8;font-family:Arial;margin:10px 0;padding:0 10px;}#yiv1481508598
#yiv1481508598ygrp-mkp hr {border:1px solid #d8d8d8;}#yiv1481508598
#yiv1481508598ygrp-mkp #yiv1481508598hd
{color:#628c2a;font-size:85%;font-weight:700;line-height:122%;margin:10px
0;}#yiv1481508598 #yiv1481508598ygrp-mkp #yiv1481508598ads
{margin-bottom:10px;}#yiv1481508598 #yiv1481508598ygrp-mkp .yiv1481508598ad
{padding:0 0;}#yiv1481508598 #yiv1481508598ygrp-mkp .yiv1481508598ad p
{margin:0;}#yiv1481508598 #yiv1481508598ygrp-mkp .yiv1481508598ad a
{color:#0000ff;text-decoration:none;}#yiv1481508598 #yiv1481508598ygrp-sponsor
#yiv1481508598ygrp-lc {font-family:Arial;}#yiv1481508598
#yiv1481508598ygrp-sponsor #yiv1481508598ygrp-lc #yiv1481508598hd {margin:10px
0px;font-weight:700;font-size:78%;line-height:122%;}#yiv1481508598
#yiv1481508598ygrp-sponsor #yiv1481508598ygrp-lc .yiv1481508598ad
{margin-bottom:10px;padding:0 0;}#yiv1481508598 #yiv1481508598actions
{font-family:Verdana;font-size:11px;padding:10px 0;}#yiv1481508598
#yiv1481508598activity
{background-color:#e0ecee;float:left;font-family:Verdana;font-size:10px;padding:10px;}#yiv1481508598
#yiv1481508598activity span {font-weight:700;}#yiv1481508598
#yiv1481508598activity span:first-child
{text-transform:uppercase;}#yiv1481508598 #yiv1481508598activity span a
{color:#5085b6;text-decoration:none;}#yiv1481508598 #yiv1481508598activity span
span {color:#ff7900;}#yiv1481508598 #yiv1481508598activity span
.yiv1481508598underline {text-decoration:underline;}#yiv1481508598
.yiv1481508598attach
{clear:both;display:table;font-family:Arial;font-size:12px;padding:10px
0;width:400px;}#yiv1481508598 .yiv1481508598attach div a
{text-decoration:none;}#yiv1481508598 .yiv1481508598attach img
{border:none;padding-right:5px;}#yiv1481508598 .yiv1481508598attach label
{display:block;margin-bottom:5px;}#yiv1481508598 .yiv1481508598attach label a
{text-decoration:none;}#yiv1481508598 blockquote {margin:0 0 0
4px;}#yiv1481508598 .yiv1481508598bold
{font-family:Arial;font-size:13px;font-weight:700;}#yiv1481508598
.yiv1481508598bold a {text-decoration:none;}#yiv1481508598 dd.yiv1481508598last
p a {font-family:Verdana;font-weight:700;}#yiv1481508598 dd.yiv1481508598last p
span {margin-right:10px;font-family:Verdana;font-weight:700;}#yiv1481508598
dd.yiv1481508598last p span.yiv1481508598yshortcuts
{margin-right:0;}#yiv1481508598 div.yiv1481508598attach-table div div a
{text-decoration:none;}#yiv1481508598 div.yiv1481508598attach-table
{width:400px;}#yiv1481508598 div.yiv1481508598file-title a, #yiv1481508598
div.yiv1481508598file-title a:active, #yiv1481508598
div.yiv1481508598file-title a:hover, #yiv1481508598 div.yiv1481508598file-title
a:visited {text-decoration:none;}#yiv1481508598 div.yiv1481508598photo-title a,
#yiv1481508598 div.yiv1481508598photo-title a:active, #yiv1481508598
div.yiv1481508598photo-title a:hover, #yiv1481508598
div.yiv1481508598photo-title a:visited {text-decoration:none;}#yiv1481508598
div#yiv1481508598ygrp-mlmsg #yiv1481508598ygrp-msg p a
span.yiv1481508598yshortcuts
{font-family:Verdana;font-size:10px;font-weight:normal;}#yiv1481508598
.yiv1481508598green {color:#628c2a;}#yiv1481508598 .yiv1481508598MsoNormal
{margin:0 0 0 0;}#yiv1481508598 o {font-size:0;}#yiv1481508598
#yiv1481508598photos div {float:left;width:72px;}#yiv1481508598
#yiv1481508598photos div div {border:1px solid
#666666;height:62px;overflow:hidden;width:62px;}#yiv1481508598
#yiv1481508598photos div label
{color:#666666;font-size:10px;overflow:hidden;text-align:center;white-space:nowrap;width:64px;}#yiv1481508598
#yiv1481508598reco-category {font-size:77%;}#yiv1481508598
#yiv1481508598reco-desc {font-size:77%;}#yiv1481508598 .yiv1481508598replbq
{margin:4px;}#yiv1481508598 #yiv1481508598ygrp-actbar div a:first-child
{margin-right:2px;padding-right:5px;}#yiv1481508598 #yiv1481508598ygrp-mlmsg
{font-size:13px;font-family:Arial, helvetica, clean, sans-serif;}#yiv1481508598
#yiv1481508598ygrp-mlmsg table {font-size:inherit;font:100%;}#yiv1481508598
#yiv1481508598ygrp-mlmsg select, #yiv1481508598 input, #yiv1481508598 textarea
{font:99% Arial, Helvetica, clean, sans-serif;}#yiv1481508598
#yiv1481508598ygrp-mlmsg pre, #yiv1481508598 code {font:115%
monospace;}#yiv1481508598 #yiv1481508598ygrp-mlmsg *
{line-height:1.22em;}#yiv1481508598 #yiv1481508598ygrp-mlmsg #yiv1481508598logo
{padding-bottom:10px;}#yiv1481508598 #yiv1481508598ygrp-msg p a
{font-family:Verdana;}#yiv1481508598 #yiv1481508598ygrp-msg
p#yiv1481508598attach-count span {color:#1E66AE;font-weight:700;}#yiv1481508598
#yiv1481508598ygrp-reco #yiv1481508598reco-head
{color:#ff7900;font-weight:700;}#yiv1481508598 #yiv1481508598ygrp-reco
{margin-bottom:20px;padding:0px;}#yiv1481508598 #yiv1481508598ygrp-sponsor
#yiv1481508598ov li a {font-size:130%;text-decoration:none;}#yiv1481508598
#yiv1481508598ygrp-sponsor #yiv1481508598ov li
{font-size:77%;list-style-type:square;padding:6px 0;}#yiv1481508598
#yiv1481508598ygrp-sponsor #yiv1481508598ov ul {margin:0;padding:0 0 0
8px;}#yiv1481508598 #yiv1481508598ygrp-text
{font-family:Georgia;}#yiv1481508598 #yiv1481508598ygrp-text p {margin:0 0 1em
0;}#yiv1481508598 #yiv1481508598ygrp-text tt {font-size:120%;}#yiv1481508598
#yiv1481508598ygrp-vital ul li:last-child {border-right:none
!important;}#yiv1481508598