Dobrý den,
mám problém z importem dat z csv. Mám hotový VBA code, vše by mělo fungovat, bohužel, jak z předmětu vyplývá, háže mi to chybu Type mismatch. Zkoušel jsem krokovat, bohužel neúspěšně, budu rád, když se na to podíváte. Protože, už opravdu nevím, kde dělám chybu.
VBA error- Type Mismatch
VBA error- Type Mismatch
- Přílohy
-
- Import.rar
- (22.5 KiB) Staženo 16 x
- domitea
- Tvůrce článků
-
Level 4.5
- Příspěvky: 1966
- Registrován: červen 09
- Bydliště: Královehradecký kraj
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: VBA error- Type Mismatch
zkus zkontrolovat promene, jestli treba neni bool za int
UNIX je systém jednoduchý, jen musíte být geniální, aby jste tu jednoduchost pochopili. Jedině OSS, vše co napíšu je pod GNU/GPL
Linux je mé koření života. Nikdy nevím, co pokazím! Registered user #550849
Dnešní počítače mi nestačí, pracuji na vlastním
Linux je mé koření života. Nikdy nevím, co pokazím! Registered user #550849
Dnešní počítače mi nestačí, pracuji na vlastním
-
- Level 4
- Příspěvky: 1142
- Registrován: srpen 08
- Pohlaví:
- Stav:
Offline
Re: VBA error- Type Mismatch
V procedure Sub ProcessCSV mas deklarovane promenne:
a na promenne typu string uplatnujes funkci CLng nebo CDbl:
.
Preved promenne na hodnotu pouzitim fce Val: .MFE = CDbl(Val(tMFE)). Ve vyse uvedene casti kodu je prikaz End, ktery proceduru ukonci, odstran. Po odstraneni vyse uvedenych chyb v teto procedure dochazi ke cteni za koncem souboru: pouzita fce Input #1 nacita do kazde z promennych tTicket, tMFE, tPaL1, tMAE po jednom celem radku ze souboru, takze pri poctu radku odlisnych od nasobku 4, dojde k teto chybe, data navic nejsou radne nactena. Dal jsem uz proceduru nezkoumal.
Odkud jsi ty procedury opsal?
Ja bych pouzil trochu jiny postup:
Prikazem Line Input nacetl radky do bunek listu ve sloupci A a pak pouzil fci listu TextDoSloupcu (kde v pripade potreby muzes zadat i typ dat a oddelovac desetinnych mist), viz ukazka kodu (v ukazce navic bylo potreba do jednoho radku vysledku sloucit nekolik radku souboru csv a identifikovat jeho pocatek, na konci souboru byl radek Koniec):
PS.: Nekde jsem se uz s podobnym zpusobem nacitani souboru csv setkal, nebyls to ty?
Kód: Vybrat vše
Dim tTicket As String, tMFE As String, tPaL1 As String, tMAE As String
a na promenne typu string uplatnujes funkci CLng nebo CDbl:
Kód: Vybrat vše
Do While Not EOF(1)
Input #1, tTicket, tMFE, tPaL1, tMAE
If tTicket <> "Ticket #" Then
numPositions = numPositions + 1
ReDim Preserve Positions(numPositions)
With Positions(numPositions)
.Ticket = CLng(tTicket)
tMFE = Replace(tMFE, ".", ",", 1)
.MFE = CDbl(tMFE)
tPaL1 = Replace(tPaL1, ".", ",", 1)
.PaL1 = CDbl(tPaL1)
tMAE = Replace(tMAE, ".", ",", 1)
.MAE = CDbl(tMAE)
End With
End With
End If
End
Loop
Preved promenne na hodnotu pouzitim fce Val: .MFE = CDbl(Val(tMFE)). Ve vyse uvedene casti kodu je prikaz End, ktery proceduru ukonci, odstran. Po odstraneni vyse uvedenych chyb v teto procedure dochazi ke cteni za koncem souboru: pouzita fce Input #1 nacita do kazde z promennych tTicket, tMFE, tPaL1, tMAE po jednom celem radku ze souboru, takze pri poctu radku odlisnych od nasobku 4, dojde k teto chybe, data navic nejsou radne nactena. Dal jsem uz proceduru nezkoumal.
Odkud jsi ty procedury opsal?
Ja bych pouzil trochu jiny postup:
Prikazem Line Input nacetl radky do bunek listu ve sloupci A a pak pouzil fci listu TextDoSloupcu (kde v pripade potreby muzes zadat i typ dat a oddelovac desetinnych mist), viz ukazka kodu (v ukazce navic bylo potreba do jednoho radku vysledku sloucit nekolik radku souboru csv a identifikovat jeho pocatek, na konci souboru byl radek Koniec):
Kód: Vybrat vše
Open SPathFile For Input As #1
i = 0
If Not EOF(1) Then Line Input #1, Str
Do While Not EOF(1)
Line Input #1, TmpStr
' If DOK or Koniec. in new line then end of record
If (InStr(TmpStr, "DOK") > 0 Or TmpStr = "Koniec.") Then
' insert to sheet
TargetCll.Offset(i, 0).Value = Str
' and delimit TextToColumns method
TargetCll.Offset(i, 0).TextToColumns Destination:=TargetCll.Offset(i, 0), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False
i = i + 1
Str = TmpStr
Else
Str = Str & ";" & TmpStr
End If
Loop
Close #1
PS.: Nekde jsem se uz s podobnym zpusobem nacitani souboru csv setkal, nebyls to ty?
Re: VBA error- Type Mismatch
Děkuji za snahu, už se jdu na to mrknout...
Re: VBA error- Type Mismatch
Původně jsem řešil import tímto codem, který jste mi poradily, zde na poradně:
Sice to funguje, ale neustále se importují data od začátku, což je problém, při větším množství dat. Potřeboval bych, aby se importovala data, pouze a jen ty, který tam ještě nejsou, chybí a ne všechny, po každé aktivaci tohoto vba...
Proto zkouším jiný způsob..
Kód: Vybrat vše
Option Explicit
Sub InputCsvFile1(ByVal CestaSoubor As String, TargetCll As Range)
Dim Str As String, PoleTemp
Dim i As Long, j As Integer
Open CestaSoubor For Input As #1
If Not EOF(1) Then
i = 0
Do
Line Input #1, Str
PoleTemp = Split(Str, ";")
j = 0
Do
If IsNumeric(PoleTemp(j)) Then
TargetCll.Offset(i, j).Value = CDbl(Val(PoleTemp(j)))
TargetCll.Offset(i, j).NumberFormat = "0.00"
Else
TargetCll.Offset(i, j).Value = PoleTemp(j)
End If
j = j + 1
Loop While j <= UBound(PoleTemp)
i = i + 1
Loop While Not EOF(1)
End If
Close #1
End Sub
Sub TestInputCsvFile1()
Dim CestaSoubor As String, TargetCll As Range
CestaSoubor = "D:\Data\MAE_MFE.csv"
' ulozit do:
Set TargetCll = Worksheets("Výsledky").Range("a1")
InputCsvFile1 CestaSoubor, TargetCll
End Sub
Sice to funguje, ale neustále se importují data od začátku, což je problém, při větším množství dat. Potřeboval bych, aby se importovala data, pouze a jen ty, který tam ještě nejsou, chybí a ne všechny, po každé aktivaci tohoto vba...
Proto zkouším jiný způsob..
Naposledy upravil(a) Dieesels dne 15 zář 2009 17:36, celkem upraveno 1 x.
-
- Level 4
- Příspěvky: 1142
- Registrován: srpen 08
- Pohlaví:
- Stav:
Offline
Re: VBA error- Type Mismatch
Musis se rozhodnout, co je jednodussi a rychlejsi: nacist vse znovu nebo porovnavat jiz ulozene zaznamy se zaznamy v souboru csv pro vylouceni duplicit a nove nacist (nutno vzit do uvahy jine setrideni drivejsich nactenych zaznamu).
Pokud je to tak casove narocne, pak bys mel mit v csv souboru jen prirustek a ten pridat ke stavajicim zaznamum.
PS.: Ulozeni celych zaznamu ze souboru do sloupce a nasledna delimitace prinese oproti tebou uvedene procedure zrychleni.
Pokud je to tak casove narocne, pak bys mel mit v csv souboru jen prirustek a ten pridat ke stavajicim zaznamum.
PS.: Ulozeni celych zaznamu ze souboru do sloupce a nasledna delimitace prinese oproti tebou uvedene procedure zrychleni.
Re: VBA error- Type Mismatch
Ok. Opravdu díky za rady
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 4
- 1034
-
od petr22
Zobrazit poslední příspěvek
11 čer 2023 19:32
-
- 8
- 1597
-
od petr22
Zobrazit poslední příspěvek
09 srp 2023 15:25
-
- 5
- 1176
-
od Zivan
Zobrazit poslední příspěvek
04 črc 2023 16:05
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 39 hostů