Ysh pak Ghozi,

*( A )*

Ada hal yg perlu mendapat perhatian; yaitu object Range : *TARGET*  dan *
ActiveCell*
Keduanya (dalam Event Sheet_Change)  punya address yg berbeda, bisa berbeda
jauh &
tidak tertentu perbandingan jraknya

Jika target adalah sudah FIXED yaitu *cell yg berubah *
Misalnya cell B4 di ubah dari kosong menjadi berisi data "X"
maka yg disebut sebagai TARGET (objet Range) adalah cell B4

Sedangkan *ActiveCell* adalah *cell dimana cellpointer berda ketika terjadi
perubahan.*
(*perubahan dianggap terjadi* bila *cell sudah diENTER atau cell pointer
telah meninggalkan cell target*.)
Hal ini sering lupt dari perhatian penulis VBA Excel di tahap-tahap awal.

Kita ketahui bahwa di *[ Excel Option ]* bisa diset  gerakan cell ketika
kita mengenter pengisian cell
bisa  = DOWN / ke CELL DI BAWAHnya  bisa RIGHT / ke CELL DI KANANNYA
Tentunya emakai makro kita tidak bisa kita paksa untuk menyeragamkan
setting tsb.

Selain itu, Malah kita bisa* menyudahi penulisan di cell dengan mengklik
CELL LAIN mana saja*
yang mungkin JAUH sekali dari cell TARGET dan tempatnya pun tidak terduga !!

Jika sudah kita ketahui seperti itu keadaannya, maka pemakaiam Object *
ActiveCell*
rasanya tidak aman lagi, karena "beada di mana-kah ActiveCell saat itu",
 kita tidak bisa menduganya.

Maka itu di kedua Prosedur yg Haps kirimkan tadi,  tidak ada keyword
Activecell, yang ada hanya Target
yaitu demi *amannya (yakinnya) letak dan Dimensi Range* yg akan
diolah/proses,

Modifikasi dari pak Ghozi
  ActiveCell.Offset(1, -1).Range("A1").Select
jika maksudnya *menSelect INPUT cell berikutnya* (cell yg berada di bawah
target yg baru saja
selesai diisi);  mungkin bisa diganti dengan kode seperti ini
  Target(2,1).Select
(ingat bahwa object Range Target sendiri (jika ia berupa cell tunggal) bisa
disebut dengan *Target(1,1)*
Dua buah parameter itu adalah index untuk baris dan kolom dilihat dari
titik pusatnya = Target)

Terlampir makro yg membuktikan bahwa Aktivecell *bisa tidak FIXED jaraknya
jika dilihat dari TARGET*
karena 3 (tiga) alasan tadi (bisa di kanannya, bisa dibawahnya, dan kalau
user mengakhiri pengisian cell
dengan mengklik cell lain mana saja, maka ActiveCell bisa di mana saja)

----ditulis di Module Sheet----
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Count = 1 Then
      MsgBox "TARGET  = " & Target.Address & vbCrLf & _
           "CellAktif = " & ActiveCell.Address
   End If
End Sub

adakan percobaan:
1. mengedit cell B4 / mengisi cell B4 dengan data baru
2* lalu di enter*
3. lihat MsgBox

4 ubah setting di* excel option* (mengenai arah berpindahnya cell ketika
dienter (Down / Right)
5 ulangi 1 s/d 3
6 ulangi 1
7 akhiri dengan *mengklik cell lain yg jauh dari target*
8 Lihat MessageBox


*( B )*
*
*
*VBA Code: Mengcopy range Asal ke Range Tujuan*
yang copy:  Formulanya, FormatNumbers nya dan FORMAT nya

   ' Range ASAL di copy
    Range("B1:E11").Copy

   ' Range Tujuan di PASTE SPECIAL: formula, & *NumberFormats*
    Range("B10:E10").PasteSpecial Paste:=xlPasteFormulasAndNumberFormats

   ' Range Tujuan di PASTE SPECIAL:* Formats*
    Range("B10:E10").PasteSpecial Paste:=xlPasteFormats
   ' menghilangkan garis las vegas (range yg masih diingat di clip board
memory)
  Application.CutCopyMode = xlCopy

Jika kemudian hasilnya di copy ke dirinya sendiri (VALUES nya saja)
pengcopyan format numbers dan FORMAT tidak perlu diulang
karena tidak akan terhapus oleh copy VALUES only.

Mohon di coba coba lagi, barangkali masih ada hal yg belum pass benar..

wassalamualaikum wr wb
-iHaps-



2011/12/19 ghozi alkatiri <ghozialkat...@yahoo.co.id>

> **
> terima kasih mbak haps.
> akhirnya dengan modifikasi pada beberapa baris kode dengan referensi yang
> sudah diberikan mbak haps dan beberpa kawan lainnya saya berhasil
> mendapatkan yang saya harapkan.
> untuk koreksi di bawah ini saya tuliskan  code dari mbak haps dan
> modifikasi yang saya lakukan.
>
> kode dari mbak haps
>
> Option Explicit
> Private Sub Worksheet_Change(ByVal Target As Range)
>    ' iHaps // 19 dec , 2001
>    ' CARA 2  : copy paste cells/formula
>    '-----------------------------------
>    Dim ContohRumus As Range
>    Set ContohRumus = Range("B1:D1")
>    If Target.Count = 1 Then
>       If Target.Column = 1 Then
>          If Target.Row > 9 Then
>             If Not Target.Value = vbNullString Then
>                ContohRumus.Copy
>                Target(1, 2).PasteSpecial xlPasteFormulasAndNumberFormats
>                Application.CutCopyMode = False
>                ActiveCell.Offset(1, -1).Range("A1").Select  ' =(bukan
> dari haps)
>             Else
>                Target(1, 2).Resize(1, 3).ClearContents
>             End If
>          End If
>       End If
>    End If
> End Sub
>
> modifikasi Ghozi
> Option Explicit
> Private Sub Worksheet_Change(ByVal Target As Range)
>    ' iHaps // 19 dec , 2001
>    ' CARA 2  : copy paste cells/formula
>    '-----------------------------------
>    Dim formula As Range
>    Set formula = Range("B1:D1")
>    If Target.Count = 1 Then
>       If Target.Column = 1 Then
>          If Target.Row > 9 Then
>             If Not Target.Value = vbNullString Then
>                formula.Copy
>                Target(1, 2).PasteSpecial xlPasteFormulasAndNumberFormats
>                Application.CutCopyMode = False
>                *ActiveCell.*Offset(1, -1).Range("A1").Select
>             Else
>                Target(1, 2).Resize(1, 3).ClearContents
>             End If
>          End If
>       End If
>    End If
> End Sub
>
> hasil dari modifikasi ini sangat pas dengan yang saya inginkan. tetapi
> karena saya masih sangat awam sekali tentang macro saya ingin mendapatkan
> koreksi dari mbak haps dan teman teman lainnya  apa kode hasil modifikasi
> di atas ini sudah aman untuk digunakan tanpa efek samping saya tunggu
> tanggapannya.
>
> *pertanyaan tambahan *
> bagaimana kalau dalam set hasil copy juga di pastekan format dari range
> asal
> jadi yang akan tercopy di samping nilai hasil formula juga format dari
> range asal misalkan border warna dll.
> ini efisiensi supaya tidak menggunakan conditional formating.
>
> wassalam
>
> Ghozi Alkatiri
>
> *Dari:* i Haps <hapsari.stlizb...@gmail.com>
> *Dikirim:* Senin, 19 Desember 2011 15:48
>
>
> Private Sub Worksheet_Change(ByVal Target As Range)
>    ' iHaps // 19 dec , 2001
>    ' assignment hasil expressi ke suatu cell/range
>    '---------------------------------------------
>    If Target.Count = 1 Then
>       If Target.Column = 1 Then
>          If Target.Row > 9 Then
>             If Not Target.Value = vbNullString Then
>                Range(Target(1, 2), Target(1, 4)).NumberFormat = "@"
>                Target(1, 2) = Mid(Target.Value, 1, 2)
>                Target(1, 3) = Mid(Target.Value, 3, 2)
>                Target(1, 4) = Mid(Target.Value, 5, 2)
>                Application.CutCopyMode = False
>             Else
>                *Range(Target(1, 2), Target(1, 4)).ClearContents*
>             End If
>          End If
>       End If
>    End If
> End Sub
>
> '--------------
>
>
> Private Sub Worksheet_Change(ByVal Target As Range)
>    ' iHaps // 19 dec , 2001
>    ' CARA 2  : copy paste cells/formula
>    '-----------------------------------
>    If Target.Count = 1 Then
>       If Target.Column = 1 Then
>          If Target.Row > 9 Then
>             If Not Target.Value = vbNullString Then
>                *Range("B1:D1")*.Copy
>                Target(1, 2).PasteSpecial xlPaste*Formulas*AndNumberFormats
>                Target(1, 2).Resize(1, 3).Copy
>                Target(1, 2).Resize(1, 3).PasteSpecial xlPaste*Values*
>             Else
>                *Target(1, 2).Resize(1, 3).ClearContents*
>             End If
>          End If
>       End If
>    End If
> End Sub
> '------------------
>
> Demikain Pak, mudah-mudahan menjadi semakin jelas.
>
>

Kirim email ke