solbulle,
Tipset "Rensa och konvertera importerad textdata" på min webbplats ger dig VBA-lösningen :-)
9 svar · 1 682 visningar · startad av solbulle
Hur kommer det sig att ett fält (eg en hel kolumn) i mitt excelark verkar på sätt o vis behandlas som text?
I det nämnda arket är det ok, kan räkna med värdet osv, men när jag hämtar värdet till ett annat ark mha "Letarad" så behandlas det som text i det bladet. Dock om jag då manuellt skriver in samma tal i det första fältet så fungerar det!?!
Kollar jag i formatet på cellen är det tal, men kör jag funktionen:
ÄRTAL(cell) så är det inte det!?!
Vad göra? Lösning? (VBA-lösning alt. formatlösning. Kommer INTE ändra manuellt!)
Tilläggas kan att värdena från början importeras från databas vilket kanske medför problemet.
Ok... hittar iofs kanseke lösningen medans jag skriver detta, hos XL-Dennis förstås...
=RENSA(STÄDA(F12))*1 Det ger mig ett tal.
Men följdfråga då, hur tillämpar jag det på den cell som redan har ett värde i sig så att säga? (För trött nu..)
solbulle,
Tipset "Rensa och konvertera importerad textdata" på min webbplats ger dig VBA-lösningen :-)
Ah, lysande, ska kika på det när jag vaknat ordentligt. Visste väl at det skulle finnas där någonstans.
Btw attans snabbt svarat måste jag säga... fast jag hade nog slocknat då redan.
Ok, den funktionen/subben fungerade kalas!
Hur tycker du/ni jag ska tillämpa den?
Jag har en arbetsbok som jag med script fyller med listor (data från db.) som då är felaktiga som jag skriver ovan.
Ska jag efter att varje lista hämtats in i excel köra funktionen och sen hämta nästa lista osv?
Eller är det bättre att låta hämta alla listorna först och sen köra funktionen?
Eller ska man så att säga kolla cellvärdet innan det skrivs in för första gången (från db) och fixa det dirkt?
Fördelar / Nackdelar?
Låt all data komma på plats i arbetsbladen.
Kör sedan städ-proceduren där du loopar arbetsbladen.
Detta borde vara det snabbaste sättet.
Tar det långt tid att exekvera så visa en meddelanderuta under tiden.
Hur läser du in data från db:n?
Ok, jag lär och lyder. ;)
Jag får in datat med ADO,
typ:
Do While Not rADO.EOF
i = i + 1
Worksheets("BLAD1").Range("B" & i).Value = rADO(0)
'osv
Om det var så du menade?
ADO - OK
Har du funderat på att "dumpa" data mha CopyFromRecordset?
Att loopa är iofs OK men det är betydligt snabbare med ovanstående :)
Kikade lite på CopyFromRecordset men det spricker för mig eftersom det jag håller på med måste fungera under Excel-97.
Tack för tipset hur som helst.
Då använder vi DAO istället för ADO :)
Följande är hämtat från min webbplats:
"Följande procedur fungerar i versionerna 97, 2000 och
2002. Här använder vi oss av ADO och vi behöver därför
ange referenser till Microsoft DAO 3.51 samt till Microsoft
scripting Runtime."
Option Explicit
Sub Importera_Stora_Textfiler_DAO()
'© 2002 Alla rättigheter XL-Dennis
Dim stSokVag As String, stFilnamn As String, stHamtaFil As String
Dim Db As DAO.Database
Dim Rst As DAO.Recordset
Dim fsoObj As Object
'Användarna väljer textfil för dataimport
stHamtaFil = Application.GetOpenFilename("Textfiler (*.txt),*.txt", , "Välj en textfil...")
'Om användaren klickar på Avbryt-knappen.
If stHamtaFil = "Falskt" Then Exit Sub
Application.ScreenUpdating = False
'Här används s k late binding.
Set fsoObj = CreateObject("Scripting.FileSystemObject")
stSokVag = fsoObj.GetFile(stHamtaFil).ParentFolder.Path
stFilnamn = fsoObj.GetFile(stHamtaFil).Name
'Här skapas DAO-kopplingen och textfilen öppnas.
Set Db = OpenDatabase(stSokVag, False, True, "Text;")
Set Rst = Db.OpenRecordset("SELECT * FROM " & stFilnamn)
'Textfilens innehåll läggs till den aktiva arbetsboken och arbetsblad läggs till.
While Not Rst.EOF
Worksheets.Add
ActiveSheet.Range("A1").CopyFromRecordset Rst, 65536
Wend
Rst.Close
Db.Close
Application.ScreenUpdating = True
End Sub
Ja du... och jag som tycker att jag är bra på att söka och tolka information... :r
Snacka om att man är negativt inställd. Såg liksom bara att det stod "CopyFromRecordset" i blått mitt framför ögonen och i samma mening fungerar ej i -97...
Jag ska testa det där och läsa bättre i fortsättningen. :)