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 30 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
			
									
									
						- 
				navstevnik
 - 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 Stringa 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
        LoopPreved 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 #1PS.: 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.
									
			
									
						- 
				navstevnik
 - 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
 
 
- 
				
- 12
 - 2505
 - 
						od Laces
						Zobrazit poslední příspěvek 
10 říj 2025 11:29
 
 - 
				
- 
												Sniper Ghost Warrior 3 CryEngine Error Memory allocation for 4294967295 bytes failed
od byron » 12 črc 2025 16:31 » v Hry - 4
 - 4763
 - 
						od byron
						Zobrazit poslední příspěvek 
13 črc 2025 17:11
 
 - 
												
 
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů


