MrExcel Publishing
Your One Stop for Excel Tips & Solutions

Disabling macros once a commandbutton is clicked


Posted by M Walker on August 21, 2001 2:59 AM

Hi,

This is beginning to get on my nerves now. I'm trying to create a worksheet that has a command button that saves the document ot a new location but in doing so removes the command button and disables the macro that force a userform to appear once the document is oppened. I can get rid of the commandbutton but the userform keeps appearing. Any ideas??

This is the code that i'm attempting to use...

Private Sub CommandButton1_Click()

ThisWorkbook.SaveAs "C:\Tests\Quotations\" & Range("QuotationNumber")

Macro.Quote.Enabled = False
CommandButton1.Visible = False

ThisWorkbook.Protect


ThisWorkbook.Save
End Sub

I've tried variations such as Welcome (the userforms name).Hide

Welcome.Enabled = false

I'm using excel 97

Cheers,
Matt


Posted by Ian on August 21, 2001 3:34 AM

Had the same problem, this problably wrong, but I placed a letter into a hidden cell when then action was done, then the next time it exit sub if you look for that letter in the location you put it

Private Sub CommandButton1_Click()

If Range("b44").Value = "A" Then
Exit Sub
ElseIf ThisWorkbook.SaveAs "C\Tests\Quotations\" & Range("QuotationNumber")
Range("b44").Value = "A"
CommandButton1.Visible = False
ThisWorkbook.Protect
ThisWorkbook.Save
else
end if
end sub

I hope someone can give me a better answer but...

Any help

Ian

Posted by Robb on August 21, 2001 5:59 AM

Matt

I assume you call the "Quote" macro by way of "Workbook_Open" or an Auto_Open macro.

If you never want the code to run again, it may be best to delete it altogether. You can do this via code so long as the Project is not locked.

Code is something like this:


Dim myLIne As Long, allLines As Long
myLIne = Application.VBE.ActiveVBProject.VBComponents("Module1").CodeModule.ProcStartLine("QUOTE", vbext_pk_Proc)
allLines = Application.VBE.ActiveVBProject.VBComponents("Module1").CodeModule.ProcCountLines("QUOTE", vbext_pk_Proc)
Application.VBE.ActiveVBProject.VBComponents("Module1").CodeModule.DeleteLines myLIne, allLines

You would need to amend the code to point to the module in which you have the macro. Then include it in the Button1_Click code instead of the Enabled statement.

Any help?

Regards

Posted by Robb on August 21, 2001 6:14 AM

Matt

If you are calling the "Quote" macro, you may need to remove the call line from the code as well.

If it is the only call from an "auto" macro, just repeat the code (amended) to remove the calling macro as well.

If it does other thing, better to just remove the calling line. You will need to count down to it - start right at the very top of the module code pane and count down.

Assuming it is line 23, the code would be:

Application.VBE.ActiveVBProject.VBComponents("ThisWorkbook").CodeModule.DeleteLines 23, 1

You will ned to replace "This Workbook" if that is not where the macro is.

Any problem, post again - unfortunately I would not be able to reply until overnight.

Hope this helps

Regards

Matt I assume you call the "Quote" macro by way of "Workbook_Open" or an Auto_Open macro. If you never want the code to run again, it may be best to delete it altogether. You can do this via code so long as the Project is not locked. Code is something like this:

: Hi, : This is beginning to get on my nerves now. I'm trying to create a worksheet that has a command button that saves the document ot a new location but in doing so removes the command button and disables the macro that force a userform to appear once the document is oppened. I can get rid of the commandbutton but the userform keeps appearing. Any ideas?? : This is the code that i'm attempting to use... : Private Sub CommandButton1_Click() : ThisWorkbook.SaveAs "C:\Tests\Quotations\" & Range("QuotationNumber") : Macro.Quote.Enabled = False : CommandButton1.Visible = False : ThisWorkbook.Protect : : ThisWorkbook.Save : End Sub : I've tried variations such as Welcome (the userforms name).Hide : Welcome.Enabled = false : I'm using excel 97 : Cheers, : Matt

Posted by Robb on August 21, 2001 6:45 AM

Matt

Possibly a simpler solution is a "workaround" way of doing it.

Include a value somewhere in the workbook - say something like an A in a cell.

Let's assume this is in Sheet1 Range a1.

In the macro that calls the UserForm, include:

If Worksheets("Sheet1").Range("A1") = "A" then
{your cade to call the userform]
Else
End If

In the CommandButton1_Click code, replace the Macro Enabled statement with:

Worksheets("Sheet1").Range("a1").ClearContents

After that, since there is no value in Range("a1"), the calling macro will no longer invoke the UserForm.

Sorry to be so convoluted, but I hope it helps.

Regards

If you are calling the "Quote" macro, you may need to remove the call line from the code as well. If it is the only call from an "auto" macro, just repeat the code (amended) to remove the calling macro as well. If it does other thing, better to just remove the calling line. You will need to count down to it - start right at the very top of the module code pane and count down. Assuming it is line 23, the code would be: Application.VBE.ActiveVBProject.VBComponents("ThisWorkbook").CodeModule.DeleteLines 23, 1 You will ned to replace "This Workbook" if that is not where the macro is. Any problem, post again - unfortunately I would not be able to reply until overnight. Hope this helps Regards : Dim myLIne As Long, allLines As Long : myLIne = Application.VBE.ActiveVBProject.VBComponents("Module1").CodeModule.ProcStartLine("QUOTE", vbext_pk_Proc) : allLines = Application.VBE.ActiveVBProject.VBComponents("Module1").CodeModule.ProcCountLines("QUOTE", vbext_pk_Proc) : Application.VBE.ActiveVBProject.VBComponents("Module1").CodeModule.DeleteLines myLIne, allLines : You would need to amend the code to point to the module in which you have the macro. Then include it in the Button1_Click code instead of the Enabled statement. : Any help? : Regards :

Posted by Matt Walker on August 21, 2001 7:26 AM

Thanks lot!! Could you check this out?

Thanks a lot, your on a roll!!

I've now cracked it using your help. Thanks again.

I don't know if you could help me with this problem?

I have a range of values that i want to check. They are total numbers of stock that i want to check for values below, say 5. If they have a value below such a figure i want to add the total and the product description to a list box on a user from.

I've labelled the ranges "totals" and "description" but can't seem get excel to place stock with a value belwo 5 in the listbox. I would also like (if possible) to chnage the level before they get entered into the listbox of certain types of stock but that should be relativly easy once the initial problem is cracked.

Any help would be appreciated.

Cheers (and thanks again)

Matt

Posted by Robb on August 22, 2001 6:14 AM

Re: Thanks lot!! Could you check this out?

Matt

Is your ListBox bound or unbound?

I'm not absolutely sure if this is what you are trying to do, but try this code.

You will need a UserForm with a CommandButton1 and ListBox1 (or you will need to change those references in the code). You will have to play with the ranges to suit your situation, but the result is that the values in the
2 columns are concatenated and added to the ListBox.

Private Sub CommandButton1_Click()
On Error Resume Next
For Each r In Worksheets("Errors").UsedRange.Rows
n = r.Row
If Worksheets("Whatever").Cells(n, 3) = "2108" And Worksheets("Whatever").Cells(n, 4) <> "" Then
myentry = Worksheets("Whatever").Cells(n, 3) & Worksheets("Whatever").Cells(n, 4)
ListBox1.AddItem (myentry)
Else
End If
Next r
End Sub


Any help?

Regards


Regards

Thanks a lot, your on a roll!! I've now cracked it using your help. Thanks again. I don't know if you could help me with this problem? I have a range of values that i want to check. They are total numbers of stock that i want to check for values below, say 5. If they have a value below such a figure i want to add the total and the product description to a list box on a user from. I've labelled the ranges "totals" and "description" but can't seem get excel to place stock with a value belwo 5 in the listbox. I would also like (if possible) to chnage the level before they get entered into the listbox of certain types of stock but that should be relativly easy once the initial problem is cracked. Any help would be appreciated. Cheers (and thanks again) Matt