ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Passing argument to another Sub (https://www.excelbanter.com/excel-programming/322151-passing-argument-another-sub.html)

roman

Passing argument to another Sub
 
Hello,

Is it possible to pass an argument to another procedure without calling the
procedure?

In my worksheet i have two procedures. One manipulates the range, the other
gives the user an option to undo the resluts of the first procedure.
Here's the code that im using now. It works well, but requires me to keep
extra blank worksheet to save the range to:

Sub CommandButton1_Click ()
Dim StoredValue(1 To 17) As Long
For i = 1 To 17
StoredValue(i) = Sheets("Schedule of Values").Cells(i+13, 3).Value
Next i

For i = i To 17
Sheets("Temp").Cells(i, 3).Value = StoredValue(i)
Next i

[Instructions]
End Sub

Sub CommandButton2_Click ()

Dim TempValues(1 To 17) As Long
For i = 1 To 17
TempValues(i) = Sheets("Temp").Cells(i, 3).Value
Next i

For i = 1 To 17
Sheets("Schedule of Values").Cells(i+13, 3).Value = TempValues(i)
Next i

End Sub


There's gotta be a way to pass the first array to the second
button-triggered sub!


Bob Phillips[_7_]

Passing argument to another Sub
 
The button click event doesn't take an argument, so if you want to pass it
some value, you have to store that somewhere.

--
HTH

Bob Phillips

"Roman" wrote in message
...
Hello,

Is it possible to pass an argument to another procedure without calling

the
procedure?

In my worksheet i have two procedures. One manipulates the range, the

other
gives the user an option to undo the resluts of the first procedure.
Here's the code that im using now. It works well, but requires me to keep
extra blank worksheet to save the range to:

Sub CommandButton1_Click ()
Dim StoredValue(1 To 17) As Long
For i = 1 To 17
StoredValue(i) = Sheets("Schedule of Values").Cells(i+13, 3).Value
Next i

For i = i To 17
Sheets("Temp").Cells(i, 3).Value = StoredValue(i)
Next i

[Instructions]
End Sub

Sub CommandButton2_Click ()

Dim TempValues(1 To 17) As Long
For i = 1 To 17
TempValues(i) = Sheets("Temp").Cells(i, 3).Value
Next i

For i = 1 To 17
Sheets("Schedule of Values").Cells(i+13, 3).Value = TempValues(i)
Next i

End Sub


There's gotta be a way to pass the first array to the second
button-triggered sub!




VBA Dabbler[_2_]

Passing argument to another Sub
 
I'm not sure I understand all of your code, but here is my suggestion:

1. At the top of your module declare a public array without dimensioning it.
Place this string at the top : "Public StoredValueArray() as Variant"

2. In your first routine, modify it to read:

Sub CommandButton1_Click ()
Dim StoredValue(1 To 17) As Long
For i = 1 To 17
StoredValue(i) = Sheets("Schedule of Values").Cells(i+13, 3).Value
Next i
StoredValueArray = StoredValue
End Sub

3. Then use the public name in your other routines.

Good Luck,
VBA Dabbler

"Roman" wrote:

Hello,

Is it possible to pass an argument to another procedure without calling the
procedure?

In my worksheet i have two procedures. One manipulates the range, the other
gives the user an option to undo the resluts of the first procedure.
Here's the code that im using now. It works well, but requires me to keep
extra blank worksheet to save the range to:

Sub CommandButton1_Click ()
Dim StoredValue(1 To 17) As Long
For i = 1 To 17
StoredValue(i) = Sheets("Schedule of Values").Cells(i+13, 3).Value
Next i

For i = i To 17
Sheets("Temp").Cells(i, 3).Value = StoredValue(i)
Next i

[Instructions]
End Sub

Sub CommandButton2_Click ()

Dim TempValues(1 To 17) As Long
For i = 1 To 17
TempValues(i) = Sheets("Temp").Cells(i, 3).Value
Next i

For i = 1 To 17
Sheets("Schedule of Values").Cells(i+13, 3).Value = TempValues(i)
Next i

End Sub


There's gotta be a way to pass the first array to the second
button-triggered sub!


roman

Passing argument to another Sub
 


"Bob Phillips" wrote:

The button click event doesn't take an argument, so if you want to pass it
some value, you have to store that somewhere.


Ok, thx

roman

Passing argument to another Sub
 


"VBA Dabbler" wrote:

I'm not sure I understand all of your code, but here is my suggestion:

1. At the top of your module declare a public array without dimensioning it.
Place this string at the top : "Public StoredValueArray() as Variant"

2. In your first routine, modify it to read:

Sub CommandButton1_Click ()
Dim StoredValue(1 To 17) As Long
For i = 1 To 17
StoredValue(i) = Sheets("Schedule of Values").Cells(i+13, 3).Value
Next i
StoredValueArray = StoredValue
End Sub

3. Then use the public name in your other routines.

Good Luck,
VBA Dabbler


Tried this. Getting an error message saying that arrays cannot be declared
as public variables.

VBA Dabbler[_2_]

Passing argument to another Sub
 
I do this all the time and have no problems. Do you have the proper
reference libraries turned on?

At what point in your code are your getting the error message?

Here is some code that I just wrote and tested - it does effectively the
same thing:

Option Explicit
Option Base 1
Public Demonstration() As Variant


Sub test()
Dim TempArray() As Variant
TempArray = Array(1, 2, 4, 10)
Demonstration = TempArray
Call ListArray
End Sub

Sub ListArray()
Dim i As Integer
For i = 1 To UBound(Demonstration)
MsgBox Demonstration(i)
Next i
End Sub


Let me know how this works.

Regards,
VBA Dabbler


"Roman" wrote:



"VBA Dabbler" wrote:

I'm not sure I understand all of your code, but here is my suggestion:

1. At the top of your module declare a public array without dimensioning it.
Place this string at the top : "Public StoredValueArray() as Variant"

2. In your first routine, modify it to read:

Sub CommandButton1_Click ()
Dim StoredValue(1 To 17) As Long
For i = 1 To 17
StoredValue(i) = Sheets("Schedule of Values").Cells(i+13, 3).Value
Next i
StoredValueArray = StoredValue
End Sub

3. Then use the public name in your other routines.

Good Luck,
VBA Dabbler


Tried this. Getting an error message saying that arrays cannot be declared
as public variables.


roman

Passing argument to another Sub
 
It worked! Thanks a lot VBA Dabbler!

i had my code in a wrong place. After i moved it to a module it worked. My
buttons subs now only call the procedures from the module.

"VBA Dabbler" wrote:

I do this all the time and have no problems. Do you have the proper
reference libraries turned on?

At what point in your code are your getting the error message?

Here is some code that I just wrote and tested - it does effectively the
same thing:

Option Explicit
Option Base 1
Public Demonstration() As Variant


Sub test()
Dim TempArray() As Variant
TempArray = Array(1, 2, 4, 10)
Demonstration = TempArray
Call ListArray
End Sub

Sub ListArray()
Dim i As Integer
For i = 1 To UBound(Demonstration)
MsgBox Demonstration(i)
Next i
End Sub


Let me know how this works.

Regards,
VBA Dabbler


"Roman" wrote:



"VBA Dabbler" wrote:

I'm not sure I understand all of your code, but here is my suggestion:

1. At the top of your module declare a public array without dimensioning it.
Place this string at the top : "Public StoredValueArray() as Variant"

2. In your first routine, modify it to read:

Sub CommandButton1_Click ()
Dim StoredValue(1 To 17) As Long
For i = 1 To 17
StoredValue(i) = Sheets("Schedule of Values").Cells(i+13, 3).Value
Next i
StoredValueArray = StoredValue
End Sub

3. Then use the public name in your other routines.

Good Luck,
VBA Dabbler


Tried this. Getting an error message saying that arrays cannot be declared
as public variables.



All times are GMT +1. The time now is 09:21 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com