Avatar billede henrik4223 Nybegynder
20. oktober 2006 - 12:37 Der er 4 kommentarer

Sammensæt to makroer - hjælp

Jeg skal sætte en makro in i scriptet nendenfor


Public Sub Samle_i_System()
Dim Valgt As Integer

Valgt = MsgBox("ADVARSEL: Denne kommando vil sætte data i faneblad 'Sætte i system' i system, og sletter dermed alle nuværende data der er placeret i faneblad 'Sætte i system'. Kommandoen kan ikke fortrydes! Fortsæt?", vbQuestion + vbYesNoCancel, "ADVARSEL")
If Valgt = vbYes Then


' Dette er den makro der skal sættes ind
    Cells.Select
    Selection.Copy
    Sheets("Sikkerhedskopi").Select
    Range("A1").Select
    ActiveSheet.Paste
    Sheets("Sætte i system").Select
    Range("A1").Select
    Application.CutCopyMode = False
' Slutter her




    Dim Data As Variant, ResData() As Variant, N As Long, i As Long, X As Long, Y As Long, Data2 As Variant, Findes As Boolean

    N = 0
    Data = Range("a1").CurrentRegion
    ReDim ResData(UBound(Data, 1) * UBound(Data, 2))

    For i = 1 To UBound(Data, 2)
        For X = 2 To UBound(Data, 1)
            If Not IsEmpty(Data(X, i)) Then
                Findes = False
                For Y = 0 To UBound(ResData)
                    If ResData(Y) = Data(X, i) Then
                        Findes = True
                        Exit For
                    End If
                Next
                If Not Findes Then
                    ResData(N) = Data(X, i)
                    N = N + 1
                End If
            End If

        Next
    Next

    Range("a1").CurrentRegion.ClearContents

    Range("A1:A" & UBound(ResData) + 1) = Application.WorksheetFunction.Transpose(ResData)

    Data2 = Range("A1:A" & Range("A65536").End(xlUp).Row)
    For i = 1 To UBound(Data, 2)
        For X = 2 To UBound(Data, 1)
            For Y = 1 To UBound(Data2)
                If (Data(X, i)) = Data2(Y, 1) Then
                    N = 1
                   
                    Do
                        N = N + 1
                    Loop Until Cells(Y, N) = "" Or Cells(Y, N) = Data(1, i)
                   
                    Cells(Y, N) = Data(1, i)
                    Exit For
                End If
            Next
        Next
    Next

Else
    If Valgt = vbNo Then
        Sheets("Faneblad2").Select
       
End If
End If
End Sub

Derudover er der et mindre problem. Når jeg trykker "No", så skriver den "Subscript out of range". Hvordan får jeg den til at holde op med det?
Avatar billede kabbak Professor
20. oktober 2006 - 15:08 #1
Public Sub Samle_i_System()
    Dim Valgt As String
    Dim Data As Variant, ResData() As Variant, N As Long, i As Long, X As Long, Y As Long, Data2 As Variant, Findes As Boolean

    Valgt = MsgBox("ADVARSEL: Denne kommando vil sætte data i faneblad 'Sætte i system' i system, og sletter dermed alle nuværende data der er placeret i faneblad 'Sætte i system'. Kommandoen kan ikke fortrydes! Fortsæt?", vbQuestion + vbYesNoCancel, "ADVARSEL")
    If Valgt = vbYes Then

        Sheets("Sætte i system").Activate ' jeg går ud fra at der er fra Sheets("Sætte i system"), du vil kopiere
        Cells.Copy Sheets("Sikkerhedskopi").Range("A1").Select

        N = 0
        Data = Range("a1").CurrentRegion
        ReDim ResData(UBound(Data, 1) * UBound(Data, 2))

        For i = 1 To UBound(Data, 2)
            For X = 2 To UBound(Data, 1)
                If Not IsEmpty(Data(X, i)) Then
                    Findes = False
                    For Y = 0 To UBound(ResData)
                        If ResData(Y) = Data(X, i) Then
                            Findes = True
                            Exit For
                        End If
                    Next
                    If Not Findes Then
                        ResData(N) = Data(X, i)
                        N = N + 1
                    End If
                End If

            Next
        Next

        Range("a1").CurrentRegion.ClearContents

        Range("A1:A" & UBound(ResData) + 1) = Application.WorksheetFunction.Transpose(ResData)

        Data2 = Range("A1:A" & Range("A65536").End(xlUp).Row)
        For i = 1 To UBound(Data, 2)
            For X = 2 To UBound(Data, 1)
                For Y = 1 To UBound(Data2)
                    If (Data(X, i)) = Data2(Y, 1) Then
                        N = 1

                        Do
                            N = N + 1
                        Loop Until Cells(Y, N) = "" Or Cells(Y, N) = Data(1, i)

                        Cells(Y, N) = Data(1, i)
                        Exit For
                    End If
                Next
            Next
        Next
    End If
Else
    Sheets("Faneblad2").Select
End If
End Sub
Avatar billede kabbak Professor
20. oktober 2006 - 15:09 #2
der var lige en fejl


Public Sub Samle_i_System()
    Dim Valgt As String
    Dim Data As Variant, ResData() As Variant, N As Long, i As Long, X As Long, Y As Long, Data2 As Variant, Findes As Boolean

    Valgt = MsgBox("ADVARSEL: Denne kommando vil sætte data i faneblad 'Sætte i system' i system, og sletter dermed alle nuværende data der er placeret i faneblad 'Sætte i system'. Kommandoen kan ikke fortrydes! Fortsæt?", vbQuestion + vbYesNoCancel, "ADVARSEL")
    If Valgt = vbYes Then

        Sheets("Sætte i system").Activate ' jeg går ud fra at der er fra Sheets("Sætte i system"), du vil kopiere
        Cells.Copy Sheets("Sikkerhedskopi").Range("A1")

        N = 0
        Data = Range("a1").CurrentRegion
        ReDim ResData(UBound(Data, 1) * UBound(Data, 2))

        For i = 1 To UBound(Data, 2)
            For X = 2 To UBound(Data, 1)
                If Not IsEmpty(Data(X, i)) Then
                    Findes = False
                    For Y = 0 To UBound(ResData)
                        If ResData(Y) = Data(X, i) Then
                            Findes = True
                            Exit For
                        End If
                    Next
                    If Not Findes Then
                        ResData(N) = Data(X, i)
                        N = N + 1
                    End If
                End If

            Next
        Next

        Range("a1").CurrentRegion.ClearContents

        Range("A1:A" & UBound(ResData) + 1) = Application.WorksheetFunction.Transpose(ResData)

        Data2 = Range("A1:A" & Range("A65536").End(xlUp).Row)
        For i = 1 To UBound(Data, 2)
            For X = 2 To UBound(Data, 1)
                For Y = 1 To UBound(Data2)
                    If (Data(X, i)) = Data2(Y, 1) Then
                        N = 1

                        Do
                            N = N + 1
                        Loop Until Cells(Y, N) = "" Or Cells(Y, N) = Data(1, i)

                        Cells(Y, N) = Data(1, i)
                        Exit For
                    End If
                Next
            Next
        Next
    End If
Else
    Sheets("Faneblad2").Select
End If
End Sub
Avatar billede henrik4223 Nybegynder
26. oktober 2006 - 11:45 #3
Sorry for den lange ventetid, men jeg har været på en lille ferie :-)

Jeg har prøvet ovenstående, men den siger, der er en fejl ved den sidste "Else" - Else without if?
Avatar billede kabbak Professor
26. oktober 2006 - 11:48 #4
Public Sub Samle_i_System()
    Dim Valgt As String
    Dim Data As Variant, ResData() As Variant, N As Long, i As Long, X As Long, Y As Long, Data2 As Variant, Findes As Boolean

    Valgt = MsgBox("ADVARSEL: Denne kommando vil sætte data i faneblad 'Sætte i system' i system, og sletter dermed alle nuværende data der er placeret i faneblad 'Sætte i system'. Kommandoen kan ikke fortrydes! Fortsæt?", vbQuestion + vbYesNoCancel, "ADVARSEL")
    If Valgt = vbYes Then

        Sheets("Sætte i system").Activate    ' jeg går ud fra at der er fra Sheets("Sætte i system"), du vil kopiere
        Cells.Copy Sheets("Sikkerhedskopi").Range("A1")

        N = 0
        Data = Range("a1").CurrentRegion
        ReDim ResData(UBound(Data, 1) * UBound(Data, 2))

        For i = 1 To UBound(Data, 2)
            For X = 2 To UBound(Data, 1)
                If Not IsEmpty(Data(X, i)) Then
                    Findes = False
                    For Y = 0 To UBound(ResData)
                        If ResData(Y) = Data(X, i) Then
                            Findes = True
                            Exit For
                        End If
                    Next
                    If Not Findes Then
                        ResData(N) = Data(X, i)
                        N = N + 1
                    End If
                End If

            Next
        Next

        Range("a1").CurrentRegion.ClearContents

        Range("A1:A" & UBound(ResData) + 1) = Application.WorksheetFunction.Transpose(ResData)

        Data2 = Range("A1:A" & Range("A65536").End(xlUp).Row)
        For i = 1 To UBound(Data, 2)
            For X = 2 To UBound(Data, 1)
                For Y = 1 To UBound(Data2)
                    If (Data(X, i)) = Data2(Y, 1) Then
                        N = 1

                        Do
                            N = N + 1
                        Loop Until Cells(Y, N) = "" Or Cells(Y, N) = Data(1, i)

                        Cells(Y, N) = Data(1, i)
                        Exit For
                    End If
                Next
            Next
        Next
    Else
        Sheets("Faneblad2").Select

    End If

End Sub
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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