Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index


2011/8/20 Johnny Rosenberg <gurus.knugum@gmail.com>:
2011/8/19 Niklas Johansson <sleeping.pillow@gmail.com>:
To empty the array use x = Nothing. So before the ReDim-statement do...

…
      x = Nothing
      ReDim x(1) As MyType
…

I think you stumbled upon a bug since your using Option Compatible it should
have the same behavior as VBA. In VBA both ReDim statements yields an error.
“ReDim x(1) As MyType” because it has already been dimensioned and ReDim y
As MyType  because it is not a dynamic Array.

Okay, thanks everyone for your input. It seems like I have
misunderstood the concept a little bit. I'll take a closer look at it
when I get home after the weekend.

J.R.


I am now at home again, so I did some more tests. Here's the current
example code (I modified the first one a little bit):
REM  *****  BASIC  *****

Option Compatible
Option Explicit

Type MyType
        a As Integer
        b As Integer
End Type
Dim x() As MyType ' Comment 1a: See Comment 2 below.
Dim x(1) As MyType ' Comment 1b: See Comment 2 below.
Dim z() As Integer

Sub Main
        Dim y As MyType
        Dim i As Integer
        ReDim x(1) As MyType '  Comment 2: Gives an error if x was declared as
at Comment 1a,
'                               and the line at Comment 1b is omitted.
'                               However, if both lines (1a and 1b) are there, there is no error.
        ReDim z(3) As Integer
        For i=0 To 1
                x(i).a=i*2
                x(i).b=1+i*2
        Next i
        
        For i=0 To 3
                z(i)=6+i
        Next i
        
        y.a=4
        y.b=5

        MsgBox x(0).a & x(0).b & x(1).a & x(1).b & y.a & y.b & _
        z(0) & z(1) & z(2) & z(3) ' Comment 3: Displays 12345678910

        x=Nothing
        ReDim x(1) As MyType
        ReDim z(3)
        ReDim y As MyType ' Comment 4: This doesn't give an error, but it should?
        MsgBox x(0).a & x(0).b & x(1).a & x(1).b & y.a & y.b & _
        z(0) & z(1) & z(2) & z(3) ' Comment 5: Displays 0000000000
End Sub
———End of code———

”x=Nothing” seems to be the easiest solution or workaround at the
moment. The suggestion to define x as a dynamic array didn't work with
MyType. When doing ReDim, see Comment 2 within the code, I got an
error message about the index, that was out of bounds, an error
message I didn't get for z(), which I declared as Integer instead of
MyType.
It seems like I can ReDim x outside the subroutine but not inside it,
see comments 1a, 1b and 2.

So, if I declare something as a custom data type above a subroutine or
function, I can not ReDim it inside a subroutine or function. Why is
that? Or is it a bug? Because I can do that if it's declared as one of
the existing data types, such as Integer.

So after all, it seems like the combination of custom data types and
ReDim doesn't behave in an expected way, does it? So there is maybe a
bug there to report.
And, as already pointed out, accepting ReDim for y in my example is
probably also a bug, right?



Kind regards

Johnny Rosenberg
ジョニー・ローゼンバーグ

-- 
For unsubscribe instructions e-mail to: users+help@global.libreoffice.org
Problems? http://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/
Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette
List archive: http://listarchives.libreoffice.org/global/users/
All messages sent to this list will be publicly archived and cannot be deleted

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.