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

Reklama
Uživatelský avatar
domitea
Tvůrce článků
Level 4.5
Level 4.5
Příspěvky: 1971
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

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
  • NAT Type Strict / Moderate
    od Nattybwoy » 05 črc 2024 18:56 » v Administrace sítě
    5
    4051
    od Uziv00 Zobrazit poslední příspěvek
    11 črc 2024 17:24

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

Kdo je online

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