Marek Zadęcki

Marek Zadęcki pracownik biurowy i
kadrowy

Temat: Prośba o wyjaśnienie czemu makro zgłasza błąd i...

Mam takie makro, które łączy mi nazwiska i imiona z dwóch kolumn do jednej:

Sub LoopRange1()
Dim x As Long
'Niech x zaczyna się od wiersza 3
x=3
'Przetwarzanie w pętli aż do znalezienia pustego wiersza
Do While Cells(x,3).Value<>" "
'To spowoduje umieszczenie wartości
'z trzeciej i czwartej kolumny (C i D)
'razem ze spacją między nimi
'w piątej kolumnie (E)
Cells(x,5).Value=Cells(x,3)+ _
" "+Cells(x,4).Value
'zwiększy wartość x o 1
'w celu przetwarzania następnego wiersza
x=x+1
Loop

End Sub


Jeśli x będzie zadeklarowana jw. to mam komunikat: Run-time error'1004: Application-defined or object-defined error. i podświetla mi na żółto linię:
Do While Cells(x,3).Value<>" "


Natomiast jeśli wpiszę
 Dim x As Integer


to mam komunikat Run-time error '6:
Overvlow
i podświetla mi na żółto linię
x=x+1


ponadto w jednym jak i drugim przypadku makro działa dość dziwnie. Testowo wrzuciłem tylko trzy wiersze. Wynik dostaję błyskawicznie, natomiast potem makro jeszcze przez ok. 1min "mieli" coś.
Bardzo proszę o wyjaśnienie co jest nie tak.

Jeśli jeszcze mogę w tym temacie: Jak przerobić to makro, aby jeśli występuje drugie imię zwracało poprawny wynik (np. Kowalski Jan Artur, względnie Kowalski Jan bez dodatkowej spacji pomiędzy pierwszym a drugim imieniem)
Danuta M.

Danuta M. Analityk

Temat: Prośba o wyjaśnienie czemu makro zgłasza błąd i...

Marek Z.:
Mam takie makro, które łączy mi nazwiska i imiona z dwóch kolumn do jednej:

Sub LoopRange1()
Dim x As Long
'Niech x zaczyna się od wiersza 3
x=3
'Przetwarzanie w pętli aż do znalezienia pustego wiersza
Do While Cells(x,3).Value<>" "
'To spowoduje umieszczenie wartości
'z trzeciej i czwartej kolumny (C i D)
'razem ze spacją między nimi
'w piątej kolumnie (E)
Cells(x,5).Value=Cells(x,3)+ _
" "+Cells(x,4).Value
'zwiększy wartość x o 1
'w celu przetwarzania następnego wiersza
x=x+1
Loop

End Sub


Jeśli x będzie zadeklarowana jw. to mam komunikat: Run-time error'1004: Application-defined or object-defined error. i podświetla mi na żółto linię:
Do While Cells(x,3).Value<>" "


Natomiast jeśli wpiszę
 Dim x As Integer


to mam komunikat Run-time error '6:
Overvlow
i podświetla mi na żółto linię
x=x+1


ponadto w jednym jak i drugim przypadku makro działa dość dziwnie. Testowo wrzuciłem tylko trzy wiersze. Wynik dostaję błyskawicznie, natomiast potem makro jeszcze przez ok. 1min "mieli" coś.
Bardzo proszę o wyjaśnienie co jest nie tak.


Taka pierwsza rzecz jaka mi się rzuca na oczy to fakt, że cells jest właściwością obiektu... inaczej: aby odwołać się do komórek - trzeba kodem wskazać gdzie (czyli np w jakim arkuszu) te komórki sie znajdują czyli zakładając, że Pana arkusz, w którym znajdują sie komórki nazywa się "Arkusz1" to odwołanie do komórek znajdujących się w tym arkuszu powinno wyglądac np tak: Worksheets("Arkusz1").Cells(x, 3).Value - trzeba odwołania odpowiednio pozmieniać w całym kodzie. A jeśli chce się sprawdzić czy komórka jest pusta to nie ....cells(x,3).value<>" " (bo tu de facto sprawdzamy czy w komórce jest wpisana dokładnie jedna spacja) a raczej ...cells(x,3).value<>"" - makro "mieli" coś dalej, ponieważ przechodzi następne wiersze skoroszytu, bo żadna komórka nie ma wpisanej tylko jednej spacji (a taki warunek jest zapisany w przytoczonym przez Pana kodzie).

Temat: Prośba o wyjaśnienie czemu makro zgłasza błąd i...

skasowałemTen post został edytowany przez Autora dnia 01.06.13 o godzinie 22:27
Grzegorz C.

Grzegorz C. Specjalista,
Uniwersytet Śląski

Temat: Prośba o wyjaśnienie czemu makro zgłasza błąd i...

Marek Z.:
Sub LoopRange1()
Dim x As Long
...
Jeśli x będzie zadeklarowana jw. to mam komunikat: Run-time error'1004: Application-defined or object-defined error. i podświetla mi na żółto linię:
Do While Cells(x,3).Value<>" "

Proszę sprawdzić jaką wartość przyjmuje zmienna w momencie wystąpienia błędu, oraz ile jest wierszy w arkuszu.

Natomiast jeśli wpiszę
 Dim x As Integer


to mam komunikat Run-time error '6:
Overvlow
i podświetla mi na żółto linię
x=x+1

Proszę sprawdzić jaką wartość przyjmuje zmienna x w momencie wystąpienia błędu, oraz poczytać o typach danych
http://dzono4.w.interia.pl/kurs/dodatki/typdane.htmTen post został edytowany przez Autora dnia 01.06.13 o godzinie 22:59
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: Prośba o wyjaśnienie czemu makro zgłasza błąd i...

Warunkiem wyjścia z pętli:
Do While Cells(x,3).Value<>" "

jest znalezienie komórki, w której będzie spacja. Nie znajdując spacji - kod dochodzi do końca kolumny, przy okazji wskazując, że zmienna X jest większa niż wartość dopuszczalna dla typu Integer.
Wystarczy zmienić warunek na znalezienie pierwszej pustej komórki - zresztą zgodnie z opisem w kodzie i problemu nie będzie:
Do While Cells(x,3).Value<>""
Marek Zadęcki

Marek Zadęcki pracownik biurowy i
kadrowy

Temat: Prośba o wyjaśnienie czemu makro zgłasza błąd i...

Bardzo dziękuję wszystkim za cenne i wartościowe wskazówki.
Temat można zamknąć.

Temat: Prośba o wyjaśnienie czemu makro zgłasza błąd i...

Mam problem i proszę o pomoc. Mam tabelke w ktorej pierwszy arkusz to zrzut z systemu (zrzuty będą robione codziennie), drugi to tabelka w ktorej mają sie te dane znalesc (narazie mam formułki w tych polach). Potrzebuje rozwiazania ktore będzie mi kopiowalo dane ze zrzutów wiersz pod wierszem , nie nadpisywalo poprzedniego...

proszę o pomoc

Następna dyskusja:

Makro z datami prośba o pomoc




Wyślij zaproszenie do