Страницы: 1
RSS
Ошибка: Compile error: ByRef argument type mismatch
 
Добрый день, уважаемый форумчани!
ниже пользовательская функция, которая ругается на Ошибку: Compile error:  ByRef argument type mismatch

Код
Function GETLASTWORD(ByVal Text As String, Optional Separator As Variant)

Dim lastword As String

If IsMissing(Separator) Then
 Separator = " "
End If
lastword = StrReverse(Text)
lastword = Left(lastword, InStr(1, lastword, Separator, vbTextCompare))

GETLASTWORD = StrReverse(replace(lastword, Separator, ""))

End Function

как можно от этого избавиться?
функция в отделенной книге работает без проблем, а я добавил её в мою надстройку и начала ругаться.
 
Один из возможных вариантов - в Вашей надстройке переопределена функция Replace. Если это так, то подобного рода вещи (называть свои функции так же, как стандартные) не желательны. Замена в приведенном выше примере Replace на VBA.Replace может помочь.
Владимир
 
sokol92, Спасибо большое!
 
Друзья помогите с той же проблемой.
Ниже вписан код. При использовании в коде функции выдает ошибку "ByRef argument type mismatch"
Как лечить?

Благодарен заранее.


Код
Public Function Equalist(t1 As String, t2 As String) As Variant
    Dim h As Long, l As Long
        For h = Len(t1) To 1 Step -1
            For l = 1 To Len(t1) - h + 1
                If t2 Like "*" & Mid(t1, l, h) & "*" Then
                    If h > Equalist Then
                        Equalist = h
                        Exit Function
                    End If
                End If
            Next
        Next
End Function
____________________________________________________________­____________________________________________________________­__
Код
Public Sub Test4()


Dim i As Long, w As Long, ob As Long, LR As Long, c As Long
Dim Line1 As Object
Dim t As Single
Dim j As Worksheet
Dim NomerDokumenta As Integer, KodTovara As Integer, Naimenovanie As Integer, RaznicaKolvo _
As Integer, RaznicaGrn As Integer, Hozoperaciya As Integer

't = Timer

LR = Cells(Rows.Count, 1).End(xlUp).Row

ReDim B(1 To LR), D(1 To LR), E(1 To LR), R(1 To LR), S(1 To LR), U(1 To LR) As Variant

Set j = Sheets(3)

NomerDokumenta = j.Cells.Find("№ документа").Column
KodTovara = j.Cells.Find("Код товара").Column
Naimenovanie = j.Cells.Find("Наименование товара").Column
RaznicaKolvo = j.Cells.Find("Разница, кол-во").Column
RaznicaGrn = j.Cells.Find("Разница, грн").Column
Hozoperaciya = j.Cells.Find("Хоз.операция").Column

For c = 1 To 3
    ' Первый заход
    For i = 2 To LR
        B(i) = j.Cells(i, NomerDokumenta)
        D(i) = j.Cells(i, KodTovara)
        E(i) = j.Cells(i, Naimenovanie)
        R(i) = j.Cells(i, RaznicaKolvo)
        S(i) = j.Cells(i, RaznicaGrn)
        U(i) = j.Cells(i, Hozoperaciya)
    Next i
    
    For w = 2 To UBound(B())
        For i = 2 To UBound(B())
            If IsEmpty(j.Cells(w, 30)) And IsEmpty(j.Cells(i, 30)) Then
                If Equalist(E(w), E(i)) > 20 Then
                    If R(w) < 0 And R(i) > 0 Then
                        If Abs(j.Cells(w, 18)) > Abs(j.Cells(i, 18)) Then
                            If Abs(Abs(S(w) / R(w)) - Abs(S(i) / R(i))) < 20 Then
                                If w < i Then
                                    j.Rows(w + 1).Insert Shift:=xlDown
                                    j.Rows(w + 1).FillDown
                                    j.Cells(w + 1, 18) = -j.Cells(i + 1, 18)
                                    j.Cells(w, 18) = j.Cells(w, 18) + j.Cells(i + 1, 18)
                                    j.Cells(w + 1, 30) = "Четвертый круг 1_" & w
                                    j.Cells(i + 1, 30) = "Четвертый круг 1_" & w
                                        LR = Cells(Rows.Count, 1).End(xlUp).Row
                                            ReDim B(1 To LR), D(1 To LR), E(1 To LR), R(1 To LR), S(1 To LR), U(1 To LR) As Variant
                                                For ob = 2 To LR
                                                    B(ob) = j.Cells(ob, NomerDokumenta)
                                                    D(ob) = j.Cells(ob, KodTovara)
                                                    E(ob) = j.Cells(ob, Naimenovanie)
                                                    R(ob) = j.Cells(ob, RaznicaKolvo)
                                                    S(ob) = j.Cells(ob, RaznicaGrn)
                                                    U(ob) = j.Cells(ob, Hozoperaciya)
                                                Next ob
                                End If
                            End If
                        End If
                    End If
                End If
            End If
        Next i
    Next w

End Sub
Изменено: Jerry.Sweer - 21.10.2020 22:40:40
 
Коды ОЧЕНЬ желательно оформлять соответствующим тегом(кнопка <...> в панели редактора сообщений). Без оформления тегами очень неудобно коды читать.
Ошибка банальная - у Вас массивы имеют тип VAriant, а функция Equalist требует тип String. Посему исправляется очень просто:
Код
If Equalist(Cstr(E(w)), Cstr(E(i))) > 20 Then
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо большое.  
Страницы: 1
Наверх