VBA error- Type Mismatch

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

Moderátor: Mods_senior

Dieesels
Level 1
Level 1
Příspěvky: 91
Registrován: duben 08
Pohlaví: Nespecifikováno
Stav:
Offline

VBA error- Type Mismatch

Příspěvekod Dieesels » 13 zář 2009 21:53

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 16 x

Reklama
Uživatelský avatar
domitea
Tvůrce článků
Level 4.5
Level 4.5
Příspěvky: 1966
Registrován: červen 09
Bydliště: Královehradecký kraj
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: VBA error- Type Mismatch

Příspěvekod domitea » 13 zář 2009 21:56

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

navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: VBA error- Type Mismatch

Příspěvekod navstevnik » 14 zář 2009 00:03

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: duben 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: VBA error- Type Mismatch

Příspěvekod Dieesels » 14 zář 2009 07:28

Děkuji za snahu, už se jdu na to mrknout...

Dieesels
Level 1
Level 1
Příspěvky: 91
Registrován: duben 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: VBA error- Type Mismatch

Příspěvekod Dieesels » 14 zář 2009 08:14

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: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: VBA error- Type Mismatch

Příspěvekod navstevnik » 14 zář 2009 09:02

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: duben 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: VBA error- Type Mismatch

Příspěvekod Dieesels » 14 zář 2009 12:22

Ok. Opravdu díky za rady


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • wan connection error Příloha(y)
    od revirst » 11 čer 2023 19:09 » v Sítě - hardware
    4
    1034
    od petr22 Zobrazit poslední příspěvek
    11 čer 2023 19:32
  • Unmountable Boot Volume Error
    od back » 09 srp 2023 13:29 » v BSOD (Blue Screen Of Death)
    8
    1597
    od petr22 Zobrazit poslední příspěvek
    09 srp 2023 15:25
  • Disky se odpojí a počítač hodí error
    od Malakhov » 04 črc 2023 11:15 » v Problémy s hardwarem
    5
    1176
    od Zivan Zobrazit poslední příspěvek
    04 črc 2023 16:05

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

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 39 hostů