Ошибка с функцией сопоставления индекса с использованием имени в VBA - PullRequest
0 голосов
/ 28 мая 2018

Пожалуйста, помогите с кодом ниже Я обнаружил ошибку в жирной строке кода:

Обновите код для всех:

Private Sub CommandButton2_Click() 'save
    Dim sname As String
    Dim yrow As Long, ws As Worksheet
    sname = ComboBox1.Value
    Set ws = Sheets(sname)
    yrow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1
If (ComboBox1.Value = "DP" Or ComboBox1.Value = "WD") Then
    If (ComboBox7 = "" Or TextBox1 = "") Then
        MsgBox ("Masih ada kolom yg belum di isi")
        Exit Sub
    Else
        ws.Range("A" & yrow).Value = "=ROW()-1"
        ws.Range("B" & yrow).Value = Sheets("TRX").Range("B2")
        ws.Range("C" & yrow).Value = ComboBox7
        ws.Range("D" & yrow).Value = TextBox1.Value
    End If
End If
If (ComboBox1.Value = "BELI") Then
    If (ComboBox3 = "" Or ComboBox5 = "" Or ComboBox6 = "") Then
        MsgBox ("Masih ada kolom yg belum di isi")
        Exit Sub
    Else
        ws.Range("A" & yrow).Value = "=ROW()-1"
        ws.Range("B" & yrow).Value = Sheets("TRX").Range("B2")
        ws.Range("C" & yrow).Value = ComboBox3
        **ws.Range("D" & yrow).Value = Application.WorksheetFunction.Index(harga, Application.WorksheetFunction.Match(ComboBox3, koin, 0)).Value**
    End If
End If

End Sub

Спасибо за ваш ответ!

1 Ответ

0 голосов
/ 28 мая 2018

Шаг за шагом запускайте этот фрагмент кода с помощью F8 в новом файле Excel:

Option Explicit

Public Sub TestMe()

    Dim ws As Worksheet: Set ws = Worksheets(1)
    Dim harga As Range: Set harga = ws.Range("A1:C10")
    Dim comboBox3 As String
    Dim koin As Range: Set koin = ws.Range("D1:D10")

    comboBox3 = "Something"
    Range("D3") = "Something"
    Range("A3") = "Something"

    With WorksheetFunction
        Debug.Print .Match(comboBox3, koin, 0)
        ws.Range("D5") = .Index(harga, .Match(comboBox3, koin, 0), 1)
    End With

End Sub

Показывает, как используются Match() и Index().В рассматриваемом коде, вероятно, нет ничего до Match, поэтому это приводит к ошибке.Если вы хотите, чтобы ошибки были возвращены, а не "выброшены", попробуйте Application.Match() и Application.Index():

Public Sub TestMe()

    Dim ws As Worksheet: Set ws = Worksheets(1)
    Dim harga As Range: Set harga = ws.Range("A1:C10")
    Dim comboBox3 As String
    Dim koin As Range: Set koin = ws.Range("D1:D10")

'    comboBox3 = "Something"
'    Range("D3") = "Something"
'    Range("A3") = "Something"

    With Application
        Debug.Print .Match(comboBox3, koin, 0)
        ws.Range("D5") = .Index(harga, .Match(comboBox3, koin, 0), 1)
    End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...