Solved

How do I call a function within a VBA procedure ?

Posted on 2013-11-04
3
448 Views
Last Modified: 2013-11-04
Hi Experts,

I am creating a VBA procedure within my Excel 2010 application in which I need to sort a 2-dimensional array.

Having scoured the Web I seem to have found a more robust VBA code example of a Sort function. However, not having ever used functions before, the function is falling over at the first stage, that is, it gives me compilation errors.

This is the code within my procedure:

   Dim ClientsArray() As Variant
   Dim InputArray() As Variant

' Load Clients array from Clients sheet (B3:L).........This works fine !
   ClientsArray() = Range(Sheets("Clients").Cells(3, 2), Sheets("Clients").Cells(Sheets("Clients").Cells(3, 1).End(xlDown), 12)).Value

   InputArray = ClientsArray()

'Sort the array by Name (2nd column) ascending........This doesn't work !
   ClientsArray() = QSortInPlace( _
    ByRef InputArray As Variant, _
    Optional ByVal LB As Long = -1&, _
    Optional ByVal UB As Long = -1&, _
    Optional ByVal Descending As Boolean = False, _
    Optional ByVal CompareMode As VbCompareMethod = vbTextCompare, _
    Optional ByVal NoAlerts As Boolean = False) As Boolean

The above piece of code is obviously wrong as it highlights in red but I can't seem to get the syntax right. I've attached the called function code in a text file.

Any help will be appreciated.
Toco
Sort-Function-VBA-code.txt
0
Comment
Question by:Tocogroup
3 Comments
 
LVL 48

Accepted Solution

by:
Rgonzo1971 earned 250 total points
Comment Utility
Hi

you cannot use a function and declare it  at the same time

  Dim ClientsArray() As Variant
   Dim InputArray() As Variant

' Load Clients array from Clients sheet (B3:L).........This works fine !
   ClientsArray() = Sheets("Clients").Range(Cells(3, 2), Cells(Cells(3, 1).End(xlDown), 12)).Value

   InputArray = ClientsArray()

'Sort the array by Name (2nd column) ascending........This doesn't work !
   bIsSorted = QSortInPlace(ClientsArray)
'...
End Sub

Function QSortInPlace()
'...
End Function

Open in new window

Regards
0
 
LVL 43

Assisted Solution

by:Saqib Husain, Syed
Saqib Husain, Syed earned 250 total points
Comment Utility
Try

   successful = QSortInPlace(InputArray, LB, UB, Descending, CompareMode, NoAlerts)
0
 

Author Closing Comment

by:Tocogroup
Comment Utility
Thanks both for your solutions. I understand now that this function returns a Boolean 'result'. However, what the function didn't tell me until I invoked it was that it only works for single arrays.

Back to the drawing board.
Thanks again
Toco
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Dealing with unintended Excel Active-X resizing quirks (VBA code simulates "self correction") David Miller (dlmille) Intro Not everyone is a fan of Active-X controls in spreadsheets (as opposed to the UserForm approach, the older Form controls …
Introduction While answering a recent question (http:/Q_27311462.html), I created an alternative function to the Excel Concatenate() function that you might find useful.  I tested several solutions and share the results in this article as well as t…
This Micro Tutorial demonstrate the bugs in Microsoft Excel for Mac with Pivot Charts.
This Micro Tutorial will demonstrate how to create pivot charts out of a data set. I also added a drop-down menu which allows to choose from different categories in the data set and the chart will automatically update.

772 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

10 Experts available now in Live!

Get 1:1 Help Now