kirimpertanyaan

 

Belajar dan konsultasi masalah Excel      

Macro & VBA, Hits: 7255, Comments: 13, Bookmarked: 0, Followers: 2

saya ingin menyimpan data yang di buat di file a.xls dan hasilnya di simpan di file b.xls tanpa menimpah hasil penyimpanan sebelumnya, jadi di file b itu hasilnya terus berurutan,  di file a.xls itu memakai tombol "simpan" tp bentuknya bukan seperti form pengisian. bisa ga ya? terimakasih

Last Modified: Monday, April 14, 2014


dewinurz
Tuesday, September 27, 2011
0% of 0 votes

Tampilan data yang di file a.xls seperti apa?

Apakah? misal:

Kolom A Kolom B
Nama ngarasan
Kelas 1a
Usia 5

Dan data dia atas langsung ditulis pada cell-cell excelnya?

Jika Ya, maka Kolom dan Baris yang dipakai harus FIX (TETAP) gak boleh berubah-berubah.

Dan ditombol simpan, bisa kita tulis code:

Workbooks("b.xls").Worksheet("data").Cells(x,y).value = me.cells(2,2).value

Perintah diatas, mengisi file b.xls di sheet tertentu pada cell tertentu sesuai dengan data pada cell (2,2) di file a.xls.

Tentu saja, harus ada baris code untuk membuka file b.xls dan mencari baris terakhir di file tersebut.

salam


ngarasan
28 Sep 2011
1

terimakasih tanggapannya..iya betul tampilan data seperti yg di contohkan, data langsung di tulis pada cell nya, jelasnya begini.. misalkan sumber data dari 2 org, masing2 org mendapatkan data dengan cara mengcopy paste bukan di ketik di cell2,data yg dicopas jumlah kolom nya tetap tapi jumlah barisnya selalu berbeda, dan  data dari 2 org itu bisa terkumpul dalam 1 file pusat, makanya saya ingin setiap org setelah me copy paste data yg didapat mrk tinggal pencet tombol "simpan" dan data itu terkumpul di file data base, tanpa menimpah hasil penyimpanan sebelumnya.. begitu kira2, maaf jika bahasa saya kurang jelas maklum masih awam :)

kolom a kolom b

nama     kelas

agus        2a

deni         2b


dewinurz
02 Oct 2011
0

Halo Mas Yadi..

Semoga langkah-langkah ini membantu..

Requirement:

1. Sebuah file xlsx untuk input data, beri nama apa saja (misal a.xlsx). Pada file ini, cell B1, B2 dan B3 saya jadikan tempat input data.

2. Sebuah Command Button ActiveX Control (Bukan Form Control ya..). Misal nama: CommandButton1.

3. Sebuah file xlsx untuk menyimpan data, beri nama apa saja (misalkan: Book1.xlsx)

4. Simpan file Book1.xlsx di Drive: C:\ (Biarkan berada di root directory saja, biar gampang.). Lihat gambar:

simpandifilelain1

5. Pada CommandButton1 Click Event, tulis baris program berikut:

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
If IsFileOpen("c:\book1.xlsx") Then
MsgBox "Maaf, file book1.xlsx sedang dibuka, silahkan tutup file terlebih dahulu.."
Exit Sub
End If

Workbooks.Open FileName:="c:\book1.xlsx"

With Worksheets("Sheet1")
BarisTerakhir = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 1 To 3
.Cells(BarisTerakhir + 1, i).Value = Me.Cells(2, i).Value
Next i
End With

Workbooks("book1.xlsx").Save
Workbooks("book1.xlsx").Close

Application.ScreenUpdating = True
End Sub

6. Jangan lupa, copy function berikut dibawah commandbutton1 click event. Function ini berfungsi untuk memeriksa, apakah file telah dibuka atau belum.

Function IsFileOpen(FileName As String)
Dim iFilenum As Long
Dim iErr As Long

On Error Resume Next
iFilenum = FreeFile()
Open FileName For Input Lock Read As #iFilenum
Close iFilenum
iErr = Err
On Error GoTo 0

Select Case iErr
Case 0: IsFileOpen = False
Case 70: IsFileOpen = True
Case Else: Error iErr
End Select

End Function

Action:

1. Masukan data (mau ditulis langsung ataupun Copy Paste, gak ada masalah. Yang penting, tulis / Copy Paste pada Cell B1, B2 dan B3. Anda bisa ubah-ubah letak cell inputan. Yang penting, edit juga baris programnya..

Berikut gambar inputan file saya:

simpandifilelain2

2. Ketika saya click CommandButton1 (SIMPAN), maka data yang tertulis akan disimpan ke file Book1.xlsx yang berada di C:\.

3. Jika file Book1.xlsx dibuka, maka datanya adalah seperti gambar berikut:

simpandifilelain3

Jangan lupa tutup lagi.

4. Sekarang, saya coba ganti data yang akan disimpan. Saya ganti menjadi: acan, bandung, 20.

Maka, jika dibuka lagi file Book1.xlsx, data tersebut akan disimpan dibawah data sebelumnya. Lihat gambar:

simpandifilelain4

5. Jika kita mencoba menyimpan data dalam kondisi file Book1.xlsx terbuka, maka akan muncul pesan seperti gambar:

simpandifilelain5

Code Explanation:

1.Baris program berikut:

Application.ScreenUpdating = False

Application.ScreenUpdating = True

adalah untuk mematikan screen update. Jika tidak dimatikan, maka Excel akan memunculkan window-window pesan yang membutuhkan interaksi user. 

Sebelum Close, pastikan Screen Update sudah di hidupkan lagi.

2. Baris berikut:

If IsFileOpen("c:\book1.xlsx") Then
MsgBox "Maaf, file book1.xlsx sedang dibuka, silahkan tutup file terlebih dahulu.."
Exit Sub
End If

Berfungsi untuk memanggil Function IsFileOpen yang tadi kita copy. Function ini bertugas mengecek, apakah file "c:\book1.xlsx" sudah terbuka atau belum. Jika sudah terbuka, maka Function akan bernilai TRUE.

Dan jika Function ini bernilai TRUE, maka keluar dari sub atau batal (EXIT SUB).

3. Baris program berikut, 

Workbooks.Open FileName:="c:\book1.xlsx"
Workbooks("book1.xlsx").Save
Workbooks("book1.xlsx").Close

Berturut-turut berguna untuk: membuka file Book1.xlsx, menyimpannya, dan menutupnya.

4. Baris berikut:

With Worksheets("Sheet1")
BarisTerakhir = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 1 To 3
.Cells(BarisTerakhir + 1, i).Value = Me.Cells(2, i).Value
Next i
End With

berfungsi untuk memindahkan data dari file inputan, ke file Book1.xlsx. Karena data pada contoh memiliki 3 kolom, maka for - next -nya dari 1 sampai 3.

Oke Mas Yadi..

Kalo ada yang membingungkan, silahkan ditanyakan..

Salam...


ngarasan
03 Oct 2011
0

wah hebat mas... terimakasih banyak, cuma gmn caranya biar ga cm baris ke 2 aja yg di simpan? karena sy ingin jumlah baris yg bisa di simpan ga terbatas, karena jumlah data yang akan disimpan ga selalu sama..:)  maklum awam tp keinginan gede... saya coba ganti me.cells (2,i).value nya malah baris lain yg di simpan

terimakasih.


dewinurz
04 Oct 2011
0

Ah iya.. Maaf saya kelupaan..

Kalo jumlah baris inputannya berbeda-beda, coba pakai code ini untuk CommandButton1 click event-nya:

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
If IsFileOpen("c:\book1.xlsx") Then
MsgBox "Maaf, file book1.xlsx sedang dibuka, silahkan tutup file terlebih dahulu.."
Exit Sub
End If

Workbooks.Open FileName:="c:\book1.xlsx"

With Worksheets("Sheet1")
BarisTerakhirInput = Me.Cells(.Rows.Count, 1).End(xlUp).Row
For j = 2 To BarisTerakhirInput
BarisTerakhir = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 1 To 3
.Cells(BarisTerakhir + 1, i).Value = Me.Cells(j, i).Value
Next i
Next j
End With

Workbooks("book1.xlsx").Save
Workbooks("book1.xlsx").Close

Application.ScreenUpdating = True
End Sub

Semoga sekarang sesuai permintaan..

salam


ngarasan
04 Oct 2011
0

Oya. ngomong-ngomong, biasanya data-nya sampai berapa baris?

Code diatas belum saya coba menggunakan data yang sangat banyak. Khawatirnya, prosesnya akan lambat jika menggunakan data yang banyak.

Kalo datanya lumayan banyak, sepertinya pakai metode copy paste (di program VBA-nya).

Tapi, mungkin bisa dicoba dulu..

salam


ngarasan
04 Oct 2011
0

wah terimakasih banyak ini sudah cukup.. kalo ada yang ingin saya tanyain jangan kapok ya mas...hehe :D sukses selalu mas..


dewinurz
05 Oct 2011
0

ada sedikit ganjelan mas.. bisa ga pas kita pencet tombol simpan, data di sheet tempat input data otomatis kehapus, biar ga dobel data di file penyimpanannya... karena pas di coba kadang lupa udah dipencet atau belum tombol simpannya... makasih.


dewinurz
05 Oct 2011
0

Berarti, silahkan tambahkan baris berikut pada sommandbutton1 click event:

Range(Cells(2, 1), Cells(BarisTerakhirInput, 3)).ClearContents

Code lengkap jadinya:

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
If IsFileOpen("c:\book1.xlsx") Then
MsgBox "Maaf, file book1.xlsx sedang dibuka, silahkan tutup file terlebih dahulu.."
Exit Sub
End If

Workbooks.Open Filename:="c:\book1.xlsx"

With Worksheets("Sheet1")
BarisTerakhirInput = Me.Cells(.Rows.Count, 1).End(xlUp).Row
For j = 2 To BarisTerakhirInput
BarisTerakhir = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 1 To 3
.Cells(BarisTerakhir + 1, i).Value = Me.Cells(j, i).Value
Next i
Next j
End With

Workbooks("book1.xlsx").Save
Workbooks("book1.xlsx").Close

Me.Range(Cells(2, 1), Cells(BarisTerakhirInput, 3)).ClearContents

Application.ScreenUpdating = True
End Sub

Jadi, perintah tambahan diatas, akan men-select range A2 sampai CX. Nah, nilai X-nya ini adalah baris terakhir dari inputan. Angka 3 pada code adalah column (C).

Semoga membantu..

Salam


ngarasan
05 Oct 2011
0

terima kasih mas


dewinurz
07 Oct 2011
0

kalau datanya berada di sheet pertama range I40:AM41 & I42:AM43, dan mau saya simpan disheet dua mulai dari B4 dan C4

ket

jadi data I40:AM41(area pada sheet 1 yang dimerge) masuk pada cell B4(database yang ada disheet 2)

jadi data I42:AM43(area pada sheet 1 yang dimerge) masuk pada cell C4(database yang ada disheet 2)

dan terus berlanjut kebawah tanpa menimpa data sebelumnya


abdulk59
01 Mar 2012
0

Halo Mas Kamal,

Mohon maaf jawaban sangat terlambat neh..

Coba pake code berikut:

Private Sub Simpan()
With Worksheets("Sheet2")
BarisTerakhirTujuanB = .Cells(.Rows.Count, 2).End(xlUp).Row
BarisTerakhirTujuanC = .Cells(.Rows.Count, 3).End(xlUp).Row

.Cells(BarisTerakhirTujuanB + 1, 2).Value = Worksheets("Sheet1").Cells(40, 9).Value
.Cells(BarisTerakhirTujuanC + 1, 3).Value = Worksheets("Sheet1").Cells(42, 9).Value
End With
End Sub

 

Selanjutnya, jangan lupa pada SHEET2, Cell B3 dan C3 diberi Header. Misal:

 A   B  C
1
2
3  Data B  Data C
4
5

Silahkan dicoba Mas Kamal..

salam


ngarasan
20 Mar 2012
0

kalo file tujuannya datanya di protect gimana codenya ??

mohon penjelasannya mas. trims


franky inaku
14 Apr 2014
0

User Online

We have 101 guests and one member online

Kitab VBA Excel Level Satu


523952 342835842418972 309765083 nUntuk yang ingin belajar dari NOL.

SMS: 0878 0878 2141

Newsletter

Daftarkan email anda untuk mendapatkan update dari Klinik Excel
UA-20522645-1