pavlusha15 Пользователь Сообщений: 4 |
#1 25.06.2017 22:09:12 Дело в том, что на одном листе создана кнопка и к нему привязан модуль с макросом, я хочу переместить кнопку в форму, но вылазит ошибка «Expected End Sub»
Изменено: pavlusha15 — 25.06.2017 22:44:48 |
||
Hugo Пользователь Сообщений: 23371 |
Где-то в форме недописано окончание макроса. |
pavlusha15 Пользователь Сообщений: 4 |
#3 25.06.2017 22:20:28
Хм, ну где именно? |
||
pavlusha15 Пользователь Сообщений: 4 |
#4 25.06.2017 22:21:23
Когда поставил в кнопку, вот так Изменено: pavlusha15 — 25.06.2017 22:21:41 |
||
Ігор Гончаренко Пользователь Сообщений: 13859 |
#5 25.06.2017 22:23:30 а так:
или
как Вам удобно Изменено: Ігор Гончаренко — 25.06.2017 22:24:03 Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||||
Hugo Пользователь Сообщений: 23371 |
#6 25.06.2017 22:33:32
— хотелось ответить, но так отвечать нельзя
|
||||
pavlusha15 Пользователь Сообщений: 4 |
Я просто новичок в этом, спасибо вам большое! |
Юрий М Модератор Сообщений: 60761 Контакты см. в профиле |
pavlusha15, название темы у Вас никудышное. Предложите новое — модераторы поменяют. |
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
Юрий М, может так сгодится:
|
Юрий М Модератор Сообщений: 60761 Контакты см. в профиле |
|
Ігор Гончаренко Пользователь Сообщений: 13859 |
#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
withEnd If
AfterExit Sub
- And you are calling a
Sub
within aSub
which throws theEnd Sub error
you only need to put inEmailExtract
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]