Несоответствие типов аргументов VBA ByRef несовместимо?

Из здесь вы можете сделать это:

/* Extend jQuery with functions for PUT and DELETE requests. */

function _ajax_request(url, data, callback, type, method) {
    if (jQuery.isFunction(data)) {
        callback = data;
        data = {};
    }
    return jQuery.ajax({
        type: method,
        url: url,
        data: data,
        success: callback,
        dataType: type
        });
}

jQuery.extend({
    put: function(url, data, callback, type) {
        return _ajax_request(url, data, callback, type, 'PUT');
    },
    delete_: function(url, data, callback, type) {
        return _ajax_request(url, data, callback, type, 'DELETE');
    }
});

В основном это копия $.post() с адаптированным параметром метода.

1
задан Lawrence 16 January 2019 в 06:43
поделиться

1 ответ

Так как вы имеете дело со строками, я бы рекомендовал использовать Long вместо Integer. Вы получаете эту ошибку, потому что в Private Sub buttonclick(nr As Integer) она ожидает Integer, и вы передаете Variant

Измените Private Sub buttonclick(nr As Integer) на Private Sub buttonclick(nr As Long)

и используйте это [ 1119]

Private Sub distract2()
    Dim nr As Long
    Dim nVal As Long

    nr = nextrow

    If nr = 2 Then Exit Sub

    nVal = nr - 1

    buttonclick nVal
End Sub

Однако, когда я удаляю -1 после nr, VBA выдает ошибку ByRef. Два вопроса: кто-нибудь знает, почему это происходит? Лучше затемнить nr как Integer или нет?

Когда вы сохраняете -1, оно вычитает значение на 1, и результат имеет тип Integer, и поэтому вы делаете не получить ошибку. Если бы nr было 104857, то это дало бы ошибку. Интересно Читать

Да, лучше сменить ваши переменные на соответствующий тип данных. Однако в вашем случае это должно быть Long вместо Integer, как указано выше

Ваш полный код может быть записан как

Option Explicit

Private Sub distract2()
    Dim nr As Long
    Dim nVal As Long

    nr = nextrow

    If nr = 2 Then Exit Sub

    nVal = nr - 1

    buttonclick nVal
End Sub

Function nextrow() As Long
    With ActiveSheet
        nextrow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
    End With
End Function

Private Sub buttonclick(nr As Long)
    With ActiveSheet
        .Cells(nr, 2) = Now
        If nr = 2 Then Exit Sub
        .Cells(nr - 1, 3) = .Cells(nr, 2) - .Cells(nr - 1, 2)
    End With
End Sub
0
ответ дан Siddharth Rout 16 January 2019 в 06:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: