+ Reply to Thread
Results 1 to 4 of 4

Trying to undo labels

  1. #1
    Registered User
    Join Date
    03-02-2006
    Posts
    17

    Trying to undo labels

    I am writing a macro which loads in a picture and makes a "cross" wherever the user clicks on the picture. I don't know how many times they will click, so I use the following code to make 2 labels, 1 vertical and 1 horizontal, which intersect in the middle to make a cross.

    HorHold = HorHold + 1
    Set Lbl = Controls.Add("Forms.Label.1", "lblLabel" & HorHold, True)
    With Lbl
    .Top = Y
    .Left = X - 6
    .Height = 1
    .Width = 12
    .BorderStyle = 1
    .BorderColor = vbRed
    End With

    'for the second part of the "X", we need to give it a unique name
    'so we use VertHold which starts at 900 and won't intersect HorHold

    VertHold = VertHold + 1
    Set Lbl = Controls.Add("Forms.Label.1", "lblLabel" & VertHold, True)
    With Lbl
    .Top = Y - 6
    .Left = X
    .Height = 12
    .Width = 1
    .BorderStyle = 1
    .BorderColor = vbRed
    End With


    This works great. I also want to be able to undo any mistakes. I put an "Undo" button on the userform with the following code:

    'now we have to clear off the red X

    Controls("lblLabel" & HorHold).Visible = False
    Controls("lblLabel" & VertHold).Visible = False

    HorHold = HorHold - 1
    VertHold = VertHold - 1


    The idea is that each time they hit "Undo", they can "step back" over all their marks and undo them.

    Here is my problem: this works at first, but not later. That is, say I click 4 times and the last 2 are mistakes. So, I hit "Undo" twice, and each time the cross disappears just like it is supposed to. So, now I have only 2 crosses on the image. Then, I click twice more to make two more crosses. However, if I hit "undo" nothing happens! Then, I hit "undo" again and nothing happens. However, when I hit it a third time, mark #2 disappears! So, it seems to be stepping backwards like it should, but it doesn't erase the first two NEW marks, but when I step back far enough I can erase marks that have never been erased.

    Sorry if this is confusing, it's a difficult thing to explain. Any ideas?

  2. #2
    Nicholas B
    Guest

    RE: Trying to undo labels

    I think problem is that you are not deleting the controls just making them
    invisible BUT you sre decrementing the counters HorHold + VertHold as if they
    were deleted.

    I changed your Undo code to use additional counters/pointer variables for
    the Undo process as follows

    Private Sub UNDOButn_Click()
    UndoH = HorHold
    UndoV = VertHold
    If (UndoH > 0) And (UndoV > 0) Then
    KeepGoing = True
    While KeepGoing And UndoH > 0
    If Controls("lblLabel" & UndoH).Visible Then
    KeepGoing = False
    Else
    UndoH = UndoH - 1
    UndoV = UndoV - 1
    End If
    Wend
    If Not KeepGoing Then
    Controls("lblLabel" & UndoH).Visible = False
    Controls("lblLabel" & UndoV).Visible = False
    End If
    'HorHold = HorHold - 1
    'VertHold = VertHold - 1
    End If
    End Sub

    Seems to work

    HTH
    "timspier" wrote:

    >
    > I am writing a macro which loads in a picture and makes a "cross"
    > wherever the user clicks on the picture. I don't know how many times
    > they will click, so I use the following code to make 2 labels, 1
    > vertical and 1 horizontal, which intersect in the middle to make a
    > cross.
    >
    > HorHold = HorHold + 1
    > Set Lbl = Controls.Add("Forms.Label.1", "lblLabel" & HorHold,
    > True)
    > With Lbl
    > .Top = Y
    > .Left = X - 6
    > .Height = 1
    > .Width = 12
    > .BorderStyle = 1
    > .BorderColor = vbRed
    > End With
    >
    > 'for the second part of the "X", we need to give it a unique name
    > 'so we use VertHold which starts at 900 and won't intersect
    > HorHold
    >
    > VertHold = VertHold + 1
    > Set Lbl = Controls.Add("Forms.Label.1", "lblLabel" & VertHold,
    > True)
    > With Lbl
    > .Top = Y - 6
    > .Left = X
    > .Height = 12
    > .Width = 1
    > .BorderStyle = 1
    > .BorderColor = vbRed
    > End With
    >
    >
    > This works great. I also want to be able to undo any mistakes. I put an
    > "Undo" button on the userform with the following code:
    >
    > 'now we have to clear off the red X
    >
    > Controls("lblLabel" & HorHold).Visible = False
    > Controls("lblLabel" & VertHold).Visible = False
    >
    > HorHold = HorHold - 1
    > VertHold = VertHold - 1
    >
    >
    > The idea is that each time they hit "Undo", they can "step back" over
    > all their marks and undo them.
    >
    > Here is my problem: this works at first, but not later. That is, say I
    > click 4 times and the last 2 are mistakes. So, I hit "Undo" twice, and
    > each time the cross disappears just like it is supposed to. So, now I
    > have only 2 crosses on the image. Then, I click twice more to make two
    > more crosses. However, if I hit "undo" nothing happens! Then, I hit
    > "undo" again and nothing happens. However, when I hit it a third time,
    > mark #2 disappears! So, it seems to be stepping backwards like it
    > should, but it doesn't erase the first two NEW marks, but when I step
    > back far enough I can erase marks that have never been erased.
    >
    > Sorry if this is confusing, it's a difficult thing to explain. Any
    > ideas?
    >
    >
    > --
    > timspier
    > ------------------------------------------------------------------------
    > timspier's Profile: http://www.excelforum.com/member.php...o&userid=32090
    > View this thread: http://www.excelforum.com/showthread...hreadid=521439
    >
    >


  3. #3
    Nicholas B
    Guest

    RE: Trying to undo labels

    My code doesn't take account of your mechanism for initial value of VertHold
    = 900
    I presumed the lables were named differently and both incremented from Zero

    Nick

    "timspier" wrote:

    >
    > I am writing a macro which loads in a picture and makes a "cross"
    > wherever the user clicks on the picture. I don't know how many times
    > they will click, so I use the following code to make 2 labels, 1
    > vertical and 1 horizontal, which intersect in the middle to make a
    > cross.
    >
    > HorHold = HorHold + 1
    > Set Lbl = Controls.Add("Forms.Label.1", "lblLabel" & HorHold,
    > True)
    > With Lbl
    > .Top = Y
    > .Left = X - 6
    > .Height = 1
    > .Width = 12
    > .BorderStyle = 1
    > .BorderColor = vbRed
    > End With
    >
    > 'for the second part of the "X", we need to give it a unique name
    > 'so we use VertHold which starts at 900 and won't intersect
    > HorHold
    >
    > VertHold = VertHold + 1
    > Set Lbl = Controls.Add("Forms.Label.1", "lblLabel" & VertHold,
    > True)
    > With Lbl
    > .Top = Y - 6
    > .Left = X
    > .Height = 12
    > .Width = 1
    > .BorderStyle = 1
    > .BorderColor = vbRed
    > End With
    >
    >
    > This works great. I also want to be able to undo any mistakes. I put an
    > "Undo" button on the userform with the following code:
    >
    > 'now we have to clear off the red X
    >
    > Controls("lblLabel" & HorHold).Visible = False
    > Controls("lblLabel" & VertHold).Visible = False
    >
    > HorHold = HorHold - 1
    > VertHold = VertHold - 1
    >
    >
    > The idea is that each time they hit "Undo", they can "step back" over
    > all their marks and undo them.
    >
    > Here is my problem: this works at first, but not later. That is, say I
    > click 4 times and the last 2 are mistakes. So, I hit "Undo" twice, and
    > each time the cross disappears just like it is supposed to. So, now I
    > have only 2 crosses on the image. Then, I click twice more to make two
    > more crosses. However, if I hit "undo" nothing happens! Then, I hit
    > "undo" again and nothing happens. However, when I hit it a third time,
    > mark #2 disappears! So, it seems to be stepping backwards like it
    > should, but it doesn't erase the first two NEW marks, but when I step
    > back far enough I can erase marks that have never been erased.
    >
    > Sorry if this is confusing, it's a difficult thing to explain. Any
    > ideas?
    >
    >
    > --
    > timspier
    > ------------------------------------------------------------------------
    > timspier's Profile: http://www.excelforum.com/member.php...o&userid=32090
    > View this thread: http://www.excelforum.com/showthread...hreadid=521439
    >
    >


  4. #4
    Registered User
    Join Date
    03-02-2006
    Posts
    17

    Seems to work

    Plugged it in, seems to work. Thanks a ton!

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1