VBA error- Type Mismatch

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Odpovědět
Dieesels
Level 1
Level 1
Příspěvky: 91
Registrován: 26 dub 2008 03:38

VBA error- Type Mismatch

Příspěvek od Dieesels »

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.
Přílohy
Import.rar
(22.5 KiB) Staženo 32 x
Uživatelský avatar
domitea
Tvůrce článků
Příspěvky: 1971
Registrován: 24 čer 2009 19:46
Bydliště: Královehradecký kraj
Kontaktovat uživatele:

Re: VBA error- Type Mismatch

Příspěvek od domitea »

zkus zkontrolovat promene, jestli treba neni bool za int
navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: 29 srp 2008 16:49

Re: VBA error- Type Mismatch

Příspěvek od navstevnik »

V procedure Sub ProcessCSV mas deklarovane promenne:

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?
Dieesels
Level 1
Level 1
Příspěvky: 91
Registrován: 26 dub 2008 03:38

Re: VBA error- Type Mismatch

Příspěvek od Dieesels »

Děkuji za snahu, už se jdu na to mrknout...
Dieesels
Level 1
Level 1
Příspěvky: 91
Registrován: 26 dub 2008 03:38

Re: VBA error- Type Mismatch

Příspěvek od Dieesels »

Původně jsem řešil import tímto codem, který jste mi poradily, zde na poradně:

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.
navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: 29 srp 2008 16:49

Re: VBA error- Type Mismatch

Příspěvek od navstevnik »

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.
Dieesels
Level 1
Level 1
Příspěvky: 91
Registrován: 26 dub 2008 03:38

Re: VBA error- Type Mismatch

Příspěvek od Dieesels »

Ok. Opravdu díky za rady
Odpovědět
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Win 11 24H2 update na 25H2 error
    od Laces » » v Windows 11, 10, 8...
    12 Odpovědi
    3501 Zobrazení
    Poslední příspěvek od Laces
  • Sniper Ghost Warrior 3 CryEngine Error Memory allocation for 4294967295 bytes failed
    od byron » » v Hry
    4 Odpovědi
    5124 Zobrazení
    Poslední příspěvek od byron

Zpět na „Kancelářské balíky“