Wa'alaikumussalam wr wb

Hai Edo,

Prosedur TransformCode nya sudah dibuat ya. Sebaiknya diletakkan di general
module agar bisa digunakan oleh prosedur lainnya, termasuk
prosedur-prosedur events milik sheet manapun dan sebagainya.

Kemudian, cara memanggil prosedur nya diperbaiki. Kalau sempet,
jalan-jalanlah ke blog milis tentang hal ini disini
<http://b-excel.blogspot.co.id/2013/07/belajarvba-005-procedure-seri-1.html>,
yang ada bagian tentang cara memanggil prosedur lain dari sebuah prosedur.

Pada kasus Anda,
berikut ini yang Anda buat :
  Cells(lRow, 3).Value = TransformCode.Cells(lRow, 3).Offset(0,
-1).Resize(1, 2)
ini yang ada diimil saya tempo lalu :
    transformcode cells(lrow,3).offset(0,-1).resize(1,2)

dan saya rasa jelas bahwa :

> tapi, ganti *bagian yang merah *dengan

menunjukkan bahwa bagian yang berbunyi :
               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
harus diganti alias HAPUS bagian merah tersebut dan tulis baris kode
berikut :
    transformcode cells(lrow,3).offset(0,-1).resize(1,2)

Ada baiknya jika tidak langsung terfokus kepada baris-baris kode nya saja,
tetapi runut dari awal imil sampai akhir imil disempatkan ditelaah dengan
tartil.


Wassalamu'alaikum wr wb
Kid



2015-11-29 8:59 GMT+07:00 Edo Hanggoro [email protected]
[belajar-excel] <[email protected]>:

>
>
> 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 kode VBA dan mohon bantuannya untuk
> dapat membuat kode VBA untuk format cell secara otomatis dimana jika
> seandainya pada kolom Tanggal terdapat tanggal 1 jan 2016 dan pada kolom
> Nomer Kode diketikan "SD1", maka akan secara 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
>
>
>
>
> 
>

Kirim email ke