Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

If nie działa mimo spełnionego warunku


Rekomendowane odpowiedzi

Opublikowano

Witam,

 

piszę skrypt w AutoIt. Co powinien on zrobić:

1) Wziąć dane z arkusza Excela (np. "3,5,20")

2) Rozdzielić otrzymane dane na podstawie przecinków i pojedyncze elementy wrzucić do Arraya

3) Po kolei wpisywać dane do drugiego arkusza (jedna liczba w jednym wierszu)

4) Jeśli $dane[0] (liczba elementów w Arrayu) jest równa licznikowi $i, powinno ustawić zmienną $koniec = True i rozpocząć pętlę od początku.

Func WezDane($typ)
   Switch $typ
	  Case "57.95"
		 Global $dane = StringSplit(_Excel_RangeRead($import, Default, "C9"), ",")
	  ;kolejne Case'y dla pozostałych rodzaji danych
   EndSwitch
EndFunc

While 1
;kod na wstępie...

	If $5795koniec == 0 Then
		 WezDane("57.95")
		 _ArrayDisplay($dane) ;dodane dla testów

		 $i = $i + 1
		 If $dane[1] == "N" Then
			$5795koniec = 1
			$linia = $linia - 1 ;żeby na tej samej linii co jest nadpisało
			ContinueLoop
		EndIf
		 _Excel_RangeWrite($export, Default, "57.95", "CY" & $linia)
		 _Excel_RangeWrite($export, Default, 1, "CZ" & $linia)
		 _Excel_RangeWrite($export, Default, $dane[$iicd9], "DA" & $linia)

		If $i == $dane[0] Then
			$5795koniec = 1
			$dane = 0 ;reset tablicy
			$i = 0 ;reset licznika
		 EndIf
		 ContinueLoop
	EndIf

	;dalej podobne Ify, ale z innymi liczbami zamiast 57.95
WEnd

Problem polega na tym, że gdy jako $dane skrypt otrzyma mniejszą ilość liczb, np. 3 ($dane[1] = 3) i 12 ($dane[2] = 12), ostatni If nie wykonuje swojego działania, tj. gdy licznik $i jest równy ilości elementów w tablicy $dane powinien ustawić trzy zmienne, z czego jedna pomija pierwszego Ifa i przechodzi do następnych. Przez to $i zwiększa się do 3 i skrypt próbuje odczytać nieistniejący trzeci element tablicy, dlatego pojawia się błąd "Array variable has incorrect number of subscripts or subscript dimension range exceeded."

Jeśli zaś jako dane skrypt otrzyma N, powinien od razu przejść do kolejnego rodzaju danych.

 

 

Prosiłbym o sprawdzenie kodu, sprawa dość pilna.

p123tf

Opublikowano

Uporałem się już z problemem, przed Ifem z poleceniami po otrzymaniu jako danych litery N wystarczyło dodać reset licznika $i. Jak na złość wpadłem na to dopiero po dodaniu tu tematu :)

 

Do zamknięcia.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...