Just nu i M3-nätverket
Gå till innehåll

rakiii

Medlem
  • Antal inlägg

    29
  • Gick med

  • Senaste besök

  1. Det kommer göras ofta så tanken är att det ska vara automatiserat. Har testat mig fram och tror jag lyckades, Inte så snyggt men den gör vad jag vill: Nu behöver jag hjälp med att köra en Split(strLine, ";") och få informationen på ett blad i arbetsboken. Hur kan jag göra det? Private Sub ReadFile(strFile As String) Dim FSO As FileSystemObject Dim FSOFile As File Dim FSOStream As TextStream Dim strLine As String Dim strPath As String Dim strOutput As String Dim strExcel() As String Dim regEx As New RegExp Dim strPattern As String Dim strReplacement As String strPattern = "\s+" strReplacement = " " With regEx .Global = True .MultiLine = True .IgnoreCase = False .pattern = strPattern End With strPath = ThisWorkbook.Path strOutput = "" Set FSO = New FileSystemObject Set FSOFile = FSO.GetFile(strPath & "\" & strFile) Set FSOStream = FSOFile.OpenAsTextStream(ForReading, TristateUseDefault) Do While Not FSOStream.AtEndOfStream strLine = "" strLine = regEx.Replace(FSOStream.ReadLine, strReplacement) strLine = Replace(strLine, """ """, "") strLine = Replace(strLine, """""""""", ";") strLine = Replace(strLine, """""", ";") strLine = Replace(strLine, """", "") 'strLine = Left(strLine, Len(strLine) - 1) strOutput = strOutput & vbNewLine & strLine Loop FSOStream.Close Set FSOFile = Nothing Set FSOStream = Nothing Set FSO = Nothing Debug.Print (strOutput) End Sub
  2. Jag har CSV fil som är separerad med dubbla "" Ex. "Namn" "Efternamn" "Telefon" "Epost" Det jag vill göra är att importera denna till Excel med hjälp av VBA. Jag ser svårigheter eftersom inte filen innehåller någon standard separator (komma, kolon etc.). Jag har försökt med får det inte till att fungera. Går det att lösa?
  3. Jag använder idag följande kod för att hämta data från Access in i en arbetsbok i Excel. Tyvärr saknar jag möjligheten att kunna kontrollera resultatet. Sub CmbExport() ADOExport "db.mdb", "SELECT namn, efternamn FROM tabell", "Resultatblad", 2 End Sub Private Sub ADOExport(strDb As String, strSql As String, strSheet As String, intStart As Integer) Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim lngX As Long Application.ScreenUpdating = False Set cn = New ADODB.Connection Set rs = New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source =" & strPath & strDb & ";" rs.Open strSql, cn ThisWorkbook.Sheets(strSheet).Cells(intStart, 1).CopyFromRecordset rs For lngX = 0 To rs.Fields.Count - 1 ThisWorkbook.Sheets(strSheet).Cells(intStart - 1, lngX + 1).Value = rs.Fields(lngX).Name Next lngX rs.Close Set rs = Nothing cn.Close Set cn = Nothing Application.ScreenUpdating = True End Sub Det är raden ThisWorkbook.Sheets(strSheet).Cells(intStart, 1).CopyFromRecordset rs som är begränsningen. Jag vill kunna välja i vilken kolumn på bladet som ett visst fält ska kopieras in. Fältet "efternamn" kommer i exemplet ovan i kolumn "B", vill ha den i kolumn "D" etc. Ett annat problem är att jag vill kunna anropa en VBA funktion i själva SQL-satsen men får det inte att fungera. Jag tänker att det borde fungera såhär: Sub CmbExport() ADOExport "db.mdb", "SELECT namn, MinVBAFunktion([efternamn]) FROM tabell", "Resultatblad", 2 End Sub Function MinVBAFunktion(strEfternamn As String) As String MinVBAFunktion = strEfternamn ' göra någonting här End Function Tacksam för hjälp!
  4. Japp, varje dag sker det ändringar i alla filer. Även "basdata-filen" ändras, därav tänkte jag att det vore trevligt med någon dynamiskt variant som läser in även denna filen så att man inte behöver kopiera/klistra. De övriga filerna går ju göra med ditt exempel och om det går som du säger låta VBA öppna/stänga filerna och formlerna kopiera. Hela filerna måste läsas in/läsas om varje dag ifall det har skett någon ändring. De ligger lokalt på en hårddisk. Jag tror jag förstår, ska testa lite. Tack! Upptäckte ett problem med exemplet. Verkar inte fungera för äldre excel versioner, jag använder excel 2003. "Den här filversionen får inte hänvisa till celler som ligger utanför ett rutnät på 256 kolumner" =PASSA(A4;INDIREKT("'" &B$2&"'!A:A");0) Går det anpassa till äldre versioner?
  5. Det var ett riktigt smart exempel! Nackdelen är att jag manuellt måste kopiera in alla "nycklar" (bilnamn) samt låta alla filer vara öppna. Fördelen är väl att detta går mycket snabbare att beräkna än om det skulle göras via VBA? Jag måste nog ändå säga att jag skulle vilja använda VBA för att få det så enkelt som möjligt mot "användaren" som sitter med filen. Prestandan blir sämre men enkelheten mot "användaren" är viktigare här genom att via t.ex. ett "klick" få fram all information istället för att klippa och klistra. Slutsatsen är att jag skulle ändå vilja göra ett försök med VBA för enkelheten, blir prestandan för dålig får jag gå över till exemplet du gav mig. Antalet filer är "statiska" d.v.s. fast antal om 4st. Kolumnerna och "designen" i filerna är alltid samma, enda är att filerna ändras dagligen med ny information. Har du lust att ge ett exempel på hur det skulle kunna göras med VBA? Hur söker jag fram numret på kolumnen jag vill hämta data från i C2 som du skrev? Kan jag inte i C4 skriva något i stil med: =INDEX(INDIREKT("'" &B$2&"'!A:G");B4;3) Där 3=kolumnen jag vill hämta data ifrån?
  6. Låta Excel VBA slå ihop flera CSV-filer till ett kalkylblad Jag har ett flertal *.csv filer som jag skulle vilja "slå ihop" och presentera på ett kalkylblad. Varje csv-fil innehåller ett id som kan återfinnas i de andra csv-filerna. Varje csv-fil ska börja läsas från rad 5. Detta skulle jag vilja göra med hjälp av VBA. Har googlat efter exempel då jag inte kan VBA men inte hittat något bra som arbetar med flera filer på detta sättet. Hoppas att någon här kan lösa detta istället Exempel: csvfil-1 innehåller "basdatan" börjar läsas från rad5: Rad4-> "modell";"färg";"pris" Rad5-> "v70";"röd";"100" Rad6-> "525";"svart";"300" Rad7-> "9-5";"grön";"120" csvfil-2 innehåller "tilläggsdata" börjar läsas från rad5: Rad4-> "modell";"fabrikat" Rad5-> "v70";"volvo" Rad6-> "525";"bmw" Rad7-> "9-5";"saab" csvfil-3 innehåller "tilläggsdata" börjar läsas från rad5: Rad4-> "modell";"information" Rad5-> "v70;"Här står det lite text" Rad6-> "525";"Här står det lite text" Rad7-> "9-5";"Här står det lite text" csvfil-4 innehåller "tilläggsdata" börjar läsas från rad5: Rad4-> "modell";"övrigt" Rad5-> "v70;"Här står det lite mera text" Rad6-> "525";"Här står det lite mera text" Rad7-> "9-5";"Här står det lite mera text" Resultat: Ska presenteras på ett kalkylblad från rad2 och ner. På rad1 återfinns ett antal rubriker: A1: Modell B1: Färg C1: Pris D1: Fabrikat E1: Information F1: Övrigt såhär blir resultatet: v70 | röd | 100 | volvo | Här står det lite text | Här står det lite mera text 525 | svart | 300 | bmw | Här står det lite text | Här står det lite mera text 9-5 | grön | 120 | saab | Här står det lite text | Här står det lite mera text
  7. Fint, nu har jag jag lite att greja med i dagarna. Tack för hjälpen! Ang. dynamisk referens. Måste jag skapa en referens för varje kolumn i mitt fall? Säg att jag skapar en referens som heter myRef till =Blad1!$A$1:$D$10 Sen vill jag "anropa" denna i PASSA formeln. =PASSA(A1;myRef....;0) Då anropar jag alla kolumner...går det att bara anropa kolumn A i myRef? typ myRef[A] I excel 2007+ går ju detta med hjälp av en tabell men min arbetsbok ska köras i v. 2003
  8. Det ser bra ut! Enda jag kan klaga på är storleken. Skulle vilja kunna ha det på en nyckelknippa så ser helst att det är i storleken som Verbatim-minnet jag postade i första inlägget. Eller något i denna storleken: http://www.prisjakt.nu/produkt.php?p=363333
  9. Är användningen av dynamiska referenser är då för att låta PASSA bara köras genom de celler som innehåller ett värde, annars söker den genom hela kolumn A etc.? Om jag förstår rätt Låter vettigt, borde snabba upp en aning iaf Kanon nu har jag lite att leka med! Tänkte på en sak i VBA-exemplet... Hade varit bra med t.ex. en knapp för att kunna radera innehållet i kolumn D och E på Blad1, för att på så sätt manuellt kunna beräkna om värdet ifall något ändras i Blad2 eller Blad3. Alternativt som kanske är bättre/enklare är att koppla knappen till en funktion som vi kan kalla MyCleaner() som utför raderingen av cellerna och automatiskt därefter går in i MyCopier() och utför kopieringen? Hur skulle det kunna se ut? Äter det lite kraft och slöar ner boken ännu mera kanske?
  10. Stort tack! Jag ska pröva att leka lite med PASSA/INDEX! Är PASSA/INDEX mycket snabbare än LETARAD/VTSÖK? 3:e tipset kan nog vara användbart så jag slipper beräkningar i onödan som tar tid och slöar ner arbetsboken 4:e - Är inte riktigt med på hur du menar? Såklart så var mitt exempel tidigare lite fel. Det skulle varit LETARAD istället för VTSÖK då arbetsboken är gjord för 2003 versionen. Skulle ändå vara intressant att se hur VBA skulle klara av detta. Mycket för att jag själv vill lära mig och förstå lite hur det funkar så jag i framtiden kanske kan använda det
  11. Grunden är en tabell med all artikeldata, egentligen bara information. På varje rad i tabellen ligger en formel för att hämta information från andra blad i arbetsboken. I nuläget ligger det 2-4 formler på alla rader. Totalt max 20 000 rader. Från denna tabellen skapar jag därefter en pivottabell för att sammanställa tabellen. 1. För att hämta sålda/saldo =OM(ÄRFEL(VTSÖK(C2;'BLADET'!B:C;2;0));0;VTSÖK(C2;'BLADET'!B:C;2;0)) 2. För att se om produkten finns i listan "inaktuella" =OM(ÄRFEL(PASSA(C2;'BLADET'!B:B;0));"NEJ";"JA") Det med att ha en händelse låter intressant. Får fundera vidare på detta och se om det går att lösa. Bra tips att stänga av automatiska beräkningar. Det kan nog hjälpa en hel del att snabba upp arbetsboken! Frågan jag har är egentligen bara vilket som är snabbast. Mitt exempel ovan för att föra över information från ett blad till ett annat eller att låta det göras via VBA?
  12. Säg att det är max 20 000 poster i varje blad men med massa formler som jag har nu går det ganska trögt och kanske skulle kunna snabbas upp med VBA? Det där med "kronologisk tabell" verkar intressant men det behöver för min del inte vara riktigt så avancerat. Datum och Händelse kan vi alltså ta bort. Jag kan göra det ännu enklare och stoppa in "inaktuella" direkt i artikeldatan BLAD1 = Artikeldata - Innehåller endast information om alla produkter med artikelnummer som unik nyckel Kolumn A - Artikelnummer Kolumn B - Produkt Kolumn C - Utgående - Värde J/N Kolumn D - Vikt eller vad jag nu har för data. Kolumn E - O.s.v. BLAD2 = Sålda enheter - Innehåller sålda enheter under en vecka, unik nyckel artikelnummer. Kolumn A - Artikelnummer Kolumn B - Antalet sålda enheter BLAD3 = Antal i lager - Innehåller lagerantal med artikelnummer som unik nyckel Kolumn A - Artikelnummer Kolumn B - Lagerantal BLAD4 = Sammanställning - Här sammanställs alla blad och skapar utefter detta en pivottabell för att enkelt presentera resultatet. Kolumn A - Artikelnummer Kolumn B - Produkt Kolumn C - Inaktuell - Värde J/N Kolumn D - Vikt eller vad jag nu har för data. Kolumn E - O.s.v. Kolumn F - Sålda enheter - Plockar värdet från BLAD2, unik nyckel artikelnummer Kolumn G - Lagerantal - Plockar värdet från BLAD3, unik nyckel artikelnummer produkter.xls
  13. Har prövat ett tag nu med vanliga formler "LETARAD" etc. och det går ganska trögt i och med att det är ganska stora mängder data. Har prövat lite VBA men eftersom jag aldrig tidigare gjort något sånt fastnar jag ganska snabbt vid ett problem Därför skulle jag behöva hjälp med ett exempel... "BLAD1" - innehåller mina produkter Kolumn A: artikelnr Kolumn B: produkt Kolumn C: antal "BLAD2" - innehåller alla produkter jag sålt Kolumn A: artikelnr Kolumn B: antal sålda "BLAD3" - innehåller de produkter som är inaktuella Kolumn A: artikelnr Vad jag vill göra är kopiera "BLAD2" och "BLAD3" in i "BLAD1" till Kolumn D resp. Kolumn E via en "knapp" etc. Finns produkten från "BLAD3" ska den i "BLAD1" ersättas med JA om inte NEJ i Kolumn E Finns produkten från "BLAD2" ska den i "BLAD1" ersättas med antal sålda i Kolumn D Helt gröngöling när det gäller detta så det skulle uppskattas med exempel hur jag får in VBA koden i mitt exempel nedan. produkter.xls
  14. Kingston minnet ser bra ut förutom storleken. Skulle helst vilja ha något i storleken som Verbatim minnet jag postade om tidigare. IronKey hade inte varit dumt, men alldeles för dyrt. Så hemlig behöver jag inte vara
×
×
  • Skapa nytt...