Avatar billede Rauff Juniormester
03. marts 2010 - 12:59 Der er 12 kommentarer og
1 løsning

Søgning som stopper makro hvis indholdet ikke er det ønskede

Jeg har en makro som opretter div. tabeller, men hvis værdien XXX IKKE findes i kolonne D, skal markroen IKKE udføres, den skal stoppe makroen og der skal komme følgende fejlbesked "Du har glemt at indlæse SKM koder".

Er der nogen som kender nogle koder, som kan klare ovennævnte ?
Avatar billede supertekst Ekspert
03. marts 2010 - 13:15 #1
Måske - kan du vise den bestående kode?
Avatar billede Rauff Juniormester
03. marts 2010 - 14:50 #2
Her er de:
-------
Sub Prkvtkort()
'
' Prkvtkort Makro
'
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        Worksheets("Data").Range("A1").CurrentRegion).CreatePivotTable TableDestination:="", TableName:= _
        "Pivottabel2", DefaultVersion:=xlPivotTableVersion10
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("Pivottabel2").PivotFields("Kvartal").Subtotals = Array _
        (False, True, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("Pivottabel2").PivotFields("Overførselstype"). _
        Subtotals = Array(False, True, False, False, False, False, False, False, False, False, _
        False, False)
    ActiveSheet.PivotTables("Pivottabel2").AddFields RowFields:=Array("Kvartal", _
        "Overførselstype", "Data"), PageFields:="Kundenavn"
    With ActiveSheet.PivotTables("Pivottabel2").PivotFields("Antal")
        .Orientation = xlDataField
        .Position = 1
        .NumberFormat = "#"
    End With
    With ActiveSheet.PivotTables("Pivottabel2").PivotFields("Beløb i DKK")
        .Orientation = xlDataField
        .NumberFormat = "#"
    End With
    ActiveWorkbook.ShowPivotTableFieldList = True
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    ActiveSheet.PageSetup.PrintArea = ""
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.393700787401575)
        .RightMargin = Application.InchesToPoints(0.393700787401575)
        .TopMargin = Application.InchesToPoints(0.393700787401575)
        .BottomMargin = Application.InchesToPoints(0.393700787401575)
        .HeaderMargin = Application.InchesToPoints(0)
        .FooterMargin = Application.InchesToPoints(0)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 100
        .PrintErrors = xlPrintErrorsDisplayed
    End With
    Columns("B:B").ColumnWidth = 8.57
    Range("C3").Select
    With ActiveSheet.PivotTables("Pivottabel2").DataPivotField
        .Orientation = xlColumnField
        .Position = 1
    End With
    Columns("B:B").ColumnWidth = 28.14
    Range("A1").Select
    With Selection.Interior
        .ColorIndex = 37
        .Pattern = xlSolid
    End With
    Range("A3:D4").Select
    With Selection.Interior
        .ColorIndex = 37
        .Pattern = xlSolid
    End With
    ActiveSheet.PivotTables("Pivottabel2").PivotSelect "Kvartal[All;Sum]", _
        xlDataAndLabel, True
    With Selection.Interior
        .ColorIndex = 37
        .Pattern = xlSolid
    End With
    ActiveWindow.ScrollRow = 2
    ActiveWindow.ScrollRow = 3
    ActiveWindow.ScrollRow = 4
    ActiveWindow.ScrollRow = 5
    ActiveWindow.ScrollRow = 6
    ActiveSheet.PivotTables("Pivottabel2").PivotSelect "'Column Grand Total'", _
        xlDataAndLabel, True
    With Selection.Interior
        .ColorIndex = 36
        .Pattern = xlSolid
    End With
    ActiveWorkbook.ShowPivotTableFieldList = False
    ActiveWindow.LargeScroll Down:=-1
    Columns("A:A").EntireColumn.AutoFit
End Sub
Avatar billede supertekst Ekspert
03. marts 2010 - 15:26 #3
Hvor er det du tester for XXX i kolonne D - eller er det lige præcis den du mangler?
Avatar billede supertekst Ekspert
03. marts 2010 - 15:37 #4
Hvis Ja:

Sub Prkvtkort()
'
' Prkvtkort Makro
'

If søgIkolonneD("XXX") = True Then
  ...
  ...
  ...
  ...din kode
  ...
  ...
  ... 
End If
End Sub
Private Function søgIkolonneD(id)
    With ActiveSheet.Range("D:D")
        Set c = .Find(id, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            søgIkolonneD = True
        Else
            søgIkolonneD = False
        End If
    End With
End Function
Avatar billede Rauff Juniormester
03. marts 2010 - 16:04 #5
Set spændende ud - når ikke at få det testet i dag, men vender tilbage med svar/info når jeg har fået det testet.
Avatar billede supertekst Ekspert
03. marts 2010 - 16:08 #6
OK
Avatar billede Rauff Juniormester
04. marts 2010 - 15:58 #7
Fantastisk det virker, den udfører kun makroen, når der er værdien XXX i kolonne D - det er bare kanon :-).

Kan du også en kode som vil generer et pop-up vindue med teksten "Du har glem at indlæse SKM koder" hvis der IKKE er XXX i kolonne D.

Dvs. hvis der er XXX i kolonne D så kører den makroen (det funger fint nu) og hvis der ikke er så laver den et pop-up med teksten "Du har glemt at indlæse SKM koder" (nu sker der intet da den hopper over makroen) ?

Husk at læg et svar så jeg kan give dig point.

-------
Sub Prkvtudltransaktionerkort()
'
' Prkvtkort Makro
'
    If søgIkolonneD(" XXX") = True Then
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        Worksheets("Data").Range("A1").CurrentRegion).CreatePivotTable TableDestination:="", TableName:= _
        "Pivottabel2", DefaultVersion:=xlPivotTableVersion10
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("Pivottabel2").PivotFields("Kilde").Subtotals = Array( _
        False, False, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("Pivottabel2").PivotFields("Kvartal").Subtotals = Array _
        (False, True, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("Pivottabel2").PivotFields("Valuta").Subtotals = Array( _
        False, False, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("Pivottabel2").AddFields RowFields:=Array("Kvartal", _
        "Valuta", "Kilde", "Data"), PageFields:="Kundenavn"
    With ActiveSheet.PivotTables("Pivottabel2").PivotFields("Antal")
        .Orientation = xlDataField
        .Position = 1
        .NumberFormat = "#,##0"
    End With
    With ActiveSheet.PivotTables("Pivottabel2").PivotFields("Beløb i DKK")
        .Orientation = xlDataField
        .NumberFormat = "#,##0"
    End With
    ActiveWorkbook.ShowPivotTableFieldList = True
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    ActiveSheet.PageSetup.PrintArea = ""
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.393700787401575)
        .RightMargin = Application.InchesToPoints(0.393700787401575)
        .TopMargin = Application.InchesToPoints(0.393700787401575)
        .BottomMargin = Application.InchesToPoints(0.393700787401575)
        .HeaderMargin = Application.InchesToPoints(0)
        .FooterMargin = Application.InchesToPoints(0)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 100
        .PrintErrors = xlPrintErrorsDisplayed
    End With
    Range("D3").Select
    With ActiveSheet.PivotTables("Pivottabel2").DataPivotField
        .Orientation = xlColumnField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("Pivottabel2").PivotFields("Kilde")
        .PivotItems("BGS").Visible = False
    End With
    Range("A1").Select
    With Selection.Interior
        .ColorIndex = 37
        .Pattern = xlSolid
    End With
    ActiveSheet.PivotTables("Pivottabel2").PivotSelect "", xlDataAndLabel, True
    Range("A3:E4").Select
    With Selection.Interior
        .ColorIndex = 37
        .Pattern = xlSolid
    End With
    ActiveSheet.PivotTables("Pivottabel2").PivotSelect "Kvartal[All;Sum]", _
        xlDataAndLabel, True
    With Selection.Interior
        .ColorIndex = 37
        .Pattern = xlSolid
    End With
    ActiveSheet.PivotTables("Pivottabel2").PivotSelect "'Column Grand Total'", _
        xlDataAndLabel, True
    With Selection.Interior
        .ColorIndex = 36
        .Pattern = xlSolid
    End With
    ActiveWorkbook.ShowPivotTableFieldList = False
    Columns("A:A").EntireColumn.AutoFit
End If
End Sub
Private Function søgIkolonneD(id)
    With ActiveSheet.Range("D:D")
        Set c = .Find(id, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            søgIkolonneD = True
        Else
            søgIkolonneD = False
        End If
    End With
End Function
Avatar billede supertekst Ekspert
04. marts 2010 - 16:09 #8
...
...
    ActiveWorkbook.ShowPivotTableFieldList = False
    Columns("A:A").EntireColumn.AutoFit
Else                                <------------- indsættes
    MsgBox("Du har glem at indlæse SKM koder") <--"-
End If
End Sub
Private Function søgIkolonneD(id)
    With ActiveSheet.Range("D:D")
        Set c = .Find(id, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            søgIkolonneD = True
        Else
            søgIkolonneD = False
        End If
    End With
End Function
Avatar billede Rauff Juniormester
05. marts 2010 - 13:23 #9
Kanon det virker - super, nu virker makroen hensigtsmæssigt.

Du har jo reelt svaret på 2 spørgsmål, så kan du ikke lægge et svar mere, så jeg også kan give dig point for det sidste svar.

P.S. Kan man lave lave en indledende kommentarboks med teksten "har du indtastet SKM koder" hvor man så kan vælge JA / NEJ. Ved JA starter den makroen, ved NEJ aflutter den uden at foretage sig noget (det skal være en tilføjelse til de bestående koder) ?

---------
Sub Prkvtudltransaktionerkort()
'
' Udltransaktioner Makro
'
    If søgIkolonneD("XXX") = True Then
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        Worksheets("Data").Range("A1").CurrentRegion).CreatePivotTable TableDestination:="", TableName:= _
        "Pivottabel2", DefaultVersion:=xlPivotTableVersion10
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("Pivottabel2").PivotFields("Kilde").Subtotals = Array( _
        False, False, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("Pivottabel2").PivotFields("Kvartal").Subtotals = Array _
        (False, True, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("Pivottabel2").PivotFields("Valuta").Subtotals = Array( _
        False, False, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("Pivottabel2").AddFields RowFields:=Array("Kvartal", _
        "Valuta", "Kilde", "Data"), PageFields:="Kundenavn"
    With ActiveSheet.PivotTables("Pivottabel2").PivotFields("Antal")
        .Orientation = xlDataField
        .Position = 1
        .NumberFormat = "#,##0"
    End With
    With ActiveSheet.PivotTables("Pivottabel2").PivotFields("Beløb i DKK")
        .Orientation = xlDataField
        .NumberFormat = "#,##0"
    End With
    ActiveWorkbook.ShowPivotTableFieldList = True
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    ActiveSheet.PageSetup.PrintArea = ""
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.393700787401575)
        .RightMargin = Application.InchesToPoints(0.393700787401575)
        .TopMargin = Application.InchesToPoints(0.393700787401575)
        .BottomMargin = Application.InchesToPoints(0.393700787401575)
        .HeaderMargin = Application.InchesToPoints(0)
        .FooterMargin = Application.InchesToPoints(0)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 100
        .PrintErrors = xlPrintErrorsDisplayed
    End With
    Range("D3").Select
    With ActiveSheet.PivotTables("Pivottabel2").DataPivotField
        .Orientation = xlColumnField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("Pivottabel2").PivotFields("Kilde")
        .PivotItems("BGS").Visible = False
    End With
    Range("A1").Select
    With Selection.Interior
        .ColorIndex = 37
        .Pattern = xlSolid
    End With
    ActiveSheet.PivotTables("Pivottabel2").PivotSelect "", xlDataAndLabel, True
    Range("A3:E4").Select
    With Selection.Interior
        .ColorIndex = 37
        .Pattern = xlSolid
    End With
    ActiveSheet.PivotTables("Pivottabel2").PivotSelect "Kvartal[All;Sum]", _
        xlDataAndLabel, True
    With Selection.Interior
        .ColorIndex = 37
        .Pattern = xlSolid
    End With
    ActiveSheet.PivotTables("Pivottabel2").PivotSelect "'Column Grand Total'", _
        xlDataAndLabel, True
    With Selection.Interior
        .ColorIndex = 36
        .Pattern = xlSolid
    End With
    ActiveWorkbook.ShowPivotTableFieldList = False
    Columns("A:A").EntireColumn.AutoFit
    Else
    MsgBox ("Du har glem at indlæse SKM koder")
End If
End Sub
Private Function søgIkolonneD(id)
    With ActiveSheet.Range("D:D")
        Set c = .Find(id, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            søgIkolonneD = True
        Else
            søgIkolonneD = False
        End If
    End With
End Function
Avatar billede supertekst Ekspert
05. marts 2010 - 13:31 #10
Det er fint nok med de givne points. Der kan heller ikke lægges flere svar til et accepteret sp. Så skal der oprettes et nyt - men lad set være.

Jeg vender lige tilbage med svar til dit sidste spørgsmål - så ja det kan man...
Avatar billede supertekst Ekspert
05. marts 2010 - 13:35 #11
Sub Prkvtkort()
Dim svar As Byte
    svar = MsgBox("Har du indtastet SKM koder?", vbYesNo)
    If svar = 6 Then
      If søgIkolonneD("XXXX") = True Then

...
...
din kode
...
...
        End if
    End if
end sub
Avatar billede Rauff Juniormester
08. marts 2010 - 12:16 #12
IGEN IGEN det virker perfekt - mange tak for hjælpen
Avatar billede supertekst Ekspert
08. marts 2010 - 12:41 #13
Fint & selv tak...
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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