Pemecahan Masalah Error type Missmatch

  1. 7 minggu lalu

    Hallo Semua,

    Mohon bantuannya untuk pemecahan masalah berikut :

    1. Kolom - kolom yang saya blok, dan saya ingin delete kolom - kolom tersebut. Muncul notif "Run-time Error '13': Type missmatch".
    2. Begitu juga jika saya ingin copy kolom - kolom yang saya blok, dan saya paste ke kolom lain, Muncul notif "Run-time Error '13': Type missmatch".
    3. Tolong dibantu share untuk coding VBA nya, agar tidak muncul notif error tersebut.

    File excel macro nya terlampir.

    Terimakasih atas perhatian & bantuannya.

    Mas @kemal30 ...

    Kesalahan terjadi pada baris berikut (baris warna kuning) :

    [attachment:61288dfa54dd0]

    Pada script tersebut, variable CellValue bertipe String. Jika objek Target hanya berupa 1 sel saja (misalkan sel A1), maka variable CellValue akan berisi nilai dari sel yang direferensikan melalui objek Target. Namun saat objek Target berupa range (terdiri dari beberapa sel, misalkan range A1:A2), maka akan muncul kesalahan Type Mismatch dikarenakan nilai pada properti Value dari objek Target tidak lagi berupa single value, namun sudah berupa Array Value.

    Solusinya bisa beragam, misalkan saja:

    1 — Periksa apakah Target berada pada area tabel:

    If Not Intersect(Target, Range("A1:EK1000")) Is Nothing Then

    menjadi

    If Not Intersect(Target, Me.Range("A3").CurrentRegion) Is Nothing Then

    Dengan script di atas, maka VBA hanya akan memproses perintah lainnya jika perubahan terjadi pada hanya pada range A1:DZ532 (sesuai area yang digunakan pada tabel yang ada pada sheet SITE LIST).

    2 — Periksa apakah Target merupakan single cell:

    ...
    If Not Intersect(Target, Range("A1:EK1000")) Is Nothing Then
         If (Target.Columns.Count * Target.Rows.Count) = 1 Then
              ...
         End If
    End If
    ...

    Pada script di atas, VBA akan memeriksa apakah objek Target berada pada range A1:EK1000. Jika ya, VBA akan memeriksa kembali apakah Target merupakan single cell (jumlah baris dan jumlah kolom harus = 1, 1 * 1 = 1).

    3 — Menambahkan error trapping:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1:EK1000")) Is Nothing Then
        Dim objHTTP As Object
        Dim URL As String, Json As String, ColLett As String, CellValue As String, SheetName As String
        Dim RowNum As Long
    
        Err.Clear: On Error GoTo errHandler:
    
        ColLett = Split(Cells(1, Target.Column).Address, "$")(1) 'Column Letter
        RowNum = Target.Row 'Row Number
        SheetName = Name 'Sheet Name
        CellValue = Target.Value 'Cell Value
        Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
        URL = "https://hook.integromat.com/oxrfqbxpp4k8umy3czk7c9x74k1fixh7?SheetName=" & SheetName & "&Column=" & ColLett & "&RowNumber=" & RowNum & "&CellValue=" & CellValue
        objHTTP.Open "PATCH", URL, False
        objHTTP.setRequestHeader "Content-type", "application/json"
        objHTTP.send (Json) 'Send Information
        
    errHandler:
        If Err Then
            Debug.Print Err.Number, Err.Description
        End If
        
        Err.Clear: On Error GoTo 0
    End If

    Pada script di atas, apabila terjadi kesalahan, maka proses akan segera beralih ke baris perintah setelah label errHandler. Untuk melihat kode dan keterangan kesalahan yang terjadi, dapat dilihat pada jendela Immediate (CONTROL G).

    Coba diperbaiki scriptnya dengan salah satu contoh di atas. Mudah-mudahan dapat mengatasi masalah yang terjadi.

    Demikian.

  2. Berikut file excel macro nya.

  3. Caton

    Agu 27 Terverifikasi Jawaban Terpilih Indonesia + 17.572 Poin

    Mas @kemal30 ...

    Kesalahan terjadi pada baris berikut (baris warna kuning) :

    image_2021-08-27_141704.png

    Pada script tersebut, variable CellValue bertipe String. Jika objek Target hanya berupa 1 sel saja (misalkan sel A1), maka variable CellValue akan berisi nilai dari sel yang direferensikan melalui objek Target. Namun saat objek Target berupa range (terdiri dari beberapa sel, misalkan range A1:A2), maka akan muncul kesalahan Type Mismatch dikarenakan nilai pada properti Value dari objek Target tidak lagi berupa single value, namun sudah berupa Array Value.

    Solusinya bisa beragam, misalkan saja:

    1 — Periksa apakah Target berada pada area tabel:

    If Not Intersect(Target, Range("A1:EK1000")) Is Nothing Then

    menjadi

    If Not Intersect(Target, Me.Range("A3").CurrentRegion) Is Nothing Then

    Dengan script di atas, maka VBA hanya akan memproses perintah lainnya jika perubahan terjadi pada hanya pada range A1:DZ532 (sesuai area yang digunakan pada tabel yang ada pada sheet SITE LIST).

    2 — Periksa apakah Target merupakan single cell:

    ...
    If Not Intersect(Target, Range("A1:EK1000")) Is Nothing Then
         If (Target.Columns.Count * Target.Rows.Count) = 1 Then
              ...
         End If
    End If
    ...

    Pada script di atas, VBA akan memeriksa apakah objek Target berada pada range A1:EK1000. Jika ya, VBA akan memeriksa kembali apakah Target merupakan single cell (jumlah baris dan jumlah kolom harus = 1, 1 * 1 = 1).

    3 — Menambahkan error trapping:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1:EK1000")) Is Nothing Then
        Dim objHTTP As Object
        Dim URL As String, Json As String, ColLett As String, CellValue As String, SheetName As String
        Dim RowNum As Long
    
        Err.Clear: On Error GoTo errHandler:
    
        ColLett = Split(Cells(1, Target.Column).Address, "$")(1) 'Column Letter
        RowNum = Target.Row 'Row Number
        SheetName = Name 'Sheet Name
        CellValue = Target.Value 'Cell Value
        Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
        URL = "https://hook.integromat.com/oxrfqbxpp4k8umy3czk7c9x74k1fixh7?SheetName=" & SheetName & "&Column=" & ColLett & "&RowNumber=" & RowNum & "&CellValue=" & CellValue
        objHTTP.Open "PATCH", URL, False
        objHTTP.setRequestHeader "Content-type", "application/json"
        objHTTP.send (Json) 'Send Information
        
    errHandler:
        If Err Then
            Debug.Print Err.Number, Err.Description
        End If
        
        Err.Clear: On Error GoTo 0
    End If

    Pada script di atas, apabila terjadi kesalahan, maka proses akan segera beralih ke baris perintah setelah label errHandler. Untuk melihat kode dan keterangan kesalahan yang terjadi, dapat dilihat pada jendela Immediate (CONTROL G).

    Coba diperbaiki scriptnya dengan salah satu contoh di atas. Mudah-mudahan dapat mengatasi masalah yang terjadi.

    Demikian.

  4. Terimakasih banyak mas @Caton atas solusi nya, masalah type missmatch sudah clear.

    Ada satu lagi masalah yang belum bisa saya selesaikan. Karena file excel ini terhubung langsung dengan google sheet (jadi setiap kolom yang saya update di excel, akan terupdate otomatis di google sheet).

    Masalahnya sebagai berikut :

    1. Jika kolom - kolom (Excel) di blok, lalu saya delete kolom - kolom yang sudah di blok tersebut (Excel). Di Google Sheet tidak mengikuti perintah tersebut. Sedangkan jika hanya delete 1 kolom, Google sheet mengikuti perintah tersebut.
    2. masalahnya sama, jika saya meng copy paste di beberapa kolom.

    Mohon bantuannya untuk masalah tersebut.

    Terimakasih atas perhatian dan bantuannya.

  5. Caton

    Agu 27 Terverifikasi Indonesia + 17.572 Poin

    Mas @kemal30 ...

    Maaf, untuk pertanyaan tentang Google Sheet, saya tidak tahu bagaimana proses aktualnya, sehingga tidak bisa memberikan solusi. Paling tidak, jika proses update ke GS dilakukan melalui script, mas bisa coba menyimpan dahulu filenya setelah proses delete (copas) baru melakukan update...

  6. baik mas @Caton terimakasih telah memberikan ilmu yang sangat bermanfaat bagi saya.

 

atau Mendaftar untuk ikut berdiskusi!