Avatar billede cls-vb Nybegynder
02. november 2006 - 21:57 Der er 19 kommentarer

Udvælg linier fra liste i Excel

Jeg sidder og roder med at får VB til at kopiere nogle variable linier i et Excel ark, linierne der skal kopieres bliver automatisk markeret med "1" i kolonne B. Jeg har foreløbig følgende kode, men får fejlmeddelelse 1004 (Select method of Range class failed), fejlen opstår ved ( Cells(r, Xkol).Select )

Er der nogen der kan hjælpe mig videre?


Dim Xkol As Integer


Private Sub CommandButton2_Click()
    Worksheets("Data ind").Activate
    ActiveSheet.Range("B60000").Select
    Selection.End(xlUp).Select
    rEnd = ActiveCell.Row - 1
   
    For r = 2 To rEnd  'gennemgår rækkerne fra 2 til enden for "0"
        Xkol = 2
        Cells(r, Xkol).Select
        If ActiveCell.Value = "" Then
       
        Else
            If ActiveCell.HasFormula Then
           
                If ActiveCell.Value = 0 Then
                   
                Else
                    Selection.Cells(r, Xkol = "C").Copy
                    Worksheets("Bogføring bilag").Activate
                    ActiveSheet.Range("A12").Select
                    Selection.EntireRow.Insert
                    Selection.End(xlUp).Select
                    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                        :=False, Transpose:=False
                    Application.CutCopyMode = False
                End If
            End If
        End If
    Next r
   
End Sub
Avatar billede kabbak Professor
02. november 2006 - 22:14 #1
1. Hvis du ikke har koden i en Userform, men i et ark modul, vil den fejle, da du ikke fra et arkmodul kan arbejde i andre ark.

2. i dit loop ændrer du det aktive ark til  Worksheets("Bogføring bilag"),
  det skal ændres tilbage med Worksheets("Data ind").Activate, ellers kører koden i det forkerte ark,
Avatar billede kabbak Professor
02. november 2006 - 22:17 #2
Worksheets("Bogføring bilag").Activate
                    ActiveSheet.Range("A12").Select
                    Selection.EntireRow.Insert

her indsætter du en tom række, men hvad skal koden i første linie herunder så, hvis ikke du vil sætte data ind i den tomme

                    Selection.End(xlUp).Select
                    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                        :=False, Transpose:=False
                    Application.CutCopyMode = False
Avatar billede kabbak Professor
02. november 2006 - 22:26 #3
denne ser underlig ud, hvad skal den gøre, det er ="C", jeg mener, den giver ihvertfal en fejl

  Selection.Cells(r, Xkol = "C").Copy
Avatar billede kabbak Professor
02. november 2006 - 22:55 #4
OK, jeg har prøvet at lave koden, som jeg tror du mener.

Hvis en celle i B kolonnen har en formel og den værdi den viser er 1, så kopiere den hele rækken.

Private Sub CommandButton2_Click()

Worksheets("Data ind").Activate
    rEnd = ActiveSheet.Range("B60000").End(xlUp).Row - 1
    Xkol = 2
    For r = 2 To rEnd  'gennemgår rækkerne fra 2 til enden for "1"
        Cells(r, Xkol).Select
            If Cells(r, Xkol).HasFormula And Cells(r, Xkol).Value = 1 Then
                    Sheets("Bogføring bilag").Rows("12:12").Insert Shift:=xlDown
                    Rows(Cells(r, Xkol).Row & ":" & Cells(r, Xkol).Row).Copy
                    Sheets("Bogføring bilag").Range("A12").PasteSpecial Paste:=xlPasteValues
                    Application.CutCopyMode = False
                End If
    Next r
End Sub
Avatar billede cls-vb Nybegynder
04. november 2006 - 17:37 #5
Hej, jeg sidder lige og arbejder viderer på det. Nu har jeg flyttet koden over i en Userform og det ser ud til at hjælpe. Jeg kan bare ikke lige helt forstå hvad der sker her:

                    Sheets("Bogføring bilag").Rows("12:12").Insert Shift:=xlDown

Det er især udtrykket "12:12" Der undre mig....
Avatar billede cls-vb Nybegynder
04. november 2006 - 18:45 #6
Så nu har jeg ændret lidt på udtrykket ovenfor, så det nu ser ud til at virke, men jeg har stadig et problem. Det er at jeg skal have den til at kopiere celleindholdet fra cellen i kolonne c i de rækker den finder. Indholdet skal kopieres over i "bogførings bilag", som values. VB koden ser foreløbig således ud:

Dim Xkol As Integer

Private Sub CommandButton1_Click()
  Worksheets("Data ind").Activate
    rEnd = ActiveSheet.Range("B60000").End(xlUp).Row - 1
    Xkol = 2
    For r = 2 To rEnd  'gennemgår rækkerne fra 2 til enden for "1"
        Cells(r, Xkol).Select
            If Cells(r, Xkol).HasFormula And Cells(r, Xkol).Value = 1 Then
                    Worksheets("Bogførings bilag").Activate
                    ActiveSheet.Range("B12").EntireRow.Insert
                    Rows(Cells(r, Xkol).Row & ":" & Cells(r, Xkol).Row).Copy
                    Worksheets("Bogførings bilag").Range("A12").PasteSpecial Paste:=xlPasteValues
                    Application.CutCopyMode = False
                End If
    Next r
 
    Unload UserForm2
    UserForm2.Hide
   
End Sub


Problemet opstår i linien med koden:

Rows(Cells(r, Xkol).Row & ":" & Cells(r, Xkol).Row).Copy
Avatar billede kabbak Professor
04. november 2006 - 21:56 #7
Hvilke værdier skal over, hele rækken eller kun 1 celle, den du tjekker på er i B kolonnen ??
Du har skiftet  ActiveSheet til  Worksheets("Bogførings bilag")' derfor kan den ikke kopiere med  Rows(Cells(r, Xkol).Row & ":" & Cells(r, Xkol).Row).Copy

det er du nødt til at ændre til

Worksheets("Data ind").Rows(Cells(r, Xkol).Row & ":" & Cells(r, Xkol).Row).Copy


Jeg har prøvet at rette lidt i din kode:

Dim Xkol As Integer

Private Sub CommandButton1_Click()
  Worksheets("Data ind").Activate
    rEnd = ActiveSheet.Range("B60000").End(xlUp).Row - 1
    Xkol = 2
    For r = 2 To rEnd  'gennemgår rækkerne fra 2 til enden for "1"
        Cells(r, Xkol).Select
            If Cells(r, Xkol).HasFormula And Cells(r, Xkol).Value = 1 Then
                    Worksheets("Bogførings bilag").Activate
                    ActiveSheet.Range("B12").EntireRow.Insert
    Worksheets("Data ind").Rows(Cells(r, Xkol).Row & ":" & Cells(r, Xkol).Row).Copy
                    Worksheets("Bogførings bilag").Range("A12").PasteSpecial Paste:=xlPasteValues
                    Application.CutCopyMode = False
                End If

Worksheets("Data ind").Activate

    Next r
 
    Unload UserForm2
    UserForm2.Hide
   
End Sub
Avatar billede cls-vb Nybegynder
05. november 2006 - 12:25 #8
Det er god hjælp du kommer med tak for det. Det er kun værdien for 1 celle der skal over, det er cellen i c kolonnen.

Og så udfører den ikke hanlingen mere end en gang. Det er meningen at den skal gennemsage kolonne b for celler med værdien 1 og så kopiere celle indholdet fra c kolonnen over i arket "Bogførings bilg".
Avatar billede kabbak Professor
06. november 2006 - 10:36 #9
Hvor skal den sættes ind i ("Bogførings bilag").

Hvilken kolonne ?

Hvilken række, i bunden af eksisterende, eller i en ny række som sættes ind i toppen, f.eks. rra række 12
Avatar billede kabbak Professor
06. november 2006 - 10:39 #10
Skal rækken i ("Data ind"), slettes når den er overført, eller skal der skrives en værdi i B kolonnen, i stedet for den formel der ligger der og som har værdien 1
Avatar billede cls-vb Nybegynder
06. november 2006 - 11:41 #11
Det skal gerne sættes ind i kolonne A, i bunden af en eksisterende liste, som starter i celle A12.

Rækken i ("Data ind") skal blive stående, som den er.
Avatar billede kabbak Professor
06. november 2006 - 12:22 #12
Prøv denne, men den vil sætte den samme ind igen, næste gang du kører koden, hvis du ikke ændrer i B kolonnen.

Public Sub CommandButton2_Click()
    Worksheets("Data ind").Activate
    rEnd = ActiveSheet.Range("B60000").End(xlUp).Row - 1
    Xkol = 2
    For r = 2 To rEnd  'gennemgår rækkerne fra 2 til enden for "1"
        Cells(r, Xkol).Select
        If Cells(r, Xkol).HasFormula And Cells(r, Xkol).Value = 1 Then
            Cells(r, Xkol + 1).Copy
            Sheets("Bogføring bilag").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False
        End If
    Next r
End Sub
Avatar billede kabbak Professor
06. november 2006 - 12:23 #13
Ret lige

Public Sub CommandButton2_Click
til

Private Sub CommandButton2_Click()
Avatar billede cls-vb Nybegynder
06. november 2006 - 13:07 #14
Tak for det, nu er den lige ved at være der. Jeg kan bare ikke forstå at den ikke udfører handlingen gentagende så jeg får alle "1" linierne med.

Det er kun den øverste af de linier den skal hente, som kommer med.
Avatar billede kabbak Professor
06. november 2006 - 13:58 #15
For at den skal overføre, kræves at der i B kolonnen, er en formel som viser værdien 1.
Avatar billede cls-vb Nybegynder
06. november 2006 - 14:17 #16
Jeg har 8 linier hvor formlen i B kolonnen viser 1. De står i et data felt hvor der ca. 50 linier og 8 af dem har værdien 1.

Det er kun den øverste af de 8 linier den behandler rigtig.
Avatar billede kabbak Professor
06. november 2006 - 14:23 #17
Private Sub CommandButton2_Click()
    Worksheets("Data ind").Activate
    rEnd = Worksheets("Data ind").Range("B60000").End(xlUp).Row - 1
    Xkol = 2
    For r = 2 To rEnd  'gennemgår rækkerne fra 2 til enden for "1"
        If Worksheets("Data ind").Cells(r, Xkol).HasFormula And Worksheets("Data ind").Cells(r, Xkol).Value = 1 Then
          Worksheets("Data ind").Cells(r, Xkol + 1).Copy
            Sheets("Bogføring bilag").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False
        End If
    Next r
End Sub


prøv denne
Avatar billede cls-vb Nybegynder
06. november 2006 - 14:53 #18
Jeg er ked af det, men det er stdigvæk kun den ene linie den tager med.
Avatar billede kabbak Professor
06. november 2006 - 17:38 #19
hvordan ser din formel id i B kolonnen, er der forskel på den der hvor den kopierer over og de andre den ikke kopierer.

Prøv at sætte formlen herind
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