2014-02-06 3 views
1

У меня есть фрагмент кода, который очищает выбранные ячейки.VBA Macro перестала работать

Private Sub CommandButton6_Click() 
ThisWorkbook.Sheets("MoM-Log").Unprotect Password:="Password" 
ThisWorkbook.Sheets("MoM-Template").Unprotect Password:="Password" 
ThisWorkbook.Activate 
Dim cell As Object 
Dim count As Integer 
For Each cell In selection 
    cell.Clear 
    With cell 
     .BorderAround ColorIndex:=1, Weight:=xlThin 
     .HorizontalAlignment = xlCenter 
     If .Column = 3 Or .Column = 6 Then 
      .HorizontalAlignment = xlLeft 
     End If 
     If .Column = 3 Or .Column = 4 Or .Column = 6 Then 
      .WrapText = True 
     End If 
    End With 
Next cell 
ThisWorkbook.Sheets("MoM-Log").Protect Password:="Password" 
ThisWorkbook.Sheets("MoM-Template").Protect Password:="Password" 
End Sub 

Этот код работал нормально. Но он прекратил работать, как только я добавил к нему дополнительный код. Что является,

Sub DeletePopUpMenu() 
    ' Delete the popup menu if it already exists. 
    On Error Resume Next 
    Application.CommandBars("MyPopUpMenu").Delete 
    On Error GoTo 0 
End Sub 

Sub CreateDisplayPopUpMenu() 
' Delete any existing popup menu. 
    Windows(ThisWorkbook.Name).Activate 
    Sheet1.Select 
    Call DeletePopUpMenu 

    ' Create the popup menu. 
    Call Custom_PopUpMenu_1 

' Display the popup menu. 
    On Error Resume Next 
    Application.CommandBars("MyPopUpMenu").ShowPopup 
    On Error GoTo 0 
End Sub 

Public Sub Custom_PopUpMenu_1() 
    Dim MenuItem As CommandBarPopup 
    ' Add the popup menu. 
    With Application.CommandBars.Add(Name:="MyPopUpMenu", Position:=msoBarPopup, _ 
    MenuBar:=False, Temporary:=True) 

    ' First, add two buttons to the menu. 
    With .Controls.Add(Type:=msoControlButton) 
     .Caption = "Save As..." 
     .FaceId = 71 
     .OnAction = "'" & ThisWorkbook.Name & "'!" & "TestMacro" 
    End With 
End With 
End Sub 

Public Function selection(R As Integer, st As String, y As Workbook) As Integer 
    count_col = 1 
    Do 
     x = y.Sheets("Sheet1").Cells(R, count_col) 
     If x = st Then ' St is a desired string 
      Exit Do 
     End If 
     count_col = count_col + 1 
    Loop While count_col <> 100 
    selection = count_col 
End Function 

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

Спасибо

+1

Птицы Вид: Остальная часть кода не имеет прямую связь с первый код, который вы опубликовали. 'Этот код работал нормально. Но он прекратил работать, как только я добавил к нему дополнительный код. «В каких отношениях это остановилось? Любые сообщения об ошибках? –

+0

Да, в режиме отладки он дает следующую ошибку: Ошибка компилятора: Аргумент не является обязательным в строке, «Для каждой ячейки в выборе» – user2148238

ответ

1

Yes in debug mode, it gives the following error, Compiler Error: Argument not optional at line, "For Each cell In selection" – user2148238 46 mins ago

Вы получаете эту ошибку, потому что выбор не является допустимым Range. Что должно было произойти, что другой код должен перемещать выделение на что-то другое, что не является диапазоном. Чтобы убедиться, что у вас есть допустимый диапазон, используйте TypeName, как показано ниже.

Также Изменить Dim cell As Object для Dim cell As Range

Private Sub CommandButton6_Click() 
    ThisWorkbook.Sheets("MoM-Log").Unprotect Password:="Password" 
    ThisWorkbook.Sheets("MoM-Template").Unprotect Password:="Password" 

    Dim cell As Range 
    Dim count As Integer 

    '~~> Check if what the user selected is a valid range 
    If TypeName(Selection) <> "Range" Then 
     MsgBox "Select a range first." 
     Exit Sub 
    End If 

    For Each cell In Selection 
     cell.Clear 
     With cell 
      .BorderAround ColorIndex:=1, Weight:=xlThin 
      .HorizontalAlignment = xlCenter 

      If .Column = 3 Or .Column = 6 Then .HorizontalAlignment = xlLeft 
      If .Column = 3 Or .Column = 4 Or .Column = 6 Then .WrapText = True 
     End With 
    Next cell 

    ThisWorkbook.Sheets("MoM-Log").Protect Password:="Password" 
    ThisWorkbook.Sheets("MoM-Template").Protect Password:="Password" 
End Sub 
+0

Ошибка по-прежнему выходит .... Ошибка встречается при первом обнаружении «выбора», , следовательно, теперь ошибка находится в строке. Если TypeName (Selection) <> «Range» Затем выделяется «Selection». Код для командной кнопки. Вышеупомянутая ошибка упоминается в режиме Debug, но если я нажму на соответствующую кнопку, не открывая код, ошибка, которую я получаю, равна «Ошибка компилятора в скрытом модуле: Sheet1» – user2148238

+0

Могу ли я увидеть ваш файл? –

+0

Извините, у него есть секретная информация ... Так что я не могу поделиться файлом – user2148238

0

Добавьте свой выбор прямо над линией For Each cell In selection

Например

Sheets("Sheet1").Range("A1:F17").Select 
For Each cell In selection 
Смежные вопросы