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 23 x
- domitea
- Tvůrce článků
-
Level 4.5
- Příspěvky: 1971
- 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
-
- 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
-
- 5
- 4051
-
od Uziv00
Zobrazit poslední příspěvek
11 črc 2024 17:24
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů