Solved

How to pass an array a subroutine Excel VBA

Posted on 2010-09-13
3
759 Views
Last Modified: 2012-08-14
Hi,

I am trying to write a script that scans the contents of the first cell in the first 52 columns, then askes the user which columns they have data in that they would like merged. Then I would like to take their response and pass it to a subroutine to merge the cells appropriately. However, I am having trouble passing an array to my subroutine. I keep getting "Run-time error '1004': Application-defined or object defined error" Below is the snippet of code i am referring to. The error highlights the portion of code where i am merging 2 cells together. I think there is some sort of type mismatch, because when I change "Column" to a specific number...say 3, then the code runs without errors and merges the cells properly in column 3.

Private Sub cmdOkay_Click()

Dim i As Long, msg As String, Check As String, boxa As String, boxb As String

Dim Arr(52, 1)



Dim j, k As Integer

j = 0

k = 0



'Generate a list of the selected items

With ListBox1

    For i = 0 To .ListCount - 1

        k = k + 1

        If .Selected(i) Then

            msg = msg & .List(i) & vbNewLine

            Arr(j, 1) = k + 1

            j = j + 1

        End If

    Next i

End With

...

...

If Check = vbYes Then

    'CheckBox3

    If UserForm1.CheckBox3.Value = True Then

        Module4.Carrier_Merge Arr

    End If

    

    'Unload the userform since user is happy with selection(s)

    Unload Me

Else

    'User wants to try again, so clear listbox selections and

    'return user to the userform

    For i = 0 To ListBox1.ListCount - 1

        ListBox1.Selected(i) = False

    Next

End If

...

...

...

End Sub



Sub Carrier_Merge(ArrValues())



Dim i

Dim row1 As Integer

Dim row2 As Integer

Dim Column



Column = 0

row1 = 2

row2 = 3



Do Until IsEmpty(Range("A" & row1))

    If Right(Range("A" & row1), 2) <> "_3" And Right(Range("A" & row2), 2) = "_3" Then

        

        For i = 0 To UBound(ArrValues)

            Column = ArrValues(i, 1)

            Worksheets("Cell Site Demand").Range(Cells(row1, Column), Cells(row2, Column)).Merge

        Next i

        

          

       row1 = row1 + 2

       row2 = row2 + 2

       

    Else

  

    row1 = row1 + 1

    row2 = row2 + 1

      

    End If

    

Loop



...

...

end sub

Open in new window

0
Comment
Question by:towster2
3 Comments
 
LVL 58

Expert Comment

by:cyberkiwi
ID: 33666670
Pass it as a type Variant

Sub Carrier_Merge(ByVal ArrValues as Variant)

And just use it normally as you would an array.
0
 
LVL 33

Accepted Solution

by:
Norie earned 500 total points
ID: 33674006
Are you sure the error is caused by the array?

Sounds to me that it's being passed OK, if it wasn't then an error would have been raised earlier and the message wouldn't be the one you describe.

One thing you might want to consider is that you only reference a worksheet once in the sub that does the merging.

That means that Range and Cells will be looking at the active sheet.

It might be worth fixing that.

Then I suggest you put a watch on the variable column to check if it's getting the right value from the array.

PS You might want to consider using another name for that variable - Column is a VBA property of ranges etc
0
 

Author Closing Comment

by:towster2
ID: 33674612
Thanks for your help. You were dead on!
0

Featured Post

U.S. Department of Agriculture and Acronis Access

With the new era of mobile computing, smartphones and tablets, wireless communications and cloud services, the USDA sought to take advantage of a mobilized workforce and the blurring lines between personal and corporate computing resources.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Deploying a Microsoft Access application in a Citrix environment is not difficult but takes a few steps. However, Citrix system people are often of little help, as they typically know next to nothing about Access. The script provided here will take …
Freeze panes is an option within all variants of Excel to enable parts of a sheet to remain stationary when the cursor is in another part of the sheet. This is a very useful feature which is overlooked or under used.
The viewer will learn how to create a normally distributed random variable in Excel, use a normal distribution to simulate the return on an investment over a period of years, Create a Monte Carlo simulation using a normal random variable, and calcul…
This Micro Tutorial will demonstrate how to use a scrolling table in Microsoft Excel using the INDEX function.

895 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now