19. maj 2008 - 15:19Der er
2 kommentarer og 1 løsning
Dynamisk data i xy-punkt graf.
Jeg vil gerne lave en xy-punkt graf der henter fra et dynamisk data ark – arket ænder hele tiden form så det ville være meget ressourcekrævende manuelt at definere serier i grafen. Data se ud som nedenstående:
Hvis vi antager, at du har dine væredier stående i et ark der hedder "Ark1", og Produktnr er placeret i A1, samt at du har grafen du vil opdatere som et ark der hedder "Diagram1", så kan du skrive følgende vb-kode i arket "Diagram1", og så vil den automatisk opdatere, hver arket med graffen bliver valgt.
Private Sub Chart_Activate() ActiveChart.SetSourceData Source:=Sheets("Ark1").Range("A1", Sheets("Ark1").Range("B65536").End(xlUp)), PlotBy:=xlColumns End Sub
Rem - version 2 21-05-2008 Rem (Nulstilling fjernet) Rem (DiagramArk navngives - evt. gl. "DiagramArk" slettes, hvis samme navn)
Const diaNavn = "Proceskontrol (Print)" Dim sidsteRæk, ddStartRæk Dim datoTab(), datoRæk, antalDatoer, sidsteDataRække Private Sub worksheet_activate() Application.ScreenUpdating = False
svar = MsgBox("Opbyg diagram?", vbYesNo) If svar = 6 Then opbygDiagram MsgBox ("DiagramOpbygning afsluttet") End If
Application.ScreenUpdating = True End Sub Private Sub opbygDiagram() Rem Test om diagramArk findes - hvis ja: Slet dette For Each sh In ActiveWorkbook.Sheets If LCase(sh.Name) = LCase(diaNavn) Then Application.DisplayAlerts = False sh.Delete Application.DisplayAlerts = True Exit For End If Next
Rem opret tabel til datoer opretDatoTabel End Sub Private Function findSidsteRække() For ræk = 2 To 65000 If Cells(ræk, 1) = "" Then findSidsteRække = ræk Exit Function End If Next End Function Private Sub sletGlData(fraRæk) ActiveSheet.Rows(CStr(fraRæk) & ":65000").Select Selection.Delete End Sub Private Sub opretDatoTabel() Dim dato As Date ReDim datoTab(sidsteRæk)
antalDatoer = 0 For ræk = 2 To sidsteRæk If Cells(ræk, 2) <> "" Then dato = Cells(ræk, 2) placerItabel dato End If Next ræk
datoSortering opbygFailProduct genererDiagram End Sub Private Sub placerItabel(dato) For ix = 0 To sidsteRæk - 1 If datoTab(ix) = "" Then datoTab(ix) = dato antalDatoer = antalDatoer + 1 Exit Sub Else If dato = datoTab(ix) Then Rem dato findes i forvejen Exit Sub End If End If Next ix End Sub Private Sub datoSortering() Dim dato As Date datoRæk = ddStartRæk
Rem placer datoer i Kol A For ix = 0 To sidsteRæk - 1 If datoTab(ix) <> "" Then dato = datoTab(ix) Cells(datoRæk, 1) = dato datoRæk = datoRæk + 1 Else Exit For End If Next ix
Rem Transponer datoer til overskrifter Range("B" & CStr(ddStartRæk)).Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False
Range("A" & CStr(ddStartRæk) & ":A" & CStr(datoRæk - 1)).Select Selection.ClearContents End Sub Private Sub opbygFailProduct() Dim part, dato As Date, fejl For ræk = 2 To sidsteRæk If Cells(ræk, 1) <> "" Then part = Cells(ræk, 1) dato = Cells(ræk, 2) fejl = Cells(ræk, 10) placerFejl ræk, part, dato, fejl Else Exit For End If Next ræk End Sub Private Sub placerFejl(pRæk, part, dato As Date, fejl) On Error GoTo fejl For ræk = ddStartRæk + 1 To 65000 If Cells(ræk, 1) = part Then kol = findDatoKol(dato) Cells(ræk, kol) = fejl Exit Sub Else If Cells(ræk, 1) = "" Then Cells(ræk, 1) = part kol = findDatoKol(dato) Cells(ræk, kol) = fejl sidsteDataRække = ræk Exit Sub End If End If Next ræk Exit Sub
fejl: MsgBox ("Fejl - kontakt udvikler") Stop End Sub Private Function findDatoKol(dato) For kol = 2 To antalDatoer + 1 If dato = Cells(ddStartRæk, kol) Then findDatoKol = kol Exit Function End If Next kol findDatoKol = 0 End Function Private Sub genererDiagram()
Rem Navngiv arket ActiveSheet.Name = diaNavn End Sub
Synes godt om
Ny brugerNybegynder
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.