Saya menggunakan dokumen Excel untuk melacak cryptocurrency dan saya memiliki beberapa tabel pada lembar yang sama. Saya mencari kode VBA yang akan memformat sel berdasarkan input di sel lain.

Saat ini saya memformat berdasarkan sel lain dengan kode di bawah ini. Contoh yang ingin saya capai: http://prntscr.com/p3sof8

Kode:

Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Count = 1 Then
            If .Column = 1 Then
                If .Value <> "BTC" Then
                    .Offset(, 1).NumberFormat = "0.00000000" & """ " & .Value & """"
                Else
                    .Offset(, 1).NumberFormat = """" & ChrW(&HE3F) & """" & "0.00000000"
                End If
            End If
        End If
    End With
End Sub

Ini bekerja sempurna untuk satu lembar.

Yang saya cari adalah menggunakan kode semacam ini untuk beberapa tabel pada lembar yang sama, yang memiliki offset berbeda, kolom "mendefinisikan", dll.

Misalnya, pada Tabel1, mata uang dimasukkan di kolom A, dan sel yang diformat ada di kolom B. Pada Tabel2, kolom inputnya adalah C dan hasilnya di E dan F, dst.

Bisakah kode di atas diubah sedemikian rupa sehingga saya bisa menggunakannya untuk tabel yang berbeda pada satu lembar?

Terima kasih banyak atas wawasan Anda!

0
KGx 21 September 2019, 21:17

1 menjawab

Jawaban Terbaik

Karena terikat ke tabel dan Anda tidak dapat memiliki nama tabel duplikat, Anda dapat menempatkan ini di ThisWorkbook dan mulai seperti ini:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

... dan itu akan bekerja pada setiap lembar.

..atau seperti ini di lembar tertentu jika hanya diperlukan dalam satu lembar:

Private Sub Worksheet_Change(ByVal Target As Range)

..kemudian:

    Dim lObj As ListObject, cl As Long, ofs As Long, rsz As Long, fc As Long
    With Target
        If .Count = 1 Then
            Set lObj = .ListObject
            If Not lObj Is Nothing Then
                fc = lObj.Range.Cells(1).Column - 1
                Select Case lObj
                    Case "Table1"
                        cl = 1 + fc 'Starting column
                        ofs = 1 'Offset
                        rsz = 1 'Resize(number of columns)
                    Case "Table2"
                        cl = 3 + fc 'Starting column
                        ofs = 2 'Offset
                        rsz = 2 'Resize(number of columns)
                    'Case "Table3"
                    '    cl = 4 + fc 'Starting column
                    '    ofs = 7 'Offset
                    '    rsz = 1 'Resize(number of columns)
                End Select

                If .Column = cl Then

                    Select Case .Value
                        Case "BTC"
                            .Offset(, ofs).Resize(, rsz).NumberFormat = """" & ChrW(&HE3F) & """" & "0.00000000"
                        Case "EUR"
                            .Offset(, ofs).Resize(, rsz).NumberFormat = "0.00" & """" & ChrW(8364) & """"
                        Case Else
                            .Offset(, ofs).Resize(, rsz).NumberFormat = "0.00000000" & """ " & .Value & """"
                    End Select
                End If
            End If
        End If
    End With
End Sub
1
AsUsual 26 September 2019, 09:09