29. juni 2005 - 12:11Der er
193 kommentarer og 1 løsning
Opdeling af txt-fil
Jeg har via et andet spørgsmål, fået hjælp til at indlæse en txt-fil via en makro-knap. Dette resulterer i at alt data står i en kolonne, dog godt nok hver række i hver sig celle. Dette vil jeg gerne have hjælp til at gøre, helst så det bliver gjort automatisk efter indlæsningen.
Et udsnit af data efter indlæsning er sådanne: ALARM 10.38:20 19-03-04
Total : 32336.49 Total A,B: 25869.48; 6467.01 SubTotal : 4.95 SubTotal A,B: 3.96; 0.99 Gnms. B volume: 25.03 10.38:36 19-03-04 END
Total : 32336.49 Total A,B: 25869.48; 6467.01 SubTotal : 0 SubTotal A,B: 0; 0 10.38:37 19-03-04 Recept Nr. 2 Bvol % 25 START
Målet med det hele er at der eventuelt skal kunne laves diagrammer over de enkelte værdigrupper.
1) Ser at summen av Total A + Total B = Tallet bak total på øverste linje. Ser ut til at det samme gjelder for Subtotal. Er det altid slik? Da holder det å skille ut A og B verdien for henholdsvis Total og Subtotal. De kan eventuelt summeres senere
2) Skal også Gnms. B volume benyttes, Er det evt. flere mengder eller volumer som benyttes enkelte ganger?
3) Hva med dato og klokkeslett? og Recept Nr.
4) Start og End forekommr i teksten. Er det noe som kan oversees, eller skal det benyttes til noe
Når jeg ser nærmere på dataene, kan det se ut som om det lønner seg å lese nedenfra? Er det slik at Start betyr ny respept? Og at Recept Nr og Dato klokkeslett kan brukes som overskrift på hver måleserie?
Hvis det også er slik at Total A og B = Forrige Total A og B pluss Subtotal A og B på målingen? Da kan man kansje nøyes med å lese subtotalene?
Nej, nej det er snarere fordi filen er bygget ulogisk op.
Der skal læses fra toppen af, men START og END står bare forkert efter min overbevisning. De burde havde stået før og ikke efter teksten.
Men følgende felter skal bruges, og det er heldigvis kun START, END og ALARM-områderne som skal bruges (jeg finder lige en alarm). Ved START skal Totalværdi, Total A og B, Recept Nr og Bvolværdi bruges. Ved END er det Totalværdi, Total A og B samt tidspunktet. Ved ALARM skal det hele bruges.
En ALARM ser sådanne ud:
Ojeblikkel. Bvol 22.69 ALARM 10.42:31 19-03-04
En baggrundsforklaring som måske kunen være nyttig. Filen er en autogenereret txt-fil, som viser forbruget i en malerkabine. De forskellige recepter, er forskellige blandinger. Total er mængden af den aktuelle blanding, som på dette tidspunkt er brugt. Det vil sige, at den løbende tæller op. Total A og B er mængderne af de forskellige blandingsmaterialer, forholdet skulle gerne svare til Bvol. ALARM er når der er sket et eller andet uventet.
Dette er uoverskueligt for den person som skal aflæse filen, så han kunne godt tænke sig, minimum, at vi kunne stille det op på en overskuelig måde, og måske også med nogle diagrammer.
Det ser ud til at det faktisk virker efter planen. Den fordeler næsten alt på forskellige kolonner, dog ikke hvor der står følgende "B:", "volume:" og diverse dato og tider.
Det er er jo sådan set udemærket, ihvert fald at den holder samme på tid og dato.
Jeg sender lige resultatet hjem. Der har jeg mulighed for at lægge det op på nettet, så kan du bedre se hvad der sker.
Det har du sgu gjort godt, men desværre tror jeg vi nu kommer til det rigtigt svære. At finde data, som skal bruges til diagrammer, for opbygningen er jo ikke ens fra gang til gang. Jeg mener her ikke hvordan det er sat op, men i hvilken række følge de forskellige handlinger sker. Min forsøgsfil starter f.eks. med en alarm, det skal vi nok ikke regne med, at den er der hver gang.
Public Sub OpneTextFilen() Workbooks.OpenText Filename:=sFolder & sTxtFile, Origin:=xlWindows, _ DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=True, _ Comma:=True, Space:=True, Other:=False 'TIPS Other:=True, OtherChar:=":" End Sub
Public Sub HeleReceptTilEnCelle() Columns("A:A").Select For Each c In Selection If c.Value = "Recept" Then c.Value = c.Value & " " & c.Offset(0, 1).Value & " " _ & c.Offset(0, 2).Value & " " & c.Offset(0, 3).Value _ & c.Offset(0, 4).Value & " " & c.Offset(0, 5).Value _ & c.Offset(0, 6).Value End If Next End Sub
Public Sub DataFraTekstFilTilMatrise() Dim i As Long Dim n As Long
For n = 1 To 3 vdB(n, 1) = n For i = 1 To 15 vdB(n, i + 1) = Range( _ Cells(lFørsteRad, 1), Cells(lFørsteRad, 1)).Offset( _ vRowColumnOffset(1)(i) - 1, vRowColumnOffset(2)(i) - 1) Next lFørsteRad = lFørsteRad + 22 Next End Sub
Public Sub DataTilRegneark() Dim i As Long Dim n As Long
Workbooks.Add For i = 1 To 15 Range(Cells(1, i), Cells(1, i)) = vEtikett(i) Next
For n = 1 To 3 For i = 1 To 15 Range(Cells(1 + n, i), Cells(n + 1, i)) = vdB(n, i) Next Next End Sub
Du skriver i din kommentar: for opbygningen er jo ikke ens fra gang til gang Dette trenger ikke være så vanskelig som det først ser ut til. Det må gjøres noen enkle tester, men mest sannsylig er det bare noen få varianter. 1) Man må finne antall serier. 2) Man må finne første celle i hver serie 3) Man må vite hvilken type serie som kommer. Det trenger ikke være noen umulig oppgave Når dataene er på plass er det enkelt å generere diagrammene
Undskylder med fik ikke tid til at lægge en fil op.
Resultatet af importeringen er lidt overraskende, men måske har du regnet med det. Den viser nemlig ingen af tallene, men kun betegnelserne, og en del af den sætte den til bogstav foran, f.eks. o.
Nu er det jo svært at vise rigtigt her på E!, men jeg prøver.
Batch nr oTotA oTotB oDato oKlokke Resept aDato aKlokke OjeblikkBvol nTotA nTotB SubA SubB GnmsBvol EndDato EndKlokke 1 A Total SubTotal Bvol START 2 A Total SubTotal Bvol START 3 A Total SubTotal Bvol START
Nej det gjorde jeg ikke, jeg gjorde det på filen, som den ser ud når den er færdigskrevet. Men det gør ingen forskel. Jeg kan nå at se, at filen bliver indlæst med det hele også værdier, men idet det bliver ændret layoutmæssigt, så forsvinder tallende.
Du må bruke teksten jeg limte inn til å begynne med, bare for en test. Da skal tallverdiene komme på riktig plass. Husk, først en blank linje, så første linje med data
Da tror jeg det eneste problemer vi står ovenfor er: å åpne din orginale tekstfil, slik at alle tallene som skal benyttes ligger i hver sin celle. ( hvert tall vi skal benytte må ha sin unike adresse)
Det er nok en forskjell på den tekstfila vi benyttet sist og de du skal bruke. At antall rader er forskjellige har ingen betydning ( tror jeg )
Det beste er om du manuelt kan se om du får åpent filen, slik at alle tall som skal benyttes, ligger alene i hver sin celle. Hvis du finner en måte å gjøre dette på, kan du spille inn en makro som vi kan benytte.
Den originale fil bliver ikke indlæst korrekt. Den ser sådan:
Batch nr oTotA oTotB oDato oKlokke Resept aDato aKlokke OjeblikkBvol nTotA nTotB SubA SubB GnmsBvol EndDato EndKlokke 1 A Total SubTotal Bvol START 2 A Total SubTotal Bvol START 3 A Total SubTotal Bvol START
det ser ut til at den tekstfila du sendt med er åpnet med makroen. Det fører til at den blir endret. Så jeg må desverre mase på deg en gang til :-) så hvis du kan sende filvedlegget med txt- endelsen så tror jeg vi kan ha det morro idag :-) jeg trenger ikke xls-filene mvh oyejo
jeg finner tekste av fredad.txt, men det tror jeg er teksten kopiert inn i mailen. jeg trenger den som et filvedlegg på grunn av kodingen foreksempel hvis det er spesiel koding for linjeskift.
en annnen ting. for meg ser det ut som teksten i fredag.txt er åpnet med makroen og så koperiert eller lagret i mailen.
Det blir feil fordi noen av de orginale tengene forsvinner fordi de i makroen er bekrevet som skilletegn.
txt.fila må ikke være åpnet av en exelfil, kun i notepad for at jeg skal finne ut av det.
Fredag.txt ER den originale fil og den er ikke blevet åbnet og gemt i andet end notepad, og den er vedhæftet som txt-fil. Men jeg prøver lige noget andet, en zip-fil måske.
Når jeg åpnet txt-fila som ble zippet, ble jeg positivt overrasket. Her var det ingen blanke linjer. Det gjorde jobben mye lettere. Nå håper jeg at alle txt-filene er like, ellers må det legges til litt mere kode. Det hele fungerer nå på min pc.
Det beste er om du fjerner all gammel kode fra dine moduler. BARE DISSE TO ØVERSTE LINJENE SKAL STÅ TILBAKE:
For s = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 If Cells(s, 1).Value = "Bvol" Then Rows(s - 4 & ":" & s + 1).Delete shift:=xlUp End If Next
Rows("1:15").Insert shift:=xlDown
For s = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 If Cells(s, 1).Value = "START" Or Cells(s, 1).Value = "END" Then Rows(s + 1 & ":" & s + 2).Insert shift:=xlDown End If Next
For s = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 If Cells(s, 1).Value = "ALARM" Then Cells(s, 1).Value = "ALARM!" Rows(s - 3 & ":" & s - 2).Delete shift:=xlUp End If Next
If Not Cells(Range("A" & Rows.Count).End(xlUp).Row, 1).Value = "END" Then Cells(Range("A" & Rows.Count).End(xlUp).Row, 1).Offset(9, 0).Value = "END" End If
s = 1 Do Until Cells(s, 1).Value = "END" s = s + 1 Loop Rows(1 & ":" & s - 16).Delete shift:=xlUp
Columns("A:A").Select lPostCounter = 0 For Each c In Selection If c.Value = "Recept" Then c.Offset(0, 1).Value = c.Offset(0, 1).Value & c.Offset(0, 2).Value End If If c.Value = "END" Then lPostCounter = lPostCounter + 1 c.Offset(0, 1).Value = lPostCounter End If Next
For n = 1 To lPostCounter For i = 1 To UBound(vRowColumnOffset(1), 1) vdB(n, i) = Cells(lStartRadPost, 1).Offset( _ vRowColumnOffset(1)(i), vRowColumnOffset(2)(i)) Next lStartRadPost = lStartRadPost + cRaderMellomHverSerie Next
Workbooks.Add For i = 1 To UBound(vEtikett()) Cells(1, i) = vEtikett(i) Next For n = 1 To lPostCounter For i = 1 To UBound(vRowColumnOffset(1), 1) Cells(n + 1, i) = vdB(n, i) Next Next Cells.HorizontalAlignment = xlCenter Cells.Columns.AutoFit
Range("H2:H" & lPostCounter + 1).Replace What:=".", Replacement:=":" Range("R2:R" & lPostCounter + 1).Replace What:=".", Replacement:=":" End Sub
Håper det også funger hos deg. Hvis det fugerer er det nå lett for deg å endre kolonneoverskrifer, du kan lett velge å ta bort noen kolonner med data og eventuelt legge til andre kolonner med data.
Okay, selve importeringen ser rigtigt ud, men det går helt galt når du begynder at vende data om. Jeg kan faktisk ikke lige se hverken hoved eller hale i det lige nu
Jeg sender lige de 2 filer til dig, så du for dig selv kan se resultatet. Jeg håber navngivningen siger sig selv, jeg har tilladt at gemme begge som Excel projektmapper.
i Hovedrutinen kan du markere de 3 nederste call setningen med en ' forran de blir da tolket som tekst og ikke utført. Da kan vi se på tekstfilen før den blir "rotet til" Slik skal det da se ut
Den siste End blir satt inn av koden for kontroll. Jeg ser på de filene du sendet meg, Jeg sender over en ny modul til deg slik at vi er sikre på at din kode er riktig.
For s = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 If Cells(s, 1).Value = "" Then Rows(s & ":" & s).Delete shift:=xlUp End If Next
For s = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 If Cells(s, 1).Value = "Bvol" Then Rows(s - 4 & ":" & s + 1).Delete shift:=xlUp End If Next
Rows("1:15").Insert shift:=xlDown
For s = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 If Cells(s, 1).Value = "START" Or Cells(s, 1).Value = "END" Then Rows(s + 1 & ":" & s + 2).Insert shift:=xlDown End If Next
For s = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 If Cells(s, 1).Value = "ALARM" Then Cells(s, 1).Value = "ALARM!" Rows(s - 3 & ":" & s - 2).Delete shift:=xlUp End If Next
If Not Cells(Range("A" & Rows.Count).End(xlUp).Row, 1).Value = "END" Then Cells(Range("A" & Rows.Count).End(xlUp).Row, 1).Offset(9, 0).Value = "END" End If
s = 1 Do Until Cells(s, 1).Value = "END" s = s + 1 Loop Rows(1 & ":" & s - 16).Delete shift:=xlUp
Columns("A:A").Select lPostCounter = 0 For Each c In Selection If c.Value = "Recept" Then c.Offset(0, 1).Value = c.Offset(0, 1).Value & c.Offset(0, 2).Value End If If c.Value = "END" Then lPostCounter = lPostCounter + 1 c.Offset(0, 1).Value = lPostCounter End If Next
har tatt en titt på god før kovnverteringfila du sendte. den eneste feilen er at det er for mange blanke rader. tror den nye koden du fikk, skal fikse det.
Nej, den nye koden fikser det ikke. Jeg kan se at originalfilen indeholder en fejl. På et tidspunkt står der þÿÿÿTotal i stedet for bare Total, er det noget der har betydning for din kode, jeg kan se at det kommer med ind, men derfor kan det jo godt ske, at det laver rav i det
Hov hov, det slog mig, jeg havde jo ændret antal linier fra 18 til 24. Så det ændrede jeg tiblage, og det hjalp vidst meget, så stop bare lige midlertidig, til jeg får den gennemtjekket om det er i orden.
Public Sub test() For s = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 If Cells(s, 1).Value = "" Then Rows(s & ":" & s).Delete shift:=xlUp End If Next
det er bare navn som jeg har satt til overskrifter Og hvad betyder iTot, iTotA, iTotB, og de sammen med med n foran. iTot er den totale som står i Start modulen nTot er den totalen som står i End modulen alle med a foran er Alarmdata, dette kan vi lett endre når vi har fått fjernet de blanke rader.
Yeps, nu har jeg ikke testet med testen.... hmm ;-P
Men jeg tror også at det eneste problem nu er opsætningen, bl.a. bliver ALARM og START/END blandet lidt sammen. For overblikkets skyld kunne jeg bl.a. godt tænke mig, at de blev adskidt, men måske er der andre ting også.
ser at jeg glemet End sub på slutten av Public sub test:
Public Sub test() For s = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 If Cells(s, 1).Value = "" Then Rows(s & ":" & s).Delete shift:=xlUp End If Next
Public Sub test() For s = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 If Cells(s, 1).Value = "" Then Rows(s & ":" & s).Delete shift:=xlUp End If Next End Sub
Jeg la test inn i excelfila du sendte meg, den fjernet alle blanke rader, Tror det bare er en liten bagatell før det hele fungerer
For så bare drop det, det gider vi sgu ikke kigge på. Det ser ikke ud til at have nogen effekt.
Tilgengæld, så vil jeg mene, at importeringen er færdig. Dog overvejer jeg lidt om vi skal have dato og tidspunkt ind for start også, men det skal jeg lige hører personen som skal bruge det om.
Det næste bliver så at prøve at lave et diagram automatisk, er du med på den også?
du skriver: Men jeg tror også at det eneste problem nu er opsætningen, bl.a. bliver ALARM og START/END blandet lidt sammen. For overblikkets skyld kunne jeg bl.a. godt tænke mig, at de blev adskidt, men måske er der andre ting også.
når vi er i stand til å fjerne alle blanke rader, kan vi med letthet endre oppsette slik du ønsker.
Måle må være at jeg kan vise deg, slik at du selv kan endre det slik du vil
De der tomme felter du snakker om, er det på importeringen før konverteringen? For ellers er der ingen tomme linie som ikke burde være der. Efter du har vendt data om, er der jo kun tomme felter, hvor der ikke er noget data, f.eks. ingen ALARM, ingen START eller ingen END, og det vil jo ske ind i mellem.
Ja, jeg får også en masse projektmapper. Den med knappen, den lige efter import og den efter konvertering. De 2 sidste, kan de ikke komme i samme projektmappe, men på hver sit regneark?
De tomme felter er bare luksus, de er pt. ikke nødvendige at fjerne, jeg tvivler på de vil bruge den til noget
Jeg sidder og prøver på den normale måde at lave et diagram, over dataen. Men det kniber sgu lidt. Jeg mener man burde kunne lave et kurvediagram ud fra en datakilde, på denne skulle man kunne sætte punkter ind ud fra en anden datakilde. Men det var måske kun i XP og 2003 man kan det.
Min ide til diagrammet var at den viset forbruget pr. recept over tid, og alarmerne skal så sættes ind som punkter på kurve, selvfølgelig ud fra deres rigtige tid, men det sidste drilelr mig lidt
prinsippe er slik: først har vi en variabel som heter : lStartRadPost. Det starter med at : lStartRadPost = 1 Celle ( lStartRadPost , 1 ) er celle A1 rad en kolonne 1
For å finne de riktige data benyttes :
vRowColumnOffset = Array( _ Array(15, 0, 1, 1, 5, 5, _ 'viser antall rader fra 8, 8, 7, _ Celle (lStartRadPost, A ) 9, 10, 10, _ 11, 12, 12, 13, _ 14, 14), _ Array(1, 2, 3, 4, 1, 5, _ viser antall kolonner 2, 1, 2, _ fra Celle (lStartRadPost, A ) 2, 3, 4, _ 2, 3, 4, 3, _ 1, 0))
slik blir de riktige data hentet. når data fra en rad er ferdig, får vi : lStartRadPost = lStartRadPost + 18 vi flytter 18 rader ned og forholdet mellom denne celle (19 , A ) og de data er det samme som forrige gang.
I prosedyren FraTekstfil til Matrise leses data fra tekstfilen til minnet i pc'en Etterpå kan gjerne txt-fila lukkes, det er ikke bruk for den.
så i prosedyren DataTilRegneark, leses data fra maskines minne og til excel.
Dette krever at filens oppbygning er den samme hele veien. Derfor fjernes først alle tomme rader. Så i neste omgang blir det fylt på med tomme rader slik at forholdet mellom startcelle og data blir riktig.
Så derfor, en ekstra tom rad vil ødelegge hele systemet :-)
Første spørgsmål/ønske: Jeg vil gerne have data åbnet i samme projektmappe med i hver sit regneark. Sådan at man ikke få flere filer åbnet end makroen og resultatet. F.eks. kune ark1 være importeringen af fredag og ark2 kunne være efter konverteringen.
En av de bedre sejrer, og så bare på grunn av ingen ting :-) tomme rader
jeg er litt usiker på hva du mener med prosjektmappe. Er det en excel-bok med flere ark? Det er ikke noe problem å organisere alle data i en excelbok med flere ark.
Men ett prinsipp bør du ikke fravike: excel-boken med knap og makrokode, bør ikke innehodle data. du kan lagre den hvor som helst, men ingen data i denne makro excel bok.
jeg skal lage litt kode men i det er ikke sikkert jeg rekker det før på mandag.
så i mellomtiden bør du tenke på hvilke data du trenger, gjerne teste litt selv.
overskriftene lages i vEtikett(), prøv deg fram , du gjør ingen skade. Hvis du for eksempel ikke vil ha telleren i kolonne A kan du bare ta bort "n" i vEtikett. Da må du samtidig ta bort tallet 15 første elemetet i vRadkollonneOffset den viser at tallet ligger 15 rader under startraden. så må du også fjerne det tilvsarende talle i Arrayet nedenfor som viser at det ligger en kolonne til høyre for kollonne A
Når du starter Excel på er der faktisk en projektmappe du åbner. Denne projektmappe kan så indeholder flere Regneark, deraf navner Ark1, Ark2, Ark3 osv. osv. Lyder til at I kalder dem for Excelbok...?
Og nej jeg vil heller ikke have data i projektmappen med makroen. Det der kommer ud af makroen må dog godt blive samlet.
Jeg har kigget lidt på både kode og diagrammer, men med det sidste, skal jeg lige hører brugeren hvad han gerne vil have. Det er jo ikke sikkert det er det samme som hvad jeg har tænkt mig ;-)
Så det lyder fint med at fortsætter vores kamp på mandag.
heisann lsskaarup ja da ønsker jeg deg god helg, så kan vi kjempe videre fra mandag ca kl 16 vi kommer til å nå over 100 meldinger ;-) kanskje vi kan gi dem ut som bok, "vores kamp" :-)
Jeps, det må da være et af de største/længeste spørgsmål ;-)
Jeg var faktisk ud for at snakke med brugeren om den konverterede oversigt, men han var ikke tilstede og kommer ikke før mandag, så der kan jeg først finde ud af om han vil have noget ændret.
Da har jeg puslet litt med vår lille program, tiden går fort når driver med dette Det har blitt endringer i declarasjonene, så jeg sender hele modulen De andre prosedyrene skal i prosedyremodulen: DataTilRegneark er endret, limer inn hele prosedyren, så kan du erstatte den gamel Så kommer en helt ny modul som laver diagrammet, du må lage et kall i hovedmodulen, det skal stå sist. Jeg vet jo ikke hvordan du egentlig vil ha det, men jeg tror du nå har fått så mangen eksempeler at du kan klare deg på egen hånd. ( et lite tips kan du jo selvsagt få :-) Det har vært en interesant oppagav, har faktisk løst noen problemer jeg hadde på en lignende oppgave som jeg benytter selv.
For i = 1 To UBound(vEtikett()) Cells(1, i) = vEtikett(i) Next For n = 1 To lPostCounter For i = 1 To UBound(vRowColumnOffset(1), 1) Cells(n + 1, i) = vdB(n, i) Next Next Cells.HorizontalAlignment = xlCenter Cells.Columns.AutoFit
Range("G2:G" & lPostCounter + 1).Select For Each c In Selection If c.Value = "" Then c.Value = "" Else dDato(2) = c.Value c.Value = Format(dDato(2), "dd.mmm.") End If Next
dDato(2) = 0
Range("Q2:Q" & lPostCounter + 1).Select For Each c In Selection If c.Value = "" Or Format(c.Value, "dd.mmm.") = Format(dDato(2), "dd.mmm.") Then c.Value = "" Else dDato(2) = c.Value c.Value = Format(dDato(2), "dd.mmm.") End If Next
With Charts.Add .Location Where:=xlLocationAsNewSheet .HasTitle = True .ChartType = xlColumnStacked .Move After:=Sheets(1) .Name = "Diagram" With .ChartTitle .AutoScaleFont = True With .Font .FontStyle = "Halvfet" .Size = 12 End With End With
Set c = .TextBoxes.Add(220#, 18#, 200#, 10#) With c .Text = Format(dDato(1), "dd. mmmm yyyy") '.Formula = "=Ark1!Q2" .HorizontalAlignment = xlCenter With .Font .Name = "Arial": .Size = 12: .Bold = False End With End With
With .Legend .Position = xlBottom: .Font.Size = 10 .Left = 330 End With
With .SeriesCollection(1) .Name = "=KonvData!R1C14" .Values = "=KonvData!R2C13:R" & r & "C13" .XValues = "=(KonvData!R2C17:R" & r & "C18)" End With
.SeriesCollection.NewSeries With .SeriesCollection(2) .Name = "=KonvData!R1C15" .Values = "=KonvData!R2C15:R" & r & "C15" .XValues = "=(KonvData!R2C17:R" & r & "C18)" End With
.SeriesCollection.NewSeries With .SeriesCollection(3) .Name = "=KonvData!R1C16" .Values = "=KonvData!R2C16:R" & r & "C16" .XValues = "=(KonvData!R2C5:R" & r & "C5)" .ChartType = xlLineMarkers .AxisGroup = 2 .ApplyDataLabels AutoText:=True, ShowValue:=True With .DataLabels .AutoScaleFont = True .Font.Size = 8 .NumberFormat = "0.00""%""" .Position = xlLabelPositionRight .Orientation = xlUpward End With End With
With .Axes(xlCategory, xlPrimary) .HasTitle = True With .AxisTitle .Characters.Text = "Tid og Dato" .Top = 400 .Left = 320 End With End With
.HasAxis(xlCategory, xlSecondary) = True With .Axes(xlCategory, xlSecondary) .HasTitle = True With .AxisTitle .Characters.Text = "Recept" .Top = 11 .Left = 336 With .Font .FontStyle = "Normal" .Size = 12 End With End With End With
With .Axes(xlValue, xlPrimary) .HasTitle = True .AxisTitle.Characters.Text = "Volum" With .TickLabels .NumberFormat = "0"" liter""": .Font.Size = 8 End With End With
With .Axes(xlValue, xlSecondary) .HasTitle = True .AxisTitle.Characters.Text = "Bvol%" With .TickLabels .NumberFormat = "0"" %""": .Font.Size = 8 End With End With .ChartArea.Select End With End Sub
Okay, jeg har ikke lige kopieret din nye kode ind.
Jeg fik i går aftens snakket med ham som skal bruge det. Han er tilfreds, men mangler lige dato og tidspunkt for START også, ellers ser det godt ud.
Så er det bare diagrammet, puha, nu ved jeg ikke om din kode allerede laver det, men det finder jeg jo nok ud af... ;-P
Men jeg har lidt problemer med bare at få lavet et diagram, som kan bruges. Har bare forsøgt på den tradionelle måde. Jeg kunne godt tænke mig, et diagram, som ud ad x-aksen har et tidsinterval, op ad y-aksen mængden, og måske et kurvediagram for hver recept, til sidst skal alarmerne markeres på kurven. Det var især et sidste som var det helt store problem.
Her kommer en liten endring av LagDiagram-prosedyren Husk at under de andre call setnigene i Hovedrutinen, skal det stå : Call LagDiagram
Denne prosedyren skal ligge i prosedyremodulen
Public Sub LagDiagram()
r = Range("R" & Rows.Count).End(xlUp).Row With Charts.Add .Location Where:=xlLocationAsNewSheet .HasTitle = True .ChartTitle.Characters.Text = _ "Finn meg i koden i LagDiagram(), der kan du endre meg :-)"
.ChartType = xlColumnStacked .Name = "Diagram" With .ChartTitle .AutoScaleFont = True With .Font .FontStyle = "Halvfet" .Size = 12 End With End With
Set c = .TextBoxes.Add(230#, 21#, 200#, 10#) With c .Text = Format(dDato(1), "dd. mmmm yyyy") .HorizontalAlignment = xlCenter With .Font .Name = "Arial": .Size = 12: .Bold = False End With End With
With .Legend .Position = xlBottom: .Font.Size = 10 .Left = 330 End With
With .SeriesCollection(1) .Name = "=KonvData!R1C14" .Values = "=KonvData!R2C14:R" & r & "C14" .XValues = "=(KonvData!R2C17:R" & r & "C18)" End With
.SeriesCollection.NewSeries With .SeriesCollection(2) .Name = "=KonvData!R1C15" .Values = "=KonvData!R2C15:R" & r & "C15" .XValues = "=(KonvData!R2C17:R" & r & "C18)" End With
.SeriesCollection.NewSeries With .SeriesCollection(3) .Name = "SubTot " .Values = "=KonvData!R2C13:R" & r & "C13" .XValues = "=(KonvData!R2C17:R" & r & "C18)" .ChartType = xlLineMarkers .ApplyDataLabels AutoText:=True, ShowValue:=True .MarkerBackgroundColorIndex = 1 'xlNone .MarkerForegroundColorIndex = 1 .MarkerStyle = xlTriangle ' xlNone .MarkerSize = 4 With .DataLabels .AutoScaleFont = True .Position = xlLabelPositionAbove End With With .Border .LineStyle = xlNone End With End With
.SeriesCollection.NewSeries With .SeriesCollection(4) .Name = "Alarm" .Values = "=KonvData!R2C9:R" & r & "C9" .XValues = "=(KonvData!R2C5:R" & r & "C5)" .ChartType = xlLineMarkers .AxisGroup = 2 .ApplyDataLabels AutoText:=True, ShowValue:=True .MarkerBackgroundColorIndex = 3 .MarkerForegroundColorIndex = 3 .MarkerStyle = xlX .MarkerSize = 5 With .DataLabels .AutoScaleFont = True .NumberFormat = "0.00""%""" .Position = xlLabelPositionAbove ' xlLabelPositionRight End With With .Border .LineStyle = xlNone End With End With
With .Axes(xlCategory, xlPrimary) .HasTitle = True With .AxisTitle .Characters.Text = "Tid og Dato" .Top = 400 .Left = 320 End With End With
.HasAxis(xlCategory, xlSecondary) = True With .Axes(xlCategory, xlSecondary) .HasTitle = True With .AxisTitle .Characters.Text = "Recept" .Top = 10 .Left = 333 With .Font .FontStyle = "Normal" '"Halvfet" .Size = 12 End With End With End With
With .Axes(xlValue, xlPrimary) .HasTitle = True .AxisTitle.Characters.Text = "Volum" With .TickLabels .NumberFormat = "0"" liter""": .Font.Size = 8 End With End With
With .Axes(xlValue, xlSecondary) .HasTitle = True .AxisTitle.Characters.Text = "Bvol%" With .TickLabels .NumberFormat = "0.0"" %""": .Font.Size = 8 End With End With .ChartArea.Select End With End Sub
Jeg har endnu ikke haft tid til at kigge på din kode og når det nok heller ikke i dag. Men jeg går på ferie fra i dag af, men jeg regner med at tage netop denne opgave med hjem, så jeg kan arbejde lidt videre med den, men tag højde for at jeg også trækker stikekt ud nogle dage, hvis du forstår ;-)
'************************************************************* Hei lsskaarup, er ferien snart slutt :-)
Har jobbet litt med din kodesnutt. Sender over helt ny kode, så du bør slette den gamle koden først. Først kommer kode for deklarasjonsmodul, hovedmodul og til siste Prosedyremodulen.
Public n As Long, i As Long, s As Long, r As Long Public c As Object
Public sFolder As String Public sTxtFile As String Public vArkNavn() As Variant Public sTittel As String Public dDato As Date
Public lStartRadPost As Long Public lRaderMellomHverPost As Long Public lPostCounter As Long Public vRowColOffst() As Variant Public sControl As String
Public wb As Workbook Public ws As Worksheet Public chrt As Chart Public rng As Range
Public vEtikett() As Variant Public vdB() As Variant
Public vTmp() As Variant Public lFLR() As Long Public vDTF() As Variant Public vNFA() As Variant Public vBorder() As Variant Public vCC() As Variant Public vYXKol() As Variant
Public vSerieProp() As Variant Public vAxProp() As Variant
Set wb = ActiveWorkbook If sControl = "OK" Then wb.Sheets(1).Name = vArkNavn(1)
End Sub
Public Sub DataFraTekstFilTilMatrise()
ReDim vdB(lPostCounter, UBound(vRowColOffst(1), 1)) With wb.Sheets(vArkNavn(1))
For n = 1 To lPostCounter For i = 1 To UBound(vRowColOffst(1), 1) vdB(n, i) = .Cells(lStartRadPost, 1).Offset( _ vRowColOffst(1)(i), vRowColOffst(2)(i)) Next lStartRadPost = lStartRadPost + lRaderMellomHverPost Next
End With End Sub
Public Sub DataTilRegneark()
Set ws = wb.Worksheets.Add With ws .Name = vArkNavn(2) .Cells(2, 1).Resize(, UBound(vEtikett, 1)) = vEtikett() .Cells(3, 1).Resize(UBound(vdB, 1), UBound(vdB, 2)) = vdB() r = Cells(Rows.Count, Cells(3, Columns.Count).End(xlToLeft).Column).End(xlUp).Row
End With End Sub
Public Sub OrdneTxtFil()
lPostCounter = 0 With wb.Sheets(vArkNavn(1))
For n = 1 To 3 For r = .Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 If n = 1 And .Cells(r, 1).Value = "" Then .Cells(r, 1).EntireRow.Delete ElseIf n = 2 And .Cells(r, 1).Value = "Bvol" Then .Rows(r - 4 & ":" & r + 1).Delete ElseIf n = 3 And .Cells(r, 1).Value = "END" Then If Not .Cells(r, 1).Offset(9, 0).Value = "ALARM" Then .Rows(r + 8 & ":" & r + 9).Insert End If .Rows(r + 1 & ":" & r + 2).Insert lPostCounter = lPostCounter + 1 s = r End If Next Next
Select Case s Case 7 .Rows("1:9").Insert Case 9 .Rows("1:7").Insert Case 14 .Rows("8:9").Insert Case Else sControl = "FEIL": s = 1 End Select
.Cells(19, 1).Select If sControl = "OK" Then r = -2 For n = 1 To lPostCounter r = r + lRaderMellomHverPost If .Cells(r, 1).Value = "END" Then .Cells(r, 2).Value = n Else sControl = "FEIL": s = n Exit For End If Next lPostCounter = lPostCounter + 1 End If
End With
If sControl = "FEIL" Then Call LukkOrdnetOpneOrginalTxtFil
With wb.Sheets(1) r = .Cells(Rows.Count, 1).End(xlUp).Row n = 0: i = 1 For Each c In .Cells(1, 1).Resize(r) If Left(c.Text, 3) = "END" Then n = n + 1 If n = s - 1 Then i = c.Row If n = s Then r = c.Row: Exit For End If Next Range(.Cells(i, 1), .Cells(r, 6)).Select End With
MsgBox "Programmet kan ikke tolke Tekstfila" & Chr(10) _ & "Det første område med problemer er merket" & Chr(10) _ & "Prøv å rette opp avviket, lagre så fila som teksfil " & Chr(10) _ & "Prøv så på nytt " End If End Sub
Public Sub DataTilOvreRad() With ws If .Cells(3, 2).Value = "" And .Cells(3, 12).Value = .Cells(4, 2).Value Then For n = 2 To 4 Set c = .Cells(3, n) c.Value = c.Offset(0, 10).Value - c.Offset(0, 13).Value Next
vTmp = Array(5, 7, 8) For n = 1 To 3 Set c = .Cells(3, vTmp(n)) c.Value = c.Offset(1, 0).Value Next
With [B3:E3 , G3:H3] .Font.ColorIndex = 16 .Font.Italic = True End With End If End With End Sub
Public Sub FormaterKolonnerMedDatoTid() With ws '*** ERSTATTER UGYLDIGE TEGN I KOLONNER MED DATO OG TID For n = 1 To UBound(vDTF(), 1) For i = 1 To UBound(vDTF(n)(1), 1) Range(.Cells(3, vDTF(n)(1)(i)), .Cells(r + 1, vDTF(n)(1)(i))).Replace _ What:=vDTF(n)(2)(1), Replacement:=vDTF(n)(2)(2) Next Next
'*** TVANGSFORMAT AV VANSKELIG DATO, TAR OGSÅ BORT LIKE DATOER For n = 1 To UBound(vDTF(1)(1), 1) s = 1 For Each c In Range(.Cells(3, vDTF(1)(1)(n)), .Cells(r + 1, vDTF(1)(1)(n))) c.Value = Format(c.Value, "mm.dd.yyyy") If Not c.Value = "" Then c.Value = CDate(c.Value) If Not c.Row = r + 1 And (c.Value = c.Offset(-s, 0).Value Or c.Value = "") Then c.Value = "": s = s + 1 Else: s = 1 End If Next Next dDato = .Cells(3, vDTF(1)(1)(UBound(vDTF(1)(1), 1))).Value End With End Sub
Public Sub KalkulerCelleVerdier() With ws .Cells(1, 1).Value = sTittel & " " & Format(dDato, "d. mmmm yyyy") n = 0 ' FINNER ANTALL RESEPTER For Each c In Range(.Cells(3, 7), .Cells(r, 7)) If Not (c.Value = c.Offset(-1, 0).Value) Then n = n + 1 Next ReDim lFLR(n, 2)
n = 0 ' FINNER START OG SLUTT RAD FOR HVER RESEPT For Each c In Range(.Cells(3, 7), .Cells(r, 7)) If Not c.Value = c.Offset(-1, 0).Value Then n = n + 1 lFLR(n, 1) = c.Row End If If Not c.Value = c.Offset(1, 0).Value Or c.Row = r Then lFLR(n, 2) = c.Row End If Next
' TO ALTERNATIVER FOR KALKULASJON AV TOT, SUB A OG SUB B-PRODUKSJON ' BENYTT IKKE BEGGE ALT. TIL SAMME TID.
' ALTERNATIV 1: BENYTTER TOT-VERIDENE I TELLEVERKET ( ANBEFALER IKKE DENNE ) ' For n = 1 To UBound(lFLR(), 1) ' For i = 0 To 2 ' .Cells(lFLR(n, 1), 24 + i).Value = _ ' .Cells(lFLR(n, 2), 12 + i).Value - .Cells(lFLR(n, 1), 2 + i).Value ' Next ' Next
'ALTERNATIV 2: SUMMERER SUBTOT SUB A OG SUB B FOR HVER RESEPT. For n = 1 To UBound(lFLR(), 1) Set rng = Range(.Cells(lFLR(n, 1), 15), .Cells(lFLR(n, 2), 15)) For i = 0 To 2 .Cells(lFLR(n, 1), 24 + i).Value = _ Application.WorksheetFunction.Sum(rng.Offset(, i)) Next Next
'RESEPT NR. OG TOT-PRODUKSJON FOR RESEPTEN For Each c In Range(.Cells(3, 21), .Cells(r, 21)) If Not c.Offset(0, -14).Value = "" Then c.Value = "Nr. " & c.Offset(0, -14).Value & " - " _ & Format(c.Offset(0, 3).Value, "0") & " liter" End If Next
'TIDSFORBRUK I MINUTTER MELLOM HVER PRODUKSJON For Each c In Range(.Cells(3, 22), .Cells(r, 22)) If c.Offset(0, -16).Value = "" Or c.Offset(0, -7).Value < 1 _ Or c.Offset(0, -16).Value > c.Offset(0, -2).Value Then c.Value = "" Else c.Formula = _ (c.Offset(0, -2).Value - c.Offset(0, -16).Value) * 24 * 60 End If Next
'PRODUKSJON I LITER PR. TIME For Each c In Range(.Cells(3, 23), .Cells(r, 23)) If Not c.Offset(0, -1).Value = "" Then c.Formula = c.Offset(0, -8).Value / _ (c.Offset(0, -3).Value - c.Offset(0, -17).Value) / 24 End If Next
'*** NUMBERFORMAT OG ALIGN AV KOLONNER For n = 1 To UBound(vNFA(1), 1) For i = 1 To UBound(vNFA(1)(n), 1) With Range(.Cells(3, vNFA(1)(n)(i)), .Cells(r + 1, vNFA(2)(n)(i))) .NumberFormat = vNFA(3)(n) .Cells.HorizontalAlignment = vNFA(4)(n) End With Next Next
.Rows(r + 1 & ":" & r + 3).Insert
'*** FJERNER OVERFLØDIG DATA, MERKER OMRÅDET MED GRÅ FARGE For n = 1 To UBound(lFLR(), 1) If Not lFLR(n, 1) = lFLR(n, 2) Then Set rng = Range(.Cells(lFLR(n, 1) + 1, 1), .Cells(lFLR(n, 2), 1)) For i = 1 To UBound(vCC(1), 1) With rng.Offset(vCC(1)(i), vCC(2)(i)).Resize(, vCC(3)(i)) .ClearContents .Interior.ColorIndex = 15 End With Next End If Next
'*** HORISONTALE KANTLINJER For Each c In Range(.Cells(3, 7), .Cells(r + 1, 7)) If Not c.Value = "" Or c.Row = r + 1 Then .Cells(c.Row, 1).Resize(, UBound(vEtikett, 1)) _ .Borders(xlEdgeTop).LineStyle = xlContinuous End If Next
'*** VERTIKALE KANTLINJER With Range(.Cells(2, 1), .Cells(r, UBound(vEtikett, 1))) For n = 1 To UBound(vBorder(), 1) .Borders(vBorder(n)).LineStyle = xlContinuous Next End With
.Cells.Columns.AutoFit .Cells(2, 1).Select End With End Sub
Public Sub LagDiagram()
'*** TESTER OM DET HAR VÆRT ALARM s = 0 For Each c In Range(ws.Cells(3, 11), ws.Cells(r, 11)) If Not c.Value = "" Then s = 1 Next
'*** HVIS IKKE ALARM, MÅ EGENSKAP TIL DATASERIE ENDRES If s = 0 Then vSerieProp(4)(4) = 0: vSerieProp(8)(4) = 0
If Not vSerieProp(4)(n) = 0 Then .Border.ColorIndex = vSerieProp(4)(n) .Border.LineStyle = vSerieProp(5)(n) .MarkerBackgroundColorIndex = vSerieProp(4)(n) .MarkerForegroundColorIndex = vSerieProp(4)(n) .MarkerSize = vSerieProp(6)(n) .MarkerStyle = vSerieProp(7)(n) End If
If Not vSerieProp(8)(n) = 0 Then .ApplyDataLabels .DataLabels.Position = xlLabelPositionAbove .DataLabels.NumberFormat = vSerieProp(8)(n) End If End With Next
.HasAxis(xlCategory, xlSecondary) = True For n = xlCategory To xlValue For i = xlPrimary To xlSecondary With .Axes(n, i) .HasTitle = True .AxisTitle.Characters.Text = vAxProp(n)(i) .TickLabels.NumberFormat = vAxProp(n)(i + 2) .TickLabels.Font.Size = vAxProp(n)(5) End With Next Next .ChartArea.Select End With End Sub
Her er det veldig mye som kan gå galt. Det som mest sannsynlig vil skape problemer er å få ordnet tekstfilen korrekt. Her lagt inn en kontrollrutien som skal gjøre feilrettingen lettere.
Er også bange for formateringen av dato. Den kan variere fra operativsystem til operativsystem. Dato formatet kan også fungere for enkelte datoer, men feile på andre. Det blir spennende å se.
Hvis vi er heldige har vi kommet halveis :-) Dette er den siste dagen min forran pc-en på en stund, 2-3 uker, så LYKKE TIL.
Heisann! Tror jeg ser feilen. Nest nederste linje 25.04 istedet for et tall, % tror den det er en dato benytter du samme PC som forrigen gang? hvilken verjson av excle benytter du? Jeg skal ta en titt på problemet i kveld.
hvis du endrer talle 25.04 til 25.13 da vil den ikke tro der er en dato. hvis du kunne gjøre det og så lagre txt-fila. hadde vi fått sjekket ut om problemet ligger der
Prøvede at ændre til 25.13, så fejlede den ikke i så stort et område, så prøvede jeg også at ændre tallet der (25.03), men det har ikke hjulpet. Prøver lige at indsætte din sidste kodestump.
Da har jeg prøvd koden på min pc hjemme. Jeg fikk da de samme problemer som de du har. Fant også at en annen feil. Bytt ut den første linjen med den nedenfor (sFolder)
Hvis du i tillegg setter inn de to prosedyrenen nednfor, kan det kanskje begynne å skje ting
sFolder = "c:/temp/" ' slik er det nå sFolder = "C:\temp\" ' slik bør det være
Ojeblikkel. Bvol 21.99 ALARM 10.38:20 19-03-04 Total : 32336.49 Total A B: 25869.48 6467,01 SubTotal : 4.95 SubTotal A B: 3.96 0,99 Gnms. B volume: 25.13 10.38:36 19-03-04 END
Kan du sende txt-filen som skal åpnes til meg? Så kan jeg teste her hos meg, Hvis jeg lykkes, kan jeg sende tilbake både excel bok med kode og excelbok med data
Er litt usikker på hvordan vi skal fortsette. (det blir ikke før mandag) Sender deg tekstfilen "test.txt" og en excelbok som viser hvordan resultatet kan bli.
for meg ser det ut til at : de txt-filene vi har problemer med har alle data i kolonne A. tror vi har mistet noen skilletegn på veien
Hmm, det er da ikke utænkeligt. Jeg sender dig derfor filen, som jeg har diskette, og det ved jeg er originalen, den er aldrig blevet åbnet i andet end Notepad.
Wow, jeg skal lige gennemskue tallene i diagrammet, men det ligner præcist, sådan noget jeg havde forestillet mig. Har du lavet det via makro-knappen eller er det lidt manuelt arbejde?
kan du prøve å sende import.xls en gang til? Når jeg prøver å lagre den fra hotmail får jeg feilmeldig. Har prøvd å laste ned filen flere ganger, men det er mislykket
Heisann! Eksperten har vært nede, er det vi som har for mangen innlegg ;-) ca. 150 tror jeg.
Tror endelig jeg har funnet svaret: Detter er deler av fredag.txt som du sendt meg for et par dager siden: Ojeblikkel. Bvol 21.99 ALARM 10.38:20 19-03-04
Total : 32336.49 Total A,B: 25869.48; 6467.01 SubTotal : 4.95 SubTotal A,B: 3.96; 0.99 Gnms. B volume: 25.03 10.38:36 19-03-04 END
Total : 32336.49 Total A,B: 25869.48; 6467.01 SubTotal : 0 SubTotal A,B: 0; 0 10.38:37 19-03-04 Recept Nr. 2 Bvol % 25 START Den er det ikke noe problem med.
Dette er deler av fredag.txt som du sendte meg i går: Ojeblikkel. Bvol 21.99 ALARM 10.38:20 19-03-04
Total : 32336.49 Total A,B: 25869.48; 6467.01 SubTotal : 4.95 SubTotal A,B: 3.96; 0.99 Gnms. B volume: 25.03 10.38:36 19-03-04 END
Total : 32336.49 Total A,B: 25869.48; 6467.01 SubTotal : 0 SubTotal A,B: 0; 0 10.38:37 19-03-04 Recept Nr. 2 Bvol % 25 START denne feiler! Hva har skjedd? Hvis man ser på klokkeslettet, skal det være samme filen! men det har kommet noen ekstra linjeskift i den siste filen.
Det er derfor den feiler, tallene står ikke der de skal stå. Så hvis du benytter orginal txt-fil skal programmet ditt fugerere.
Hvis du legger inn 3 ekstra linjer på slutten av hovedrutinen, får du mere fart og diagrammet kan bli letter å lese, det kommer an på din skjerm legger inn alle de siste linjene er det lettere å kopiere inn.
PRøver jeg at indlæse "Kopiaffredagoriginal.txt", så får jeg en anden fejl. Så kommer den der fejlmeddelelser, som du har lagt ind, og den markere alt ned til først END
du har rett, det skjer noe med txt-filen den versjoen av "Kopiaffredagoriginal.txt", som jeg lager som txt-fil direkte fra Hotmail er riktig.
Men når jeg fra hotmail sender din mail til min firma e-post og lagrer "Kopiaffredagoriginal.txt", som vedlegg, ER DEN ENDRET ! DET ER KOMMET TIL NOEN EKSTRA LINJESKIFT.
DET KAN JO OGSÅ VÆRE FLERE ENDRIGER SOM IKKE ER SÅ LETTE Å SE
Ja feilen her, er at en linje kommer over to linjer. denne filen går det ikke å benytte lengre.
hvis vi skal videre må du finne en txt-fil som ikke har disse linjeskift. du kan åpne filen i notepad for å sjekke dette.
å zippe kan være en mulighet. hvis den skal sendes. hvis den sendes til en hotmail-adresse kan den sendes som en vanlig txt-fil MEN HAR DEN DISSE LINJESKIFT, ER DET INGEN VITS I Å SENDE, DA ER DEN ØDELAGT.
HVIS DU HAR EN TXT-FIL UTEN EKSTRA LINJER, SOM FEILER PÅ ET ANNET FELT. SE OM DET HJELPER Å ÅPNE I NOTEPAD, SÅ KAN DU :
Hvis jeg tager en, hvor det ser korrekt ud, så laver den fejl i FormaterKolonnerMedDatoTid(), og helt præcist c.Value = CDate(c.Value).
Men derudover, så her filen noget jeg ikke kan huske om vi har snakket om. I én af de sidste linier, kommer der nemlig nogle mærkelige tegn, såsom þÿÿÿ.
du skriver: I én af de sidste linier, kommer der nemlig nogle mærkelige tegn, såsom þÿÿÿ. Tror ikke det skal skape noe problem.
Det som gjør det vanskelig er at din import.xls fungerer utmerket her. Jeg skal ta den med hjem i dag å se om den også kjører under win2000
Hvis du kunne sende den txt-filer som gir feilmelding ved c.Value = CDate(c.Value). kunne jeg også teste ditt program mot denne tekstfil på win2000 Det er datoformatet som gir problemer. jeg hadde win2000 på kontoret før, hadde noe kode som fugerte utmerket. når jeg skiftet til xp- måtte jeg bruke mange timer på å rette i koden.
det under meg også litt at du kunne åpen txt-filer korrekt den Kommentar: lsskaarup 12/07-2005 09:06:29
da har jeg testet din import.xls hjemme på min windos 2000 pc med excel 2000. Den fungerer helt utmerket. Diagrammet kommer opp slik det skal.
Det er det som gjør det så vanskelig, jeg har ingen feil å ta fatt i. Den feilen som du nå beskriver, hadde også jeg på min hjemme-pc før jeg endret opnetxt-fil prosedyren slik at den inneholdt: DecimalSeparator:=".", Men din import.xls hadde denn oppdateringen. Kan ikke forstå annet ennn at våre pc-er tolker datoformatene forskjellig.
vi kan jo prøve å endre denn linjen: c.Value = Format(c.Value, "mm.dd.yyyy") til c.Value = Format(c.Value, "mm-dd-yyyy")
da skulle det bli slik:
Public Sub FormaterKolonnerMedDatoTid() With ws '*** ERSTATTER UGYLDIGE TEGN I KOLONNER MED DATO OG TID For n = 1 To UBound(vDTF(), 1) For i = 1 To UBound(vDTF(n)(1), 1) Range(.Cells(3, vDTF(n)(1)(i)), .Cells(r + 1, vDTF(n)(1)(i))).Replace _ What:=vDTF(n)(2)(1), Replacement:=vDTF(n)(2)(2) Next Next
'*** TVANGSFORMAT AV VANSKELIG DATO, TAR OGSÅ BORT LIKE DATOER For n = 1 To UBound(vDTF(1)(1), 1) s = 1 For Each c In Range(.Cells(3, vDTF(1)(1)(n)), .Cells(r + 1, vDTF(1)(1)(n))) c.Value = Format(c.Value, "mm-dd-yyyy") If Not c.Value = "" Then c.Value = CDate(c.Value) If Not c.Row = r + 1 And (c.Value = c.Offset(-s, 0).Value Or c.Value = "") Then c.Value = "": s = s + 1 Else: s = 1 End If Next Next dDato = .Cells(3, vDTF(1)(1)(UBound(vDTF(1)(1), 1))).Value End With End Sub
i tillegg til : c.Value = Format(c.Value, "mm-dd-yyyy") kan du også prøve denne: c.Value = Format(c.Value, "dd-mm-yyyy") det kan ogås være flere varianter
Uhaaaaaaa, jeg ændrede datå til formatet "mm-dd-yyyy", og så virkede det. HAr så også ændret det til "dd-mm-yyyy", og det ser også ud til at virke. Nu skal jeg lige bruge lidt tid på at se om det vises rigtigt, og prøve at forklare brugeren hvordan diagrammet skal forstås.
Uhaaaaaaa da er alt slitet glemt :-) Og man skal ikke glemme, man lærer utrolig mye på denne måten. i dansk datoformat må man benytte - og ikke . mellom dager,mnd og år. i norsk format kan vi benytte begge deler.
Okay, skriver I også månederne først, siden mm kom først.
Jeg har dog nogle små ting, som jeg godt kunne tænke mig lige at hører om. Kan man gøre et eller andet, så de ikke kan komme til at overskrive original filen fra malerkabinen. Hver gang Excel lukkes, siger den jo at filen er blevet ændret og spørger om man vil gemme den. Og du kender sikkert brugere, på et eller andet tidspunkt, kommer de til at overskrive den, og så virker det jo ikke længere, og netop på det tidspunkt, skal de have lavet en kopi.
Okay, skriver I også månederne først, siden mm kom først. Nei vi skriver opprinnelig dd.mm.åååå men fra nå av dd-mm-åååå ;-)
overskrive original filen fra malerkabinen skal tenke ut noe her, det bør ikke være noe problem
Bl.a. tallet 32332 (32331,54) under iTot, disse data eksisterer ikke, men programmet regner seg tilbake, det vet eTot og produksjon, så da kan man lett regne tilbake PS! Før dette skjer, blir det testet om det er samme respept, ser at eTot på første måling er det samme som iTot på neste måling.
den regner ut tidsintervallet mellom to måinger og totalproduksjon er kjent Dettte er med eventuelle pauser, men det gir et godt bilde. Hvis du ser nøye på data, kan det se ut som kapasiteten på sprøyten er for liten. Det er ofte høy produksjon før alarmen går. Sprøyteren ser ut til å være arbeidssom, selv om alarmen går ofte, holder han produksjonen oppe ... slik ser det ut for meg ;-)
Hov, jeg udtrykte mig måske ikke tydeligt nok. Original filen må IKKE kunne bliver overskrevet.
Hvilke tal bruger den så for at komme frem til iTot, for den her jeg ikke lige kunnet gennemskue?
Jeg forstår stadig ikke den med liter/time. F.eks. de 108 l/time, hvad er det et udtryk for, og hvilke tal bruger den for at komme frem til resultatet.
Men jeg har vendt diagrammet med ham, der primært skal bruge det, og han er tilfreds. Han vil dog også gerne vil have en entydig forklaring på l/time ;-)
Hov, jeg udtrykte mig måske ikke tydeligt nok. Original filen må IKKE kunne bliver overskrevet. Det var jeg som var uklar, jeg skjønte hva du mente men uttrykte meg klossete.
Normalt slik jeg forstår det. iTot er hva "telleverket" står på før produksjon Hvis man tar iTot + SubT får man nTot. Som er "telleverket" etter produksjon. når første iTot mangler, er det bare å renge tilbake nTot - SubT.
hvis du merker ut denne koden som kommentar, er det lettere å se.
'*** FJERNER OVERFLØDIG DATA, MERKER OMRÅDET MED GRÅ FARGE For n = 1 To UBound(lFLR(), 1) If Not lFLR(n, 1) = lFLR(n, 2) Then Set rng = Range(.Cells(lFLR(n, 1) + 1, 1), .Cells(lFLR(n, 2), 1)) For i = 1 To UBound(vCC(1), 1) With rng.Offset(vCC(1)(i), vCC(2)(i)).Resize(, vCC(3)(i)) .ClearContents .Interior.ColorIndex = 15 End With Next End If Next
Normalt er det nok å vite hva "telleverket" står på før man starter på resepten. den første iTot. og å vite hva telleverket står på etter siste produksjon for samme resepten. Alle de andre tall vil bare virke forstyrrende. ( det kan bli for mye tall) derfor er de tatt bort.
liter/ time : her har jeg tatt en råtjanse :-), har antatt at SubT er totalt volum i liter som er sprøytet. foreksempel:
6,73 liter i celle O4. Så blir tiden mellom iTid ( 10:38) og eTid (10:42) beregnet. Da kan jeg regne ut i gjennomsnitt hvor stor produksjoen er. Her er målet liter / time et greit mål. I dette estimatet blir også evt. pauser inkludert. noe annet er ikke mulig. Men det er likevel et meget godt verktøy når man skal gjøre anlalyser, mener jeg
Ellers så er koden delt opp i små moduler. jeg vil anbefale at du merker ut call setniger slik at bare deler av koden kjøres, da får du en god forståelse av hva som skjer.
en siste liten kommentar. når iTot og noen andre verdier blir berenget, er skrften grå og i kursiv, slik at man lett skal se at dette er tall som er beregnet.
Okay, nu tror jeg, jeg er helt med. For en sikkerhedsskyld så bliver størrelsen på værdierne på akserne ændret dynanisk. F.eks. hvis der kommer en værdi for aBvol%, som er lavere end 19%, så udvider aksen sig vel bare?
min forklaring på liter / time var kanskje ikke så god, men... det blir det samme som når man kjører bil, man leser farten i km / time på sprøyta blir produksjonsfarten liter / time
Din forklaring på liter / time var helt fin. Jeg tror også det er noget som brugeren kan forstå. Jeg skal bare have fundet en løsning, så de ikke får overskrevet den originale fil, eventuelt forklaret i tydelige vendninger, hvordan de skal undgå det.
Angående problermer med overskriving av orgianlfil. Når excel har åpnet txt-filen og lagt til diagrammet, er det ikke lengre en txt-fil. Den spør om du vil endre txt-filen, men selv om man svarer ja, blir ikke orginalfilen overskrevet.
Men hvis du likevel vil sikre at du har orgianldata, kan du benytte denne. Den krever MS office 2000 eller senere.
Public Sub Backup() '*********************************************************
' Denne krever MS Office 2000 eller seneren versjoner ' Tools-> References.. det skal være krysset av for ' Microsoft Scripting Runtime ' Hvis den ikke ses under Refernces, kan man se i : ' C:\WINNT\System32\ ' filens navn : Scrrun.dll
' Denne sub sjekkker om mappen med txt-filen har en subfolder ' som heter Backup. Hvis ikke blir den opprettet.
' DET ER VIKTIG AT ORGINALFILER IKKE BLIR LAGT I DENNE ' BACKUP-FOLDER MANUELT. FOR DA BLIR DE OVERSKREVET
Set fso = CreateObject("Scripting.FileSystemObject") Set fsoFld = fso.GetFolder(sFolder)
If Not fso.FolderExists(sFolder & "Backup") Then fso.CreateFolder (sFolder & "Backup") End If
Set fsoFil = fsoFld.Files(sTxtFile) fsoFil.Copy (sFolder & "Backup\")
Set fsoFld = fso.GetFolder(sFolder & "Backup\") Set fsoFil = fsoFld.Files(sTxtFile)
n = 1 Do While fso.FileExists( _ fsoFld & "\" & Left( _ fsoFil.Name, Len(fsoFil.Name) - 4) & "_nr" & n & ".txt") n = n + 1 Loop fsoFil.Name = Left( _ fsoFil.Name, Len(fsoFil.Name) - 4) & "_nr" & n & ".txt"
Okay, her snakket med personen som skal bruge det, og han er faktisk ligeglad, så jeg stopper bare her. Her altså ikke indtastet det sidste du lavede, men rigtigt mange tak for hjælpen.
ja da blir dette innlegg nr. 194 ikke dårlig :-) .. det blir nesten litt vemodig å avlutte spørsmålet. har faktisk lært mye på dette prosjektet!
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.