Средства управления выбором IE 6 (Поле комбинированного списка) по меню

Так как вы имеете дело со строками, я бы рекомендовал использовать 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 или нет?

blockquote>

Когда вы сохраняете -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

7
задан Jonathan Leffler 23 November 2011 в 01:27
поделиться

4 ответа

Это - известная ошибка с IE6 с попыткой абсолютно отделениям положения сверх избранных средств управления.

Существуют обходные решения, включающие iframe контейнеры, но нет никакого хорошего ответа. Ответ контейнера iframe должен поместить iframe под любым отделением, которое Вы пытаетесь разместить выше выбора, при этом iframe является тем же размером. К сожалению, это - огромная боль в заднице.

Я предлагаю использовать систему меню JavaScript, которая уже использует контейнеры iframe, такие как меню YUI (и я принимаю jQuery).

7
ответ дан 6 December 2019 в 10:03
поделиться

Большинство крупнейших библиотек JavaScript имеет легкий реализовать решения этой проблемы. Мы используем jQuery, и bgiframe плагин очень прост в использовании и решает проблему.

7
ответ дан 6 December 2019 в 10:03
поделиться

Daniel определенно прав. Это - ужасная проблема.

Однако может быть другое решение. При использовании многоярусных меню, которые появляются открытый и закрытый, возможно записать код JavaScript, который буквально скрывает проблематичные ИЗБРАННЫЕ элементы, когда всплывающее окно открыто (разработайте элемент, чтобы иметь видимость скрытых). Затем, когда завершения меню можно раскрыть то же самое ИЗБРАННОЕ управление.

Затем просто необходимо написать код, который обнаруживает, какие ИЗБРАННЫЕ объекты мешают конкретному меню, прежде чем он откроется. Это не тривиальный код, но определенно возможно записать. Затем я просто перенес бы весь блок кода в условном выражении, которое проверяет, чтобы видеть, находится ли пользователь на IE, поскольку нет никакой потребности выполнить это на Firefox или Safari.

3
ответ дан 6 December 2019 в 10:03
поделиться

Проблема состоит в том, что ВЫБОР является "оконными" элементами в IE6, и их z-индекс - прежде всего, другой не - "оконные" компоненты. Если у Вас абсолютно должно быть что-то выше combox, Вы могли бы хотеть поместить его в другом оконном compnent, таком как IFRAME, и установить z-индекс компонента для верхнего уровня, чем то из поля комбинированного списка.

Я должен признать, это не симпатичное решение.

2
ответ дан 6 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

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