Looping template

  1. 6 tahun lalu

    Selamat pagi teman",,
    mohon bantuannya apakah ada yang tahu formula atau tutorial untuk looping suatu template seperti file terlampir.
    kalau ada yang tahu boleh dishare supaya menjadi bahan pembelajaran saya. :)
    terima kasih.

    @mas_uqon & @manweljs_ ...

    Terlampir contoh yang dapat saya buatkan. Silahkan dipelajari dan dimodifikasi. Dalam file terlampir, trik yang saya gunakan adalah mengisi data dari sheet DATA ke sel-sel yang sudah ditentukan melalui definisi nama range (lihat dalam Name Manager) pada sheet Card Template. Untuk setiap data kemudian dilakukan penyalinan range Card.RANGE (range B2:BB23) pada sheet Card Template dan kemudian ditempelkan pada sheet PRINT sebagai objek gambar (picture object). Untuk menggunakannya, isi indeks baris data yang akan diproses lalu klik tombol PROSES.

    [attachment:5ad4594cd00d1]

    Perhatikan, script pada file terlampir pada dasarnya sudah dapat digunakan (sudah saya coba berulang kali), namun tentunya tidak menutup kemungkinan terjadi kesalahan (Error) yang tidak saya ketahui. Saya hanya memberikan script intinya saja. Selebihnya silahkan dikembangkan sendiri.

    Demikian, semoga bermanfaat.

  2. Di sunting 6 tahun lalu oleh manweljs_

    perlu dipelajari nih :D colek mas @Caton

  3. Caton

    16 Apr 2018 Terverifikasi Jawaban Terpilih Indonesia + 20.101 Poin

    @mas_uqon & @manweljs_ ...

    Terlampir contoh yang dapat saya buatkan. Silahkan dipelajari dan dimodifikasi. Dalam file terlampir, trik yang saya gunakan adalah mengisi data dari sheet DATA ke sel-sel yang sudah ditentukan melalui definisi nama range (lihat dalam Name Manager) pada sheet Card Template. Untuk setiap data kemudian dilakukan penyalinan range Card.RANGE (range B2:BB23) pada sheet Card Template dan kemudian ditempelkan pada sheet PRINT sebagai objek gambar (picture object). Untuk menggunakannya, isi indeks baris data yang akan diproses lalu klik tombol PROSES.

    scg.png

    Perhatikan, script pada file terlampir pada dasarnya sudah dapat digunakan (sudah saya coba berulang kali), namun tentunya tidak menutup kemungkinan terjadi kesalahan (Error) yang tidak saya ketahui. Saya hanya memberikan script intinya saja. Selebihnya silahkan dikembangkan sendiri.

    Demikian, semoga bermanfaat.

  4. Di sunting 6 tahun lalu oleh manweljs_

    mas @Caton

    makasih mas untuk templatenya - sejauh ini saya coba belum ada error, saya pelajari dulu ya mas. nanti pasti ada pertanyaan deh.... ;)

  5. Terima kasih mas, baru saya pelajari sih..
    tapi saya iseng" nambah qr qode dibawah kolom angka, pas saya coba generate,, qr qodenya ga dinamis seperti yg lain padahal saya ambil dari database yang ada di sheet 1..
    mohon pencerahannya mas.. :D

  6. Caton

    17 Apr 2018 Terverifikasi Indonesia + 20.101 Poin

    @mas_uqon ...

    Pastinya saya juga tidak tahu mengapa, namun solusi berikut mungkin bisa membantu. Pada modul mdlMain, prosedur OpenGenerator(), coba modifikasi scriptnya menjadi:

    Public Sub OpenGenerator()
        SheetTarget.Select
        DoEvents
        frmMain.Show
    End Sub

    dan pada objek frmMain, prosedur CopyCardRange(), modifikasi durasi delay:

    ...
    Call Sleep(150)
    ...

    menjadi:

    ...
    Call Sleep(250)
    ...

    Kemudian coba eksekusi kembali scriptnya melalui sheet DATA. Jika belum berhasil, coba tutup dahulu aplikasi Excel-nya, kemudian buka kembali lalu coba kembali eksekusi script tersebut. Jika belum berhasil juga, coba aktifkan sheet PRINT kemudian tekan tombol ALT + F8 untuk menampilkan jendela macro, kemudian pilih macro yang ada pada daftar macro, kemudian klik tombol RUN.

    Untitled.png

    Itu saja solusi yang saya ketahui saat ini. Mungkin ada rekan-rekan lain yang tahu solusinya, silahkan berikan masukan.

    Demikian.

  7. @Caton

    waah bisa mas..
    saya coba copy kan ke file saya pas saya klik generate ada yang error mas di macro nya..
    di script :

    bValid = bValid And (m_xlDataRange.Count > 0)

    kalau seperti itu knp ya mas?

  8. Caton

    17 Apr 2018 Terverifikasi Indonesia + 20.101 Poin
    Di sunting 6 tahun lalu oleh Caton

    @mas_uqon ...

    Kesalahan yang terjadi adalah kesalahan dasar, dimana definisi nama range yang akan digunakan dirujuk ke objek yang salah. Dalam hal ini (pada file yang @mas_uqon lampirkan), nama range Table.DATA merujuk ke objek Sheet1 sedangkan aktualnya, nama range tersebut merujuk ke objek Sheet4 (lihat pada jendela Project Explorer). Solusinya, pada prosedur Sub UserForm_Activate(), ubah baris script berikut:

    ...
    If m_xlDataRange Is Nothing Then
        Set m_xlDataRange = Sheet1.Range("Table.DATA")
        If m_xlDataRange Is Nothing Then
            Err.Clear: On Error GoTo 0
            bValid = False
        End If
    End If
    bValid = bValid And (m_xlDataRange.Count > 0)
    ...

    menjadi:

    ...
    If m_xlDataRange Is Nothing Then
        Set m_xlDataRange = Sheet4.Range("Table.DATA")
        If m_xlDataRange Is Nothing Then
            Err.Clear: On Error GoTo 0
            bValid = False
        Else
            bValid = bValid And (m_xlDataRange.Count > 0)
        End If
    End If
    ...

    Solusi lainnya adalah dengan menyusun script untuk menemukan objek Worksheet yang tepat dari nama range tersebut.

    Selain itu, saran saya, sebaiknya definisi nama range Table.DATA sebaiknya dibuat dinamis saja, dengan demikian jumlah baris data yang diproses sesuai dengan jumlah data aktual yang ada di dalam tabel datanya (sehingga untuk baris data yang kosong tidak diproses). Untuk saat ini, tanpa menggunakan nama range dinamis, jumlah baris data yang akan diproses ada 4000 baris, sedangkan data aktualnya hanya 9 baris (meskipun pada form dapat diatur indeks baris yang akan diproses, namun saya rasa lebih baik diotomasi saja sehingga didapat jumlah baris aktualnya). Selain menggunakan nama range dinamis, untuk merujuk ke tabel datanya dapat dilakukan dengan cara merujuk ke range aktualnya, misalkan dengan script:

    ...
    lRow = WorksheetFunction.CountIf(Sheet4.Range("C3:C5000"), "?*") + 2
    Set m_xlDataRange = Sheet4.Range("B3:U" & lRow)
    ...

    Mengingat adanya perbedaan antara tabel data yang mas gunakan sekarang dengan tabel data pada contoh sebelumnya, maka ada banyak penyesuaian yang harus mas lakukan.

    Demikian.

  9. Caton

    17 Apr 2018 Terverifikasi Indonesia + 20.101 Poin

    Maaf, saya revisi sedikit. Untuk prosedur Sub UserForm_Activate() dimodifikasi menjadi:

    Private Sub UserForm_Activate()
        Dim bValid As Boolean
        
        On Error Resume Next
    
        bValid = True
        On Error Resume Next
        If m_xlDataRange Is Nothing Then
            Set m_xlDataRange = Sheet4.Range("Table.DATA")
            If m_xlDataRange Is Nothing Then
                bValid = False
                Err.Clear
            End If
        End If
        bValid = bValid And (m_xlDataRange.Count > 0)
        If bValid Then
            With m_xlDataRange
                m_lMinIndex = 1
                txtMinIndex = m_lMinIndex
                m_lMaxIndex = .Rows.Count
                txtMaxIndex = m_lMaxIndex
            End With
        Else
            MsgBox "Nama range Table.Data tidak ditemukan atau tidak ada data yang akan diproses!", _
                vbCritical Or vbOKOnly, Me.Caption
            Err.Clear: On Error GoTo 0
            Unload Me
        End If
    End Sub

    Demikian.

  10. yups, terima kasih mas @Caton ,,
    sekarang sudah saya pisahkan lgi file nya..
    kemarin ketika saya coba ambil sample untuk coba beberapa qr code lancar jaya..
    tpi ketika saya coba kembali untuk lebih banyak qr code yang tampil gambarnya malah jadi aneh mas, sama ada yg seharusnya tidak muncul qr codenya tetapi ketika di generate malah muncul, klo seperti itu gmn ya? *saya ambil sample generate dari baris 20 sampai ke baris 26.

  11. Caton

    18 Apr 2018 Terverifikasi Indonesia + 20.101 Poin
    Di sunting 6 tahun lalu oleh Caton

    @mas_uqon ...

    Saya juga tidak tahu mengapa demikian... :) Pada gambar berikut:

    shoot01.png

    shoot02.png

    shoot03.png

    yang pertama adalah hasil dari file yang mas lampirkan. Yang kedua hasil saat scriptnya saya jalankan dan yang ketiga adalah setelah saya mengubah lebar kolom QR CODE NO pada sheet QR CODE ASMO (dan merapikan posisi gambar Barcode pada sheet CARD TEMPLATE). Tidak ada perubahan atau penambahan pada scriptnya, saya hanya menghapus baris script berikut:

    ...
    lCount = .Shapes.Count
    Set xlShape = .Shapes(lCount)
    With xlShape.Line
        .Visible = msoTrue
        .Weight = 1.5
        .ForeColor.RGB = RGB(1, 0, 0)
        .Transparency = 0
    End With
    ...

    hanya untuk menghilangkan garis pada setiap kartu. Jadi, dimana letak kesalahannya, saya juga tidak tahu. Saya hanya memprediksi, mungkin ada kaitannya dengan sheet QR CODE ASMO (mungkin terkait pengaturan lebar kolom atau terkait pengaturan tinggi barisnya)... mungkin! Terlampir juga hasil proses untuk seluruh data (indeks ke-1 sampai dengan indeks ke-26)

    Demikian.

  12. mas mohon bantuannya
    saya ingin membuat seperti mas @Caton buat..
    Dimana Sheets Barcode yang berisi 1 barcode dan judul
    Menjadi 3 barcode ke kanan dan 4 barcode ke bawah secara otomatis berdasarkan data yang ada
    seperti Sheet Print Barcode
    ====
    mohon bimbingannya

  13. Di sunting 6 tahun lalu oleh manweljs_

    @joe_amoeba

    coba cek file terlampir.

    saya kurang paham mengenai nomor acak pada lampiran, jadi silahkan dikembangkan sendiri

    note: karena menggunakan sumber dari luar maka untuk membuat qrcodenya harus sambil online ya.
    kodenya berasal dari diskusi berikut

  14. siap saya coba pelajari dulu,,
    kalo barcodenya bebas sich,, yang saya butuhkan template menambah shapes otomatis ke kanan nambah 2 ke bawah nambah 4
    seperti

    Public Sub ForNext_Contoh1()
    Dim i As Integer, j As Integer
    For i = 1 To 6
    For j = 1 To 4
    Cells(i, j).Value = 100 <<< pengennya shapes yang berbeda
    Next j
    Next i
    End Sub

    makasih banyak mas @manweljs_

  15. Mohon bantuannya kembali mas,
    bagaimana caranya ya, untuk men-setting 1 lembar supaya bisa print 8 kanban?
    sample nya seperti pada sheet sample.

  16. lampirannya.

  17. Caton

    15 Agu 2018 Terverifikasi Indonesia + 20.101 Poin

    @mas_uqon ...

    Terlampir contoh modifikasinya. Silahkan dimodifikasi lebih lanjut.

  18. Dear mas @Caton ,
    terima kasih mas atas samplenya, kemudian saya coba edit-edit kembali, dan saya berniat untuk memaksimalkan kertas yang ada supaya tidak banyak kertas yang tersisa(sample image), namun tidak bisa. Padahal marginnya semua sudah saya buat nol "0". untuk setting marginnya kira-kira dimana ya mas?

  19. Di sunting 6 tahun lalu oleh manweljs_

    @mas_uqon

    tergantung printernya

    coba printernya ganti ke Microsoft Print to PDF kemudian scalenya jadi 105%
    atau dengan printer biasa ganti properti nya ke borderless kemudian scale jadi 105%

    intinya setting default tiap printer berbeda2, ada yang default sudah borderless ada yang tidak

  20. Caton

    13 Sep 2018 Terverifikasi Indonesia + 20.101 Poin
    Di sunting 6 tahun lalu oleh Caton

    @mas_uqon ... untuk setting marginnya kira-kira dimana ya mas ...

    Kalau ingin mengatur margin kertas melalui VBA, mas @Uqon dapat menggunakan objek PageSetup dari objek Worksheet. Contohnya:

    With SheetSample.PageSetup
        .RightMargin = 0
        .LeftMargin = 0
        .TopMargin = 0
        .BottomMargin = 0
    End With

    Namun, saya yakin itu bukan solusi yang tepat, karena jika lebar objek yang akan dicetak lebih kecil atau lebih besar dari lebar area cetak pada kertas, maka tetap tidak akan maksimal. Karena setiap printer memiliki batas marginnya sendiri, maka pengaturannya disesuaikan kepada printer yang digunakan. Bisa saja menggunakan pengaturan borderless atau mengatur skala objek yang akan dicetak.

    Cara lainnya Selain dengan mengatur skala objek yang akan dicetak (lakukan ini dari jendela Print Preview), mas @Uqon juga dapat mengatur ulang lebar setiap label, melalui bagian script pada objek frmMainB seperti berikut:

    ...
    With xlShape
        .LockAspectRatio = msoFalse
        '+-- Atur lebar label, misalkan 9.65!
        .Width = Application.CentimetersToPoints(9.45) 
        .Height = Application.CentimetersToPoints(6.4)
        .Left = .Left + 0.5 ' .Left + 0
        .Top = .Top + 0.5   ' .Left + 0
        With .Line
            .Visible = msoTrue
            .Weight = 1
            .ForeColor.RGB = RGB(1, 0, 0)
            .Transparency = 0
        End With
    End With
    ...

    kemudian, lakukan pengisian ulang label. Setelah label-label ditampilkan, periksa kembali lembar kolom terakhir dari setiap label (label sebelah kiri ada pada kolom J, label sebelah kanan ada pada kolom T). Pastikan lebar kolom-kolom tersebut sejajar dengan lebar setiap label. Kemudian atur Print Area pada kolom B sampai dengan kolom T dan lakukan Print Preview. Lakukan ini sampai mendapatkan ukuran yang maksimal.

    Demikian, semoga bermanfaat.

  21. Newer ›
 

atau Mendaftar untuk ikut berdiskusi!