Hi Kris,

Works fine!

I think .Index worked ok on the array, and a quick test with .Count seemed
to work.  I wonder if .CountA has a bug in Excel 2010 when it comes to
arrays.

 

Asa

 

From: excel-macros@googlegroups.com [mailto:excel-macros@googlegroups.com]
On Behalf Of Kris
Sent: Thursday, January 05, 2012 9:02 AM
To: excel-macros@googlegroups.com
Subject: $$Excel-Macros$$ Re: Test XL 2007 code on XL 2010

 

Hi Asa,

 

Thanks for testing the code. I always use arrays. Application.counta and
index would work on arrays just like worksheet function works in ranges.

 

Anyway I converted those variant array into a range.

 

Can you please test this one for me ? 

 

Sub kTest_v2()

    

    Dim ka As Range, k(), i As Long, n As Long, c As Long

    Dim j   As Long, Flg As Boolean, dRun As Date

    Dim iFlg    As Boolean, fCode1 As String, fCode2 As String

    Dim dFlg    As Boolean, meDate  As String, FC As Range, Cnt As Long

    Dim wksOriginal   As Worksheet, wksResult As Worksheet

    

    Set wksOriginal = Worksheets("Original")

    

    Set ka = wksOriginal.UsedRange.Resize(, 17)

    

    'MsgBox UBound(ka, 1)

    

    ReDim k(1 To ka.Rows.Count, 1 To 17)

    

    For i = 1 To ka.Rows.Count

        If InStr(1, ka.Cells(i, 1).Value, "total stock", vbTextCompare) Then
Exit For

        If Not dFlg Then

            If Len(ka.Cells(i, 1).Value) Then

                If InStr(1, ka.Cells(i, 1).Value, "Date Run") Then

                    dRun = ka.Cells(i, 3).Value: meDate = ka.Cells(i,
7).Value

                    dFlg = True

                End If

                If dFlg Then

                    j = i + 1

                    Do

                        Set FC = Application.WorksheetFunction.Index(ka, j,
0)

                        Cnt = Application.WorksheetFunction.CountA(FC)

                        If Cnt = 2 Then

                            fCode1 = ka.Cells(j, 1).Value: fCode2 =
ka.Cells(j, 2).Value

                            iFlg = True: GoTo First

                        End If

                        If iFlg Then

                            If Cnt > 10 Then

                                n = n + 1

                                k(n, 1) = dRun: k(n, 2) = meDate

                                k(n, 3) = fCode1: k(n, 4) = fCode2

                                k(n, 5) = ka.Cells(j, 1).Value: k(n, 6) =
ka.Cells(j, 2).Value

                                k(n, 7) = ka.Cells(j, 6).Value: k(n, 8) =
ka.Cells(j, 8).Value

                                For c = 9 To ka.Columns.Count

                                    k(n, c) = ka.Cells(j, c).Value

                                Next

                            End If

                        End If

First:

                        j = j + 1: i = j

                    Loop Until ka.Cells(j, 1).Value = "Stock for Fruit code"

                    iFlg = False

                End If

            End If

        Else

            j = i + 1

            Do

                Set FC = Application.WorksheetFunction.Index(ka, j, 0)

                Cnt = Application.WorksheetFunction.CountA(FC)

                If Cnt = 2 Then

                    fCode1 = ka.Cells(j, 1).Value: fCode2 = ka.Cells(j,
2).Value

                    iFlg = True: GoTo Second

                End If

                If iFlg Then

                    If Cnt > 10 Then

                        n = n + 1

                        k(n, 1) = dRun: k(n, 2) = meDate

                        k(n, 3) = fCode1: k(n, 4) = fCode2

                        k(n, 5) = ka.Cells(j, 1).Value: k(n, 6) =
ka.Cells(j, 2).Value

                        k(n, 7) = ka.Cells(j, 6).Value: k(n, 8) =
ka.Cells(j, 8).Value

                        For c = 9 To ka.Columns.Count

                            k(n, c) = ka.Cells(j, c).Value

                        Next

                    End If

                End If

Second:

                j = j + 1: i = j

                If j = ka.Rows.Count Then Exit Do

            Loop Until ka.Cells(j, 1).Value = "Stock for Fruit code"

            iFlg = False

        End If

    Next

    

    If n Then

        On Error Resume Next

        Set wksResult = Worksheets("Result")

        If Err.Number <> 0 Then

            Err.Clear

            Set wksResult = Worksheets.Add

            ActiveSheet.Name = "Result"

        End If

        On Error GoTo 0

        With wksResult

            .UsedRange.Offset(5).ClearContents

            .Range("a1") = "Summary of Monthly Fruit Sales"

            .Range("a2") = "Waynes Fruit Store"

            .Range("a4").Resize(, 17) = Array("Date Run :", "Month Ending
Date", "Code", "", "Fruit Number", "Fruit", _

                                "Fruit Code", "Register Digit Code",
"Current", "Extra.", "Total", "Month", _

                                "Extra", "Total", "Year", "Extra", "Total")

            .Range("a5").Resize(n, 17) = k

            .Range("a5").Resize(, 17).EntireColumn.AutoFit

        End With

    End If

    

End Sub

 

Thanks

 

Kris

 

-- 
FORUM RULES (986+ members already BANNED for violation)
 
1) Use concise, accurate thread titles. Poor thread titles, like Please
Help, Urgent, Need Help, Formula Problem, Code Problem, and Need Advice will
not get quick attention or may not be answered.
 
2) Don't post a question in the thread of another member.
 
3) Don't post questions regarding breaking or bypassing any security
measure.
 
4) Acknowledge the responses you receive, good or bad.
 
5) Cross-promotion of, or links to, forums competitive to this forum in
signatures are prohibited. 
 
NOTE : Don't ever post personal or confidential data in a workbook. Forum
owners and members are not responsible for any loss.
 
----------------------------------------------------------------------------
--------------------------
To post to this group, send email to excel-macros@googlegroups.com

-- 
FORUM RULES (986+ members already BANNED for violation)

1) Use concise, accurate thread titles. Poor thread titles, like Please Help, 
Urgent, Need Help, Formula Problem, Code Problem, and Need Advice will not get 
quick attention or may not be answered.

2) Don't post a question in the thread of another member.

3) Don't post questions regarding breaking or bypassing any security measure.

4) Acknowledge the responses you receive, good or bad.

5)  Cross-promotion of, or links to, forums competitive to this forum in 
signatures are prohibited. 

NOTE  : Don't ever post personal or confidential data in a workbook. Forum 
owners and members are not responsible for any loss.

------------------------------------------------------------------------------------------------------
To post to this group, send email to excel-macros@googlegroups.com

Reply via email to