Option Explicit Private Sub MoveUpButton_DblClick(ByVal Cancel As MSForms.ReturnBoolean) TextBox1.Text = "Произведен двойной щелчок" Cancel = False Call MoveUpButton_Click End Sub Private Sub MoveDownButton_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Cancel = False Call MoveDownButton_Click End Sub
Private Sub MoveUpButton_Click() ShiftItem ListBox1, True End Sub Private Sub MoveDownButton_Click() ShiftItem ListBox1, False End Sub
Private Sub ShiftItem(ByRef lb As MSForms.Control, bUp As Boolean) Dim i%, j%, l() With lb i = .ListIndex If i + bUp >= 0 And i + bUp < lb.ListCount - 1 Then l = .List For j = 0 To UBound(l, 2) swap l(i, j), l(i + (1 Or bUp), j): Next .List = l End If End With End Sub Private Sub swap(ByRef a, ByRef b) Dim c: c = a: a = b: b = c End Sub
Private Sub UserForm_Initialize() With ListBox1 .List = [transpose(proper(text(row(r1:r12)*30,"[$-419]mmmm")))] .ListIndex = 0 End With End Sub
Private Sub OKButton_Click() Unload Me End Sub
[/vba]в Module1 [vba]
Код
Sub ShowDialog() UserForm1.Show End Sub
[/vba]
а можно я немного поумничаю? в коде формы [vba]
Код
Option Explicit Private Sub MoveUpButton_DblClick(ByVal Cancel As MSForms.ReturnBoolean) TextBox1.Text = "Произведен двойной щелчок" Cancel = False Call MoveUpButton_Click End Sub Private Sub MoveDownButton_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Cancel = False Call MoveDownButton_Click End Sub
Private Sub MoveUpButton_Click() ShiftItem ListBox1, True End Sub Private Sub MoveDownButton_Click() ShiftItem ListBox1, False End Sub
Private Sub ShiftItem(ByRef lb As MSForms.Control, bUp As Boolean) Dim i%, j%, l() With lb i = .ListIndex If i + bUp >= 0 And i + bUp < lb.ListCount - 1 Then l = .List For j = 0 To UBound(l, 2) swap l(i, j), l(i + (1 Or bUp), j): Next .List = l End If End With End Sub Private Sub swap(ByRef a, ByRef b) Dim c: c = a: a = b: b = c End Sub
Private Sub UserForm_Initialize() With ListBox1 .List = [transpose(proper(text(row(r1:r12)*30,"[$-419]mmmm")))] .ListIndex = 0 End With End Sub
With .CmbDD1 .List = [transpose(text(row(r1:r31),"dd"))] 'Заполнение данными дата CmbDD1 .ListIndex = Day(Date) - 1 'Вывод текущей даты в поле просмотра .additem"",0 End With
[/vba]
Здравствуйте.[vba]
Код
With .CmbDD1 .List = [transpose(text(row(r1:r31),"dd"))] 'Заполнение данными дата CmbDD1 .ListIndex = Day(Date) - 1 'Вывод текущей даты в поле просмотра .additem"",0 End With
в пустую ячейку вписать 1, скопировать эту ячейку, выделить диапазон, в котором числовые данные (числа, дата, время) записаны как текст, специальной вставкой (Ctrl+Alt+V) вставить как значения со включенной опцией умножить или разделить
в пустую ячейку вписать 1, скопировать эту ячейку, выделить диапазон, в котором числовые данные (числа, дата, время) записаны как текст, специальной вставкой (Ctrl+Alt+V) вставить как значения со включенной опцией умножить или разделить krosav4ig
Function fx$(expr$, arg As Variant) With CreateObject("scriptcontrol") expr = Replace(Replace(Replace(expr, ChrW(923), "&&"), "V", "||"), "¬", "!") .Language = "JScript": fx = .Eval(Join(arg, ",") & "," & expr & "?1:0") End With End Function
Function fx$(expr$, arg As Variant) With CreateObject("scriptcontrol") expr = Replace(Replace(Replace(expr, ChrW(923), "&&"), "V", "||"), "¬", "!") .Language = "JScript": fx = .Eval(Join(arg, ",") & "," & expr & "?1:0") End With End Function
гы. если в браузере нету tampermonkey или подобных, то тот файл - просто текстовый файл. если есть - кастомный клиентский js скрипт, при желании его можно внедрить шаблон общего вида страниц форума
странно, что где-то сейчас работает, хотя, если только jquery 1.7.2 подгружается из локального кэша браузера или кэша прокси, например сейчас в файле не сайте 1.12.4 (как он туда попал - вот в чем вопрос), скрипт тегов формул перестал работать из-за функции isarraylike, введенной, если я не ошибаюсь с версии 1.9.1 и входящей в метод jQuery.map в скрипте, который отвечает за работу тегов формул аргументом в этот метод передается строковая переменная и jquery в функции isarraylike пытается получить свойство length - а нет там его, вот и не работает Пока писал, заметил что в настройках сайта ужо поменян JQ 1.7.2 на 1.12.4 (в head подсмотрел), осталось тока скобочки добавить
гы. если в браузере нету tampermonkey или подобных, то тот файл - просто текстовый файл. если есть - кастомный клиентский js скрипт, при желании его можно внедрить шаблон общего вида страниц форума
странно, что где-то сейчас работает, хотя, если только jquery 1.7.2 подгружается из локального кэша браузера или кэша прокси, например сейчас в файле не сайте 1.12.4 (как он туда попал - вот в чем вопрос), скрипт тегов формул перестал работать из-за функции isarraylike, введенной, если я не ошибаюсь с версии 1.9.1 и входящей в метод jQuery.map в скрипте, который отвечает за работу тегов формул аргументом в этот метод передается строковая переменная и jquery в функции isarraylike пытается получить свойство length - а нет там его, вот и не работает Пока писал, заметил что в настройках сайта ужо поменян JQ 1.7.2 на 1.12.4 (в head подсмотрел), осталось тока скобочки добавить
_Boroda_, а у мну нет ( ну я-то знаю как починить - две скобочки добавить, ужо Сергею написал на sergeyizotov@excelworld.ru , но видимо он еще не прочитал
_Boroda_, а у мну нет ( ну я-то знаю как починить - две скобочки добавить, ужо Сергею написал на sergeyizotov@excelworld.ru , но видимо он еще не прочиталkrosav4ig
Дратути. Как вариант, пользовать ЗадатьЛокПеременную меняем Sub на Function и В макросах (Создание>Макрос) для запуска vba кода (тоже должна быть функция) есть ЗапускПрограммы
Дратути. Как вариант, пользовать ЗадатьЛокПеременную меняем Sub на Function и В макросах (Создание>Макрос) для запуска vba кода (тоже должна быть функция) есть ЗапускПрограммыkrosav4ig
Private Sub Worksheet_Change(ByVal Target As Range) Dim dic As Object, arr1 As Variant, i&, j&, ar As Range, ac As Range If Not Intersect(Target, [A1:R35]) Is Nothing Then With Application Set ac = .ActiveCell Set dic = CreateObject("scripting.dictionary") .ScreenUpdating = 0 .EnableEvents = 0 .Undo 'отмена изменения With Target For Each ar In .Areas i = i + 1 With ar If .Count = 1 Then ReDim arr1(1 To 1, 1 To 1) arr1(1, 1) = .Value dic(.Address) = arr1 Else dic(.Address) = .Value End If End With Next End With .Undo 'отмена отмены изменения With Target For Each ar In .Areas For i = 1 To ar.Rows.Count For j = 1 To ar.Columns.Count If dic(ar.Address)(i, j) <> ar.Cells(i, j) Then With ar.Cells(i, j).Offset(, 19) .Value = IIf(IsNumeric(.Value), .Value, 0) + 1 End With End If Next j, i, ar End With ac.Activate .ScreenUpdating = 1 .EnableEvents = 1 End With Set dic = Nothing End If End Sub
[/vba]
Так надо что ли? [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim dic As Object, arr1 As Variant, i&, j&, ar As Range, ac As Range If Not Intersect(Target, [A1:R35]) Is Nothing Then With Application Set ac = .ActiveCell Set dic = CreateObject("scripting.dictionary") .ScreenUpdating = 0 .EnableEvents = 0 .Undo 'отмена изменения With Target For Each ar In .Areas i = i + 1 With ar If .Count = 1 Then ReDim arr1(1 To 1, 1 To 1) arr1(1, 1) = .Value dic(.Address) = arr1 Else dic(.Address) = .Value End If End With Next End With .Undo 'отмена отмены изменения With Target For Each ar In .Areas For i = 1 To ar.Rows.Count For j = 1 To ar.Columns.Count If dic(ar.Address)(i, j) <> ar.Cells(i, j) Then With ar.Cells(i, j).Offset(, 19) .Value = IIf(IsNumeric(.Value), .Value, 0) + 1 End With End If Next j, i, ar End With ac.Activate .ScreenUpdating = 1 .EnableEvents = 1 End With Set dic = Nothing End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Dim dic As Object, arr1 As Variant, i&, j&, ar As Range, ac As Range If Not Intersect(Target, [A1:R35]) Is Nothing Then With Application Set ac = .ActiveCell Set dic = CreateObject("scripting.dictionary") .ScreenUpdating = 0 .EnableEvents = 0 .Undo 'отмена изменения With Target For Each ar In .Areas With ar If .Count = 1 Then ReDim arr1(1 To 1, 1 To 1) arr1(1, 1) = .Value dic(.Address) = arr1 Else dic(.Address) = .Value End If End With Next End With .Undo 'отмена отмены изменения With Target For Each ar In .Areas For i = 1 To ar.Rows.Count For j = 1 To ar.Columns.Count If dic(ar.Address)(i, j) <> ar.Cells(i, j) Then ar.Cells(i, j).Offset(, 19) = 1 End If Next j, i, ar End With ac.Activate .ScreenUpdating = 1 .EnableEvents = 1 End With Set dic = Nothing End If End Sub
[/vba]
Здравствуйте [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim dic As Object, arr1 As Variant, i&, j&, ar As Range, ac As Range If Not Intersect(Target, [A1:R35]) Is Nothing Then With Application Set ac = .ActiveCell Set dic = CreateObject("scripting.dictionary") .ScreenUpdating = 0 .EnableEvents = 0 .Undo 'отмена изменения With Target For Each ar In .Areas With ar If .Count = 1 Then ReDim arr1(1 To 1, 1 To 1) arr1(1, 1) = .Value dic(.Address) = arr1 Else dic(.Address) = .Value End If End With Next End With .Undo 'отмена отмены изменения With Target For Each ar In .Areas For i = 1 To ar.Rows.Count For j = 1 To ar.Columns.Count If dic(ar.Address)(i, j) <> ar.Cells(i, j) Then ar.Cells(i, j).Offset(, 19) = 1 End If Next j, i, ar End With ac.Activate .ScreenUpdating = 1 .EnableEvents = 1 End With Set dic = Nothing End If End Sub