2014-01-23 3 views
0

Мне нужен следующий код для работы, так как его нет в настоящее время, любая помощь будет принята с благодарностью Я пытаюсь на века с несколькими вариантами, но просто не могу показаться, чтобы заставить его работатьОстановить макрос, работающий, если activecell.row меньше определенного числа

Sub INCOMENEWLINE() 
' 
' INCOMENEWLINE Macro 
' 

' 
If ActiveCell.Row < 74 Then 
    MsgBox "You cannot insert a new line here" 
    Exit Sub 
End If 

If ActiveCell.Row > 73 Then 
    ActiveSheet.Unprotect Password:="PB2014" 
    Range("SAFILTER").AutoFilter 
    Range("INCOMENEWLINE").Copy 
    ActiveCell.EntireRow.Insert 
    Selection.RowHeight = 13.5 
    Range("SAFILTER").AutoFilter Field:=1, Criteria1:="O" 
    Dim c As Range 
    For Each c In Range("I5:J5") 
     c.EntireColumn.Hidden = (c.Value = 0) 
    Next c 
Application.ScreenUpdating = True 
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ 
     , Password:="PB2014" 
    Exit Sub 
End If 

End Sub 
+0

что он должен достичь? вы пробовали отлаживать и переходить? что не работает должным образом? –

+0

Я хочу вставить на листе 2 строки с именем INCOMENEWLINE, но не хочу, чтобы люди могли вставлять эти строки над строкой 73, поскольку в верхней части листа есть заголовки и вычисления, которые я не хочу, чтобы люди чтобы иметь возможность вставлять между тем, как этот лист загружается в другую книгу, и если строки изменяются до строки 73, он отправляет неверную информацию в связанный файл. – user3228638

+0

. Я не хочу, чтобы вычисления были размещены на отдельном листе в том же (я думаю, это будет обходным путем, но не будет работать в этом случае по другим причинам) – user3228638

ответ

1

Используйте этот код в VBAProject-> Microsoft Excel Objects-> Лист1 (Лист1) или любой другой лист вы хотите.

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If ActiveCell.Row < 74 Then 
     MsgBox "You cannot insert a new line here" 
    Else 
     'Insert the rest of your code here 
    End If 
End Sub 

Он будет автоматически запускаться при каждом изменении выбора. Так что да, поставьте это в своем листе, а не в форме модуля или пользователя.

Вы, возможно, придется разделить его макросы во что-то вроде этого тоже:

Объявить открытую переменную:

Public StopMacro as Boolean 

тогда это:

Sub SetStopMacro() 

StopMacro = True 

End Sub 

И, наконец:

Sub Macro1() 
    While StopMacro is not False 
     ''Do Stuff 
     ''Do more stuff 
     Exit sub ''This is if you don't want this code running over and over again 
    Wend 
End Sub 

И тогда вы бы назвали SetStopMacro в подмножестве Worksheet_SelectionChange.

0

попытаться изменить activecell.row на selection.row

Смежные вопросы