Avatar billede jensen363 Forsker
28. september 2006 - 22:08 Der er 5 kommentarer og
1 løsning

Opret Modulkode med en makro

Nu tænker I nok ... nu rabler det for gamle Jensen, men seriøst ... kan det lade sig gøre.

Sagen er der, at jeg eksperimenterer med multi-genererering af rapportmodeller fra SAP i et Excel-baseret værktøj kaldet Business Explorer Analyzer.

Modellernes grundprincipper består i, at jeg via queries i SAP, får returneret en række data til Excel, som så efterfølgende allokeres ud i enkelt arkfaner hed hjælp af egenudviklede makroer ... årsagen hertil er, at det vil tage alt for lang tid at producere de samme data som enkeltrapportudtræk fra SAP.

Dette fungerer i og for sig udemærket, men navigeringen i arkfaner som kan være adskillige hundrede, er meget lidt brugervenlig, når disse kun er navngivet med et kundenummer. Navngivning men kundenummer er valgt, fordi konbinationen af kundenummer og navn ofte overstiger de 30 karakteret som er max i arkfanenavne ...

Her er det så spørgsmålet om man kan give brugerne en mere overskuelig oversigt og adgang til de enkelte arkfaner.

I andre sammenhænge, har jeg med helt benyttet Userforms og TreeWiev funktioner til opbygning af menustrukturer til aktivering af forskellige makrofunktioner ...

Den modulkode som reelt er ret simpel, ... kan den opbygges dynamisk via en makrofuktion ???

Nedenfor et lille udsnit/eksempel på den kode jeg vil opnå

Private Sub UserForm_Initialize()
Dim nodX As Node
    TreeView1.CheckBoxes = False
    With TreeView1.Nodes
        .Clear
       
        Set nodX = .Add(, , "10000", "Kunde A")
        Set nodX = .Add(, , "20000", "Kunde B")
        Set nodX = .Add(, , "30000", "Kunde C")

End With
    TreeView1.Style = tvwTreelinesPlusMinusText
    TreeView1.BorderStyle = ccFixedSingle
    TreeView1.Appearance = cc3D

End Sub

Private Sub TreeView1_DblClick()

    If TreeView1.SelectedItem.Key = "10000" Then
      Sheets("10000").Select
    ElseIf TreeView1.SelectedItem.Key = "20000" Then
      Sheets("20000").Select
    ElseIf TreeView1.SelectedItem.Key = "30000" Then
      Sheets("30000").Select

    Else
   
    End If

End Sub

Er det for ambitiøst et projekt, er det overhovedet lade sig gørligt eller har I et bedre forslag ????
Avatar billede kabbak Professor
28. september 2006 - 23:48 #1
Jeg lavede denne engang, den laver et ark der hedder Menu, og sætter hyperlink til alle andre ark ind på siden.

Jeg ved ikke om det er det du efterlyser.

Public Sub Menu()
    Dim W As Integer, K As Integer, A As Integer
    A = MsgBox("Vil du indsætte et ark ved navn MENU, eller opdatere eksisterende, hvor der er Hyperlink til dine ark", vbYesNo, "MENU OPRETTER  v.Kabbak ©")
    If A = 6 Then
        W = 1    ' styrer række inden for hyperlink
        K = 1    ' styrer kolonner inden for hyperlink
        For Each ws In Worksheets
            If ws.Name = "Menu" Then GoTo Findes
        Next ws

        Set NewSheet = Worksheets.Add    ' opretter nyt ark
        NewSheet.Name = "Menu"        ' navngiver det nye ark

Findes:
        Worksheets("Menu").Activate
        Range("a1").Select
        If ActiveCell.Value = "" Then
            ActiveCell.Value = "MENU Styring    v.Kabbak ©"
            ActiveCell.Font.Color = vbBlue
            ActiveCell.Font.Bold = True
            ActiveCell.Font.Italic = True

            Range("A1:i1").Select
            With Selection
                .HorizontalAlignment = xlCenter
            End With
            Selection.Merge
            With Selection.Borders(xlEdgeLeft)
                .LineStyle = xlContinuous
                .Weight = xlMedium
                .ColorIndex = 3
            End With
            With Selection.Borders(xlEdgeTop)
                .LineStyle = xlContinuous
                .Weight = xlMedium
                .ColorIndex = 3
            End With
            With Selection.Borders(xlEdgeBottom)
                .LineStyle = xlContinuous
                .Weight = xlMedium
                .ColorIndex = 3
            End With
            With Selection.Borders(xlEdgeRight)
                .LineStyle = xlContinuous
                .Weight = xlMedium
                .ColorIndex = 3
            End With
        End If
        Range("a2:i31").Select            ' sletter alle data i området til hyperlink
        Selection.ClearContents            '    der kan jo være fjernet sider ???
        Range("a2").Select
        '-----------------------------------------Der laves hyperlink til alle ark  -------------
        For Each ws In Worksheets
            Worksheets("Menu").Range("a2:a260").Cells(W, K).Select    ' reseverer et område til at skrive hyperlink i

            If ws.Name = "Menu" Then GoTo Næste    ' Hopper over hovedarket "Menu"

            ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="'" & ws.Name & "'" & "!A1"
            ActiveCell.FormulaR1C1 = ws.Name    ' skriver hyperlink på alle sider inden for området
            W = W + 1
Næste:
        Next ws
        '------------------------------Soterer kollonne A ----------------------------
        Range("A2").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
                      OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                      DataOption1:=xlSortNormal

        '--------------- Flytter data over i 4 kolonner ------------------------
        R = 2
        For I = 31 To 252 Step 28
            Range("A" & I & ":A" & I + 28).Cut
            Cells(2, R).Select
            ActiveSheet.Paste
            R = R + 1
        Next
        Columns("A:I").Select
        Selection.EntireColumn.AutoFit
        Range("A1").Select

    Else
        Exit Sub
    End If
End Sub
Avatar billede jensen363 Forsker
29. september 2006 - 10:30 #2
Virker nogenlunde tilfredsstillende ... :o) ... du får point
Avatar billede bak Forsker
29. september 2006 - 11:00 #3
Det du mangler i din egen kode kunne være dette

Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
  On Error GoTo Exit_here
  ThisWorkbook.Sheets(Node.Text).Activate
  Exit Sub
Exit_here:
 
End Sub
Avatar billede bak Forsker
29. september 2006 - 11:46 #4
Skulle være
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
  On Error GoTo Exit_here
  ThisWorkbook.Sheets(Node.Key).Activate
  Exit Sub
Exit_here:
 
End Sub
Avatar billede jensen363 Forsker
29. september 2006 - 11:52 #5
Hej Bak > jeg mangler som udgangspunkt ikke nogen modulkode ... det jeg viser er et eksempel på hvad jeg gerne ville opnå ... den illustrerede kode er derfor udelukkende et eksempel ... det jeg søgte, var en måde hvorpå jeg ved hjælp af en makro kunne generere en kode som kunne benyttes i TreeView funktionen ... :o)

kabbak´s eksempel opfylder samme behov, blot ikke i en Treeview-funktion
Avatar billede kabbak Professor
29. september 2006 - 11:57 #6
et svar ;-))
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