Avatar billede chiefbigchief Mester
15. april 2018 - 10:31 Der er 5 kommentarer og
1 løsning

Har rækken været valgt.

Har i Word en tabel med oplysninger i 6 spalter i 200+ rækker som er nummererede, som der udvælges af og kopieres til en anden tabel.
Jeg vil gerne lave en kontrol der undersøger om en række har været valgt og spørger brugeren " den har du valgt, vil du vælge den række igen ? " JA. NEJ. og så hoppe tilbage hvis nej og fortsætte hvis ja.
Hvordan gribes det an.
Mvh. Chiefbigchief.
Avatar billede finb Ekspert
15. april 2018 - 10:41 #1
Læg spørgsmålet i Word-gruppen
og håb på, at
Lene Fredborg ser det.
Avatar billede chiefbigchief Mester
15. april 2018 - 10:45 #2
Jeg tror spørgsmålet er i den rigtige kategori, da der er en makro jeg arbejder i.
Avatar billede Lene Fredborg Ekspert
15. april 2018 - 14:34 #3
Da du ikke har vist noget af din VBA-kode (hvis det er VBA), er det ikke let at give en præcis løsning. Du kan måske gemme en DocVariable i det relevante dokument og der tilføje nr. på den række, der bliver valgt (f.eks. adskilt af #, komma eller andet tegn). Hvis en valgt rækkes nr. er i DocVariablens værdi, har rækken været valgt, ellers har den ikke været valgt.

Lad værdien af DocVariablen starte med skilletegnet. Eksempel til inspiration:

    Dim strDocVarName As String
    Dim strDocVarValue As String
    Dim lngCol As Long
    Dim lngColSelected As Long
   
    lngCol = 0
    lngColSelected = 0
   
    strDocVarName = "UsedRows"
    strDocVarValue = "#"
   
    'Hvis variablen skal gemmes i det aktive dokument - bedre med specifik reference til Document objekt
    ActiveDocument.Variables.Add name:=strDocVarName, Value:=strDocVarValue
   
    'Hver gang en række har været valgt - hvis rækkens nummer findes i en variabel lngCol
    With ActiveDocument.Variables(strDocVarName)
        .Value = .Value & lngCol & "#"
    End With
   
    'Når du skal tjekke, om en række har været valgt tidligere - hvis den række findes i en variabel lngColSelected
    If InStr(1, strDocVarValue, "#" & lngColSelected & "#") > 0 Then
        'Er valgt tidligere
        'Din kode her
    Else
        'Er ikke valgt tidligere
        'Din kode her
    End If
Avatar billede chiefbigchief Mester
15. april 2018 - 19:05 #4
Hej Lene: Tak for din interesse.
Som koden er lige nu gør jeg linien bold og italic for på denne måde at kende de linier der har været valgt.
Jeg kunne muligvis undersøge om linien er bold og italic og så skrive til brugeren den har du valgt.
her kommer lidt husmandskode kode.

Sub KopierNummer()

Dim svar As Byte
For løkke = 1 To 20

Selection.GoTo What:=wdGoToBookmark, Name:="start"

svar = InputBox(prompt:="Skriv nummeret på melodien du vil kopiere.              Tast 0 for at afbryde!!", _
Title:="Intast nummeret", xpos:=10, ypos:=10)

On Error GoTo FejlBehandling

If svar = "0" Then Exit For

If Selection.Information(wdWithInTable) = True Then

        Selection.MoveDown Unit:=wdLine, Count:=svar

    End If
Selection.MoveRight Unit:=wdWord, Count:=8, Extend:=wdExtend
  Selection.Copy
  Selection.Font.Bold = wdToggle
  Selection.Font.Italic = wdToggle
 
  Windows("SætNumre").Activate
    If løkke = 1 Then
        Selection.GoTo What:=wdGoToBookmark, Name:="start"
    End If
   
    Selection.Paste

  If Selection.Information(wdWithInTable) = True Then
   
      If Selection.Cells(1).RowIndex = 4 Then
      hop = 2
      Else: hop = 1
      End If

    Selection.MoveDown Unit:=wdLine, Count:=hop
   
  End If

  Windows("Repertoire").Activate
 
 
  If løkke = 20 Then
  a = MsgBox(prompt:="Du er nu færdig med kopieringen af første sæt", Title:="Stop")
  End If
 
  Next
Exit Sub
FejlBehandling:

MsgBox ("Du skal skrive et tal")
Err.Clear

Resume

End Sub
Avatar billede Lene Fredborg Ekspert
16. april 2018 - 02:11 #5
I mit svar #1 havde jeg navngivet variabler ”Col” for column/kolonne – burde have været ”Row”. Men det har ikke nogen praktisk betydning. Du kan stadig bruge ideen.

Jeg vil ikke gå i detaljer med din kode, da den udgør en løsrevet del af noget, du har lavet. Men her er nogle generelle tips:

Hvis brugerne selv kan foretage sig noget i dokumentet med alle rækkerne, kan du ikke sætte din lid til, at teksten er formateret på en bestemt måde. Brugerne kan måske have ændret noget, medmindre dokumentet er beskyttet på en eller anden måde.

Det ser ud til, at en del af din kode er baseret på noget du har optaget i en makro. Det bliver aldrig specielt elegant på den måde.

Bemærk, at din kode til Bold/Italic vil slå Bold/Italic FRA, hvis teksten allerede er Bold/Italic, da du bruger wdToggle. Brug True i stedet.

I stedet for fysisk at flytte Selection rundt i dokumenterne, ville det være langt bedre at bruge Range. Du kan f.eks. få kopiere indholdet i celle 1 i række 8 i første tabel i dokumentet med kode som denne (kan i praksis gøres mere elegant end vist her):

    Dim rngText As Range
   
    Set rngText = ActiveDocument.Tables(1).Cell(8, 1).Range
    'excl. end of cell
    With rngText
        .End = .End - 1
        'kopier teksten
        .Copy
    End With
    'Så kan det kopierede indsættes der, hvor du skal bruge det

Hvis du har i sinde at arbejde mere med VBA, er det en god idé at bruge tid på at forstå Range-objektet. Lidt info om Range: https://msdn.microsoft.com/en-us/vba/word-vba/articles/working-with-range-objects

Jeg vil stærkt anbefale, at du i Visual Basic Editor vælger Tools > Options > fanen Editor > Slå ” Require Variable Declaration” til > OK. Så vil nye kodemoduler automatisk få indsat ”Option Explicit” (uden gåseøjne) øverst, og det tvinger dig til at deklarere de variabler, du bruger. Indsæt manuelt ”Option Explicit” i eksisterende moduler. Du kan undgå mange fejl i koden på den måde.
Avatar billede chiefbigchief Mester
16. april 2018 - 09:36 #6
Du har helt ret, der er tale om husmandsprogramering optagelser samt lidt kode, jeg arbejder videre efter din vejledning.
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
Kurser inden for grundlæggende programmering

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