Avatar billede denero Juniormester
17. august 2012 - 14:32 Der er 9 kommentarer og
1 løsning

besked, mens "lang" makro kører

Har en forholdsvis lang makro. Kan man evt. få en meddelsesboks til at "vise" sig evt med "procesbar" ????, indtil makroen er afviklet. Word 2010
Avatar billede Lene Fredborg Ekspert
17. august 2012 - 15:15 #1
Ja, det kan godt lade sig gøre, men der er ikke en standardfunktion til det. Du kan bruge metoden beskrevet her:
http://word.mvps.org/faqs/userforms/CreateAProgressBar.htm
Avatar billede tjp Mester
17. august 2012 - 15:36 #2
Alternativt kan du jo også bare skrive til Statuslinjen, fx:
For i = 1 To 10
  For a = 1 To 5000000
  Next
  ' Skriver til statuslinje
  StatusBar = i
  DoEvents 
Next i

Til yderligere inspiration vedr. ProgressBar:
http://www.your-save-time-and-improve-quality-technologies-online-resource.com/excel-vba-progressbar.html
Avatar billede Lene Fredborg Ekspert
17. august 2012 - 18:07 #3
Ifølge VBA-hjælpen er StatusBar ikke længere supporteret i VBA (gælder 2007 og 2010). Fra VBA hjælpen i 2007 og 2010:
StatusBar Property
This property is no longer supported in Microsoft Word Visual Basic for Applications.

Så vidt jeg kan se, fejler det ikke, men informationen bliver ikke som i 2003 og tidligere med sikkerhed stående. Andre handlinger vil ofte få Words indbyggede statuslinjeinformation til at dukke op igen og overskrive teksten, og så kommer det blot til at flimre med skiftende tekst.
Avatar billede denero Juniormester
18. august 2012 - 07:09 #4
prøver lige Lene´s forslag. Vender tilbage senere.
Avatar billede denero Juniormester
18. august 2012 - 07:34 #5
Har lavet efter anvisning på link fra Lene, men mangler lige lidt hjælp til, hvor min makro kommer ind i billedet.
Avatar billede Lene Fredborg Ekspert
19. august 2012 - 01:51 #6
Nedenfor har jeg indsat kode, som måske bedre kan vise, hvad du kan gøre. Som MsgBox-teksterne siger, så indsæt i din kode det, der skal ske. I stedet for at indsætte al kode i din UserForm, er det bedre at lave kald til separate makroer, som du har placeret i et eller flere moduler i dit projekt. Du er nødt til at have koden afviklet i "bidder" og lægge noget til bredden af Label1 for hver "bid" for at kunne bruge progress-baren. I eksemplet her har jeg opdelt Label1 sådan, at 1/8 af den fulde længde lægges til hver gang. Du kan opdele efter behov og lade intervallerne være forskellige, så de bedst afspejler den tid, de forskellige dele tager at afvikle. Hvis forløbet skal se nogenlunde jævnt ud, skal du lave mange opdelinger.

Prøv at udskifte koden i UserForm1 med følgende. Behold makroen TestProgress og selve UserForm1 med Frame1 og Label1 uændret. Kør derefter makroen TestProgress, så du kan se, hvordan baren vokser:

Option Explicit

    Me.Repaint

    MsgBox "Indsæt 1. del af handlingen i koden i stedet for denne MsgBox"
    Label1.Width = 25
    Frame1.Repaint

    MsgBox "Indsæt 2. del af handlingen i koden i stedet for denne MsgBox"
    Label1.Width = 50
    Frame1.Repaint

    MsgBox "Indsæt 3. del af handlingen i koden i stedet for denne MsgBox"
    Label1.Width = 75
    Frame1.Repaint

    MsgBox "Indsæt 4. del af handlingen i koden i stedet for denne MsgBox"
    Label1.Width = 100
    Frame1.Repaint

    MsgBox "Indsæt 5. del af handlingen i koden i stedet for denne MsgBox"
    Label1.Width = 125
    Frame1.Repaint

    MsgBox "Indsæt 6. del af handlingen i koden i stedet for denne MsgBox"
    Label1.Width = 150
    Frame1.Repaint

    MsgBox "Indsæt 7. del af handlingen i koden i stedet for denne MsgBox"
    Label1.Width = 175
    Frame1.Repaint

    MsgBox "Indsæt 8. del af handlingen i koden i stedet for denne MsgBox"
    Label1.Width = 200
    Frame1.Repaint

' Unload UserForm when process finished
Unload Me
Avatar billede denero Juniormester
19. august 2012 - 10:51 #7
Fint -prøver det lige af. Vender tilbage senere, skal ud og nyde det herlige vejr.
Avatar billede denero Juniormester
21. august 2012 - 21:22 #8
Har prøvet med flg. kode og det gik ikke helt til held.

Option Explicit

Private Sub UserForm_Activate()

    Me.Repaint.Show
   
    'Dim docNew As Document
    Dim newTextbox As Shape
   
    'Tekstboks
    Set newTextbox = ActiveDocument.Shapes.AddTextbox _
        (Orientation:=msoTextOrientationHorizontal, _
        Left:=100, Top:=100, Width:=300, Height:=200)
   
    Label1.Width = 25
    Frame1.Repaint

    'Tekstboks indsæt bogmærke
    With newTextbox.TextFrame.TextRange
        .Bookmarks.Add Name:="Tekst"
    End With
 
    'Tekstboks gå til bogmærke
    If ActiveDocument.Bookmarks.Exists("Tekst") = True Then
    ActiveDocument.Bookmarks("Tekst").Select
    End If
   
    Label1.Width = 50
    Frame1.Repaint

    ' Tekstboks tekst
    Selection.TypeText Text:="Tekst 1"
    Selection.TypeParagraph
    Selection.TypeText Text:="Tekst 2"
    Selection.TypeParagraph
    Selection.TypeText Text:="Tekst 3"
    Selection.TypeParagraph
    Selection.TypeParagraph
    Selection.TypeText Text:="Tekst 4"
    Selection.TypeParagraph
    Selection.TypeText Text:="Tekst 5"
    Selection.TypeParagraph
    Selection.TypeParagraph
    Selection.TypeText Text:="Tekst 6"
    Selection.TypeParagraph
    Selection.TypeText Text:="Tekst 7"
    Selection.TypeParagraph
    Selection.TypeParagraph
   
    Label1.Width = 75
    Frame1.Repaint

    ' Tekstboks dato
    Selection.InsertDateTime DateTimeFormat:="d. MMMM yyyy", InsertAsField:= _
        False, DateLanguage:=wdDanish, CalendarType:=wdCalendarWestern, _
        InsertAsFullWidth:=False

    'Tekstboks gå til bogmærke
    If ActiveDocument.Bookmarks.Exists("Tekst") = True Then
    ActiveDocument.Bookmarks("Tekst").Select
    End If
   
    'Tekstboks marker alt
    Selection.WholeStory
   
    Label1.Width = 100
    Frame1.Repaint

    'Tekstboks font og størrelse
    Selection.Font.Name = "Klavika Rg"
    Selection.Font.Size = 6.5
   
    'Tekstboks linjeafstand
    With Selection.ParagraphFormat
        .SpaceBefore = 0
        .SpaceBeforeAuto = False
        .SpaceAfter = 0
        .SpaceAfterAuto = False
    End With
   
    Label1.Width = 125
    Frame1.Repaint

    'Tekstboks placering, størrelse og frame
    Selection.ShapeRange.Select
    Selection.ShapeRange.Fill.Solid
   
    Selection.ShapeRange.Fill.Visible = msoFalse
    Selection.ShapeRange.Fill.Transparency = 0#
    Selection.ShapeRange.Line.Weight = 0.75
    Selection.ShapeRange.Line.DashStyle = msoLineSolid
    Selection.ShapeRange.Line.Style = msoLineSingle
    Selection.ShapeRange.Line.Transparency = 0#
    Selection.ShapeRange.Line.Visible = msoFalse
    Selection.ShapeRange.LockAspectRatio = msoFalse
    Selection.ShapeRange.Height = 110.85
    Selection.ShapeRange.Width = 91.85
    Selection.ShapeRange.Left = 479.05
    Selection.ShapeRange.Top = 119.05
    Selection.ShapeRange.TextFrame.MarginLeft = 0#
    Selection.ShapeRange.TextFrame.MarginRight = 0#
    Selection.ShapeRange.TextFrame.MarginTop = 0#
    Selection.ShapeRange.TextFrame.MarginBottom = 0#
    Selection.ShapeRange.RelativeHorizontalPosition = _
        wdRelativeHorizontalPositionPage
    Selection.ShapeRange.RelativeVerticalPosition = _
        wdRelativeVerticalPositionPage
    Selection.ShapeRange.RelativeHorizontalSize = wdRelativeHorizontalSizePage
    Selection.ShapeRange.RelativeVerticalSize = wdRelativeVerticalSizePage
    Selection.ShapeRange.Left = CentimetersToPoints(16.9)
    Selection.ShapeRange.LeftRelative = wdShapePositionRelativeNone
    Selection.ShapeRange.Top = CentimetersToPoints(4.2)
    Selection.ShapeRange.TopRelative = wdShapePositionRelativeNone
    Selection.ShapeRange.WidthRelative = wdShapeSizeRelativeNone
    Selection.ShapeRange.HeightRelative = wdShapeSizeRelativeNone
    Selection.ShapeRange.LockAnchor = True
    Selection.ShapeRange.LayoutInCell = True
    Selection.ShapeRange.WrapFormat.AllowOverlap = True
    Selection.ShapeRange.WrapFormat.Side = wdWrapBoth
    Selection.ShapeRange.WrapFormat.DistanceTop = CentimetersToPoints(0)
    Selection.ShapeRange.WrapFormat.DistanceBottom = CentimetersToPoints(0)
    Selection.ShapeRange.WrapFormat.DistanceLeft = CentimetersToPoints(0.32)
    Selection.ShapeRange.WrapFormat.DistanceRight = CentimetersToPoints(0.32)
    Selection.ShapeRange.WrapFormat.Type = 3
    Selection.ShapeRange.ZOrder 4
    Selection.ShapeRange.TextFrame.AutoSize = False
    Selection.ShapeRange.TextFrame.WordWrap = True
    Selection.ShapeRange.TextFrame.VerticalAnchor = msoAnchorTop
   
    Label1.Width = 150
    Frame1.Repaint

    'Dokument
        Selection.GoTo What:=wdGoToSection, Which:=wdGoToFirst, count:=1, Name:=""
   
    Label1.Width = 200
    Frame1.Repaint

' Unload UserForm when process finished
Unload Me
End Sub
Avatar billede denero Juniormester
01. september 2012 - 06:50 #9
Der er tilsyneladende ikke yderligere kommentarer. Vil du lægge et svar Lene?
Avatar billede Lene Fredborg Ekspert
07. september 2012 - 11:23 #10
Kommer her.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Tag et kursus i Word og øg effektiviteten

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



Seneste spørgsmål Seneste aktivitet
I går 23:37 Poe strøm Af lurup i LAN/WAN
I går 14:46 GIF-EDITOR Af snestrup2000 i Billedbehandling
I går 14:03 Logge ind Af Bob i PC
I går 12:12 2 skærme - 1 virker - den anden siger No signal Af eksmojo i Skærme
I går 10:33 openvpn projekt Af dcedata1977 i Windows