Expected end sub ошибка vba

 

pavlusha15

Пользователь

Сообщений: 4
Регистрация: 25.06.2017

#1

25.06.2017 22:09:12

Дело в том, что на одном листе создана кнопка и к нему привязан модуль с макросом, я хочу переместить кнопку в форму, но вылазит ошибка «Expected End Sub»

Код
Sub Show_Form()
 Reports.Show 'отображаем форму отчета
End Sub

Изменено: pavlusha1525.06.2017 22:44:48

 

Hugo

Пользователь

Сообщений: 23371
Регистрация: 22.12.2012

Где-то в форме недописано окончание макроса.

 

pavlusha15

Пользователь

Сообщений: 4
Регистрация: 25.06.2017

#3

25.06.2017 22:20:28

Цитата
Hugo написал:
Где-то в форме недописано окончание макроса

Хм, ну где именно?

 

pavlusha15

Пользователь

Сообщений: 4
Регистрация: 25.06.2017

#4

25.06.2017 22:21:23

Код
Private Sub CommandButton8_Click()
Sub Show_Form()
Reports.Show
End Sub

Когда поставил в кнопку, вот так

Изменено: pavlusha1525.06.2017 22:21:41

 

Ігор Гончаренко

Пользователь

Сообщений: 13859
Регистрация: 01.01.1970

#5

25.06.2017 22:23:30

а так:

Код
Private Sub CommandButton8_Click()
  Show_Form
End Sub

или

Код
Private Sub CommandButton8_Click()
 Reports.Show
End Sub

как Вам удобно

Изменено: Ігор Гончаренко25.06.2017 22:24:03

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Hugo

Пользователь

Сообщений: 23371
Регистрация: 22.12.2012

#6

25.06.2017 22:33:32

Цитата
pavlusha15 написал:
Хм, ну где именно?

— хотелось ответить, но так отвечать нельзя :)
Но после следующего поста отвечаю — ну неужели не видно?
Должно быть как-то так, если не нравится то, что выше сказал Игорь:

Код
Private Sub CommandButton8_Click()
'тут можно что-то сделать, например вызвать другой макрос как в примере выше
End Sub
Sub Show_Form()
Reports.Show
End Sub
 

pavlusha15

Пользователь

Сообщений: 4
Регистрация: 25.06.2017

Я просто новичок в этом, спасибо вам большое!

 

Юрий М

Модератор

Сообщений: 60761
Регистрация: 14.09.2012

Контакты см. в профиле

pavlusha15, название темы у Вас никудышное. Предложите новое — модераторы поменяют.
Стоит только отойти на минутку — Игори тут, как тут )

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

Юрий М, может так сгодится:
Прошу помочь найти причину ошибки «Expected End Sub»


Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Юрий М

Модератор

Сообщений: 60761
Регистрация: 14.09.2012

Контакты см. в профиле

 

Ігор Гончаренко

Пользователь

Сообщений: 13859
Регистрация: 01.01.1970

#11

25.06.2017 22:58:00

в каком-то из модулей количество Sub больше, чем количество End Sub

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

I am trying, when a line of information is added to one of my sheets, to automatically add that line to a different sheet in the same workbook.

I found this code and tweaked it a little:

Sub addrow()

Public Sub worksheet_change(ByVal target As Range)

    Set sourcebook = ThisWorkbook
    Set sourcesheet = sourcebook.Worksheets("sheet1")

    Set targetbook = ThisWorkbook
    Set targetsheet = targetbook.Worksheets("sheet10")

    If sourcesheet.Cells(198, 16).Value = "Auto" Or _
        sourcesheet.Cells(198, 16).Value = "Connect" Or _
        sourcesheet.Cells(198, 16).Value = "Multiple*" Or _
        sourcesheet.Cells(198, 16).Value = "Property" Or _
        sourcesheet.Cells(198, 16).Value = "Umbrella" Or _
        sourcesheet.Cells(198, 16).Value = "WC" Then
        GoTo link
    Else
        GoTo insertion
    End If

    insertion: targetsheet.Activate
    ActiveSheet.Rows(198).EntireRow.Insert

    sourcesheet.Activate

link:
    'targetsheet.Cells(194, targetsheet.Range("initial response").Column) = sourcesheet.Cells(198, 16).Value
    targetsheet.Cells(194, 16) = sourcesheet.Cells(198, 16).Value

    targetsheet.Cells(194, 16) = sourcesheet.Cells(198, 16).Value

End Sub

I get the error message «Compile Error: Expected End Sub» and it highlights that first line of code- Sub addrow(). When I try taking this line out, VBA requires me to create a new macro when I try and run it, which then adds that line back in, and I am back to square one.

  • you have to close the If statement with End If After Exit Sub
  • And you are calling a Sub within a Sub which throws the End Sub error you only need to put in EmailExtract

See code below:

Private Sub CommandButton1_Click()
If TextBox1.Value = "Password" Then 'Replace Password by your custom password
    EmailExtract 'This is the sub that was being called by your button.
Else
    MsgBox "You are not allowed to launch the macro"
Exit Sub
End If
End Sub

Update:

This is a different approach on password protection and simply uses an InputBox instead of an UserForm to collect and check a password value.

Make sure that you password protect your VBA code, otherwise anyone that knows how can check the code and get the password from the code.

Sub EmailExtract()
Dim Message As String, Title As String, Password As String
Message = "Enter the macro password"    ' Set prompt.
Title = "Macro Password"    ' Set title.
Password = InputBox(Message, Title)
If Password = "Password Here" Then

    ''***Code for the macro then follows***

Else
    MsgBox "You are not allowed to launch the macro"
    Exit Sub
End If
End Sub

2nd Update:

This way you create a Sub to call the UserForm then validate the password input, after that you call the sub EmailExtract() and run the desired code.

The way for using a password protection with a UserForm is as followed:

Show UserForm (being called by your shape):

Sub UserFormShow()

UserForm1.Show

End Sub

Do password validation:

Private Sub CommandButton1_Click()
If TextBox1.Value = "Password" Then 'Replace Password by your custom password
    EmailExtract 'The new sub your going to call
Else
    MsgBox "You are not allowed to launch the macro"
Exit Sub
End If

End Sub

Run your code (the new sub):

Sub EmailExtract()

***Code for the macro then follows***

end sub

Rikozenit, а ругается потому что описание функции находится внутри Sub, а не надо этого делать, вынесите из саба, а всабе поставьте обращение к этой функции A=F(…)

А первый ваш макрос работает, только непонятно зачем надо накапливать комментарии? Ну это вам виднее.

Добавлено через 10 минут
megionkik, второе моё замечание относится к вам, не посмотрел, что в одной теме два разных человека



1



Permalink

Cannot retrieve contributors at this time

title keywords f1_keywords ms.prod ms.assetid ms.date ms.localizationpriority

Expected End Sub

vblr6.chm1011142

vblr6.chm1011142

office

cac2b471-cd7e-7c71-e671-71b9d55b8bd9

06/08/2017

medium

An Endprocedure statement must match the procedure in which it occurs. This error has the following cause and solution:

  • You used End Function or End Property to end a Sub procedure. Use End Sub for this type of procedure.

For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).

[!includeSupport and feedback]

Понравилась статья? Поделить с друзьями:
  • Exloader ошибка антивирус
  • Exit status 1 ошибка компиляции для платы arduino
  • Exhaust workshop ошибка туарег
  • Exhaust system warning на daf ошибка
  • Exel ошибка при направлении команды приложению