Looping template

  1. ‹ Older
  2. 6 tahun lalu

    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.

  3. @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?

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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

  9. 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

  10. 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_

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

  12. lampirannya.

  13. Caton

    15 Agu 2018 Terverifikasi Indonesia + 20.101 Poin

    @mas_uqon ...

    Terlampir contoh modifikasinya. Silahkan dimodifikasi lebih lanjut.

  14. 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?

  15. 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

  16. 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.

  17. ok mas, @manweljs_ @Caton makasih atas informasinya.

  18. saya mau tanya lagi mas @Caton , ketika saya coba untuk membuat qty ganjil, baris kedua jadi kosong atau terlongkap. kira" kenapa ya mas?

  19. Caton

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

    @mas_uqon ... ketika saya coba untuk membuat qty ganjil, baris kedua jadi kosong ...

    Pada prosedur Sub FillCardData ubah baris berikut:

    Private Sub FillCardData(Data As Range)
    ...    
        m_lCurrCol = 1
    ...
    End Sub

    menjadi:

    Private Sub FillCardData(Data As Range)
    ...
        If m_lCurrCol = 0 Then m_lCurrCol = 1
    ...
    End Sub

    Demikian.

  20. 2 tahun lalu

    Dear mas @Caton, saya ada pertanyaan lagi.
    saya ingin menambahakan QR code di tiap kanban, namun ada kendala yaitu QR code yg keluar tidak sesuai dengan part numbernya(urutan 2 hingga seterusnya). jadi hasil gambarnya itu mengikuti part number yg pertama saja.
    kira" errornya dimana ya mas?

  21. Caton

    4 Jul 2022 Terverifikasi Indonesia + 20.101 Poin

    @mas_uqon ...

    Di CARD TEMPLATE, sel CARD.Unique (T10), masukkan formula :

    =EncodeBarcode(CELL("SHEET");CELL("ADDRESS");P7;51;1;0;2)

    Kemudian untuk frmMain, ubah sedikit scriptnya :

    Private Sub FillCardData(data As Range)
        Dim xlRange As Range
        Dim lIdx As Long, lCount As Long
        
        If Not IsNumeric(data.Cells(1, 5)) Then Exit Sub
        
        lCount = data.Cells(1, 5)
        For lIdx = 1 To lCount
            With SheetCard
                .Range("Card.NUMBER") = lIdx & " of " & data.Cells(1, 5)
                .Range("Card.DN") = data.Cells(1, 2)
                .Range("Card.DATE") = data.Cells(1, 3)
                .Range("Card.SID") = data.Cells(1, 4)
                .Range("Card.QTY") = data.Cells(1, 11)
                .Range("Card.PN") = data.Cells(1, 9)
                .Range("Card.NAME") = data.Cells(1, 10)
                .Range("Card.FROM") = data.Cells(1, 6)
                .Range("Card.CODE") = data.Cells(1, 7)
                .Range("PLANT") = data.Cells(1, 14)
                '+-- .Range("Card.Unique") = data.Cells(1, 12)  <--- Hapus atau jadikan komentar
            End With
            
            DoEvents '<--- Tambahkan jika diperlukan.
            Call CopyCardRange
        Next
    End Sub

    Demikian.

 

atau Mendaftar untuk ikut berdiskusi!