Так как вы имеете дело со строками, я бы рекомендовал использовать 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
Это - известная ошибка с IE6 с попыткой абсолютно отделениям положения сверх избранных средств управления.
Существуют обходные решения, включающие iframe контейнеры, но нет никакого хорошего ответа. Ответ контейнера iframe должен поместить iframe под любым отделением, которое Вы пытаетесь разместить выше выбора, при этом iframe является тем же размером. К сожалению, это - огромная боль в заднице.
Я предлагаю использовать систему меню JavaScript, которая уже использует контейнеры iframe, такие как меню YUI (и я принимаю jQuery).
Большинство крупнейших библиотек JavaScript имеет легкий реализовать решения этой проблемы. Мы используем jQuery, и bgiframe плагин очень прост в использовании и решает проблему.
Daniel определенно прав. Это - ужасная проблема.
Однако может быть другое решение. При использовании многоярусных меню, которые появляются открытый и закрытый, возможно записать код JavaScript, который буквально скрывает проблематичные ИЗБРАННЫЕ элементы, когда всплывающее окно открыто (разработайте элемент, чтобы иметь видимость скрытых). Затем, когда завершения меню можно раскрыть то же самое ИЗБРАННОЕ управление.
Затем просто необходимо написать код, который обнаруживает, какие ИЗБРАННЫЕ объекты мешают конкретному меню, прежде чем он откроется. Это не тривиальный код, но определенно возможно записать. Затем я просто перенес бы весь блок кода в условном выражении, которое проверяет, чтобы видеть, находится ли пользователь на IE, поскольку нет никакой потребности выполнить это на Firefox или Safari.
Проблема состоит в том, что ВЫБОР является "оконными" элементами в IE6, и их z-индекс - прежде всего, другой не - "оконные" компоненты. Если у Вас абсолютно должно быть что-то выше combox, Вы могли бы хотеть поместить его в другом оконном compnent, таком как IFRAME, и установить z-индекс компонента для верхнего уровня, чем то из поля комбинированного списка.
Я должен признать, это не симпатичное решение.