Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: składnia funkcji MID
AFRO




Typ: neutral
Postów: 60
Zarejestrowany: Mar 2003
składnia funkcji MID

mam sobie trochę kodu, w którym jest błąd poniżej zaznaczony na czerwono:

'rozdzielamy dane w Label na poszczegolne skladniki i zapisujemy je do tablicy
Dim DoDruku(10) As String
Dim Dane As String
Dim odPOZ, ileVBCRLF
odPOZ = 1
ileVBCRLF = 0
Dane = Form1.lblOdsetki2.Caption

For a = 1 To 10
ileVBCRLF = InStr(odPOZ, Dane, vbCrLf) 'szukaj VBcrlf
DoDruku(a) = Mid(Dane, odPOZ, ileVBCRLF - odPOZ)    ' wytnij
  odPOZ = ileVBCRLF + 2
Next a


podczas działania wyskakuje błąd o treści:

Runtime '5':

Invalid procedure Call or argument


nie ma tam przecież żandego Call, jest jednak to odejmowanie i to chyba ono jest winne...nie jestem pewien ale wiem, że bez tego odejmowania MID działa tylko nie tak jak trzeba...

może mi ktoś powiedzieć gdzie jest błąd, dlaczego tak nie może być i podać rozwiąznie, aby efekt działania był taki sam.

16-05-2003 22:16
Pokaż profil AFRO  Wyślij email do AFRO   
Jelcyn
Admin forum




Typ: admin
Postów: 895
Zarejestrowany: Apr 2002

może

ileVBCRLF - odPOZ

w którymś tam momencie jest mniejsze od zera ??


_____________________________________________
Jelcyn
vb4all(małpka)canpol.pl
http://www.coderscity.pl/no-vb4all * http://www.jelcyn.com

16-05-2003 22:25
Pokaż profil Jelcyn  Wyślij email do Jelcyn   Odwiedź stronę Jelcyn       270849979    6237704
AFRO




Typ: neutral
Postów: 60
Zarejestrowany: Mar 2003

ok, bardzo możliwe, ale nie rozpatrywałem tego bardzo dogłębnie...

...ten kod źródłowy to leciutko zmieniony kod napisany mi ostatnio w odpowiedzi na posta przez Knight Lore''FC i on sądził, że to ma służyć chyba do usunięcia vbcrlf'ów.

Potrzebne mi to jest do tego, aby przesunąć CAŁY CAPTION Label'a na drukowanej stronie o określoną wartość w pixelach na boki lub w dół zależy co wpiszę.Zaznaczam, że Caption Label1 ma 10 vbcrlf, po 1 wpisanym po jednym słowie:

mama & vbcrlf
babcia & vbcrlf
ciocia & vbcrlf

itd...

a po przesunięciu jednej lini wyglądałoby to po wydruku tak:

          mama
babcia
ciocia

do tego wyżej użyłem kodu:

X=300
Y=200
For a=0 to 10
  Y=Y+250 'ten skok zalezy od uzytej czcionki
  Printer.CurrentX = X
  Printer.CurrentY = Y
  Printer.Print Tablica(a)
Next a


A potem Knight Lore''FC napisał mi emalią, że aby zrobić przesunięcie całego Label, należy:

'rozdzielamy dane w Label na poszczegolne skladniki i zapisujemy je do tablicy
Dim DoDruku(10) As String
Dim Dane As String
odPOZ = 1
ileVBCRLF = 0
Dane = Form1.Label1.Caption  'przepisyjemy dane z Label do zmiennej Dane

'szukamy 10 czesci
For a = 1 To 10
  ileVBCRLF = InStr(odPOZ, Dane, vbCrLf)                          ' szukaj znaku VBCLRF - a tak na prawde to chr$(13)+chr$(10)
  DoDruku(a) = Mid$(Dane, odPOZ, ileVBCRLF - odPOZ)      ' wytnij
  odPOZ = ileVBCRLF + 2
Next a

'teraz dane mamy w tablicy
'no to drukujemy opisana juz przedtem metoda

X=300
Y=200
For a=1 to 10
  Y=Y+250 'ten skok zalezy od uzytej czcionki
  Printer.CurrentX = X
  Printer.CurrentY = Y
  Printer.Print DoDruku(a)
Next a

i to miało tak zrobić, ale wyskakuje ten cholerny błąd - jak masz jakieś inne rozwiązanie to podziel się wiedzą,

nara

16-05-2003 22:42
Pokaż profil AFRO  Wyślij email do AFRO   
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
Mid()

Funkcja Mid, jak wiesz, zwraca odpowiednią ilość znaków z określonego ciągu znaków, lub zastępuje odpowiednią ilość znaków.
Myślę, że problem, który tu poruszasz, polega na tym, że dajesz odczyt w pętli od 1 do 10. A skąd możesz wiedzić ile jest znaków vbcrlf w tej etykiecie?
Lepiej użyj pętli do-loop lub while. Podobny problem pokazywałem już kiedyś pod adresem: http://losmac.republika.pl/uniwersalne/uniwersalne.html patrz przykład 1 lub 2.


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

17-05-2003 09:57
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
AFRO




Typ: neutral
Postów: 60
Zarejestrowany: Mar 2003
szybko...

...obierz pocztę ze skrzynki - dostaleś ode mnie emalie - dość dlugą i nie chciało mi się pisać:

proszę o pomoc...

afro

17-05-2003 18:25
Pokaż profil AFRO  Wyślij email do AFRO   
Knight Lore''FC




Typ: neutral
Postów: 240
Zarejestrowany: Jan 2003

Nie wiem w czym tu jest problem...
Przeciez to dziala prawidlowo !... sam sprawdzilem i drukuje tak jak chciales !

Zrob tak:
na formie umiesc 1 Label i 2 CommandButton

do Command1 przypisz to:

Private Sub Command1_Click()
Label1.Caption = "mama" & vbCrLf
Label1.Caption = Label1.Caption & "tata" & vbCrLf
Label1.Caption = Label1.Caption & "babcia" & vbCrLf
Label1.Caption = Label1.Caption & "dziadek" & vbCrLf
Label1.Caption = Label1.Caption & "siostra" & vbCrLf
Label1.Caption = Label1.Caption & "kolega" & vbCrLf
Label1.Caption = Label1.Caption & "Rafal" & vbCrLf
Label1.Caption = Label1.Caption & "Marcin" & vbCrLf
Label1.Caption = Label1.Caption & "Jacek" & vbCrLf
Label1.Caption = Label1.Caption & "Tomek" & vbCrLf
End Sub

do Command2 to :

Private Sub Command2_Click()

Dim DoDruku(10) As String
Dim Dane As String
odPOZ = 1
ileVBCRLF = 0
Dane = Form1.Label1.Caption  'przepisyjemy dane z Label do zmiennej Dane

'szukamy 10 czesci
For a = 1 To 10
  ileVBCRLF = InStr(odPOZ, Dane, vbCrLf)                          ' szukaj znaku VBCLRF - a tak na prawde to chr$(13)+chr$(10)
  DoDruku(a) = Mid$(Dane, odPOZ, ileVBCRLF - odPOZ)      ' wytnij
  odPOZ = ileVBCRLF + 2
Next a

'teraz dane mamy w tablicy
'no to drukujemy opisana juz przedtem metoda

X = 2300 'to jest przesuniecie w poziomie
Y = 200  'a to w pionie
For a = 1 To 10
  Y = Y + 250 'ten skok zalezy od uzytej czcionki
  Printer.CurrentX = X
  Printer.CurrentY = Y
  Printer.Print DoDruku(a)
Next a
Printer.EndDoc

End Sub

Teraz uruchom program
Kliknij w Command1 - zostanie zbudowane LABEL
Kliknij w Command2 - i zostanie wydrukowane w kolumnie !

losmac
Myślę, że problem, który tu poruszasz, polega na tym, że dajesz odczyt w pętli od 1 do 10. A skąd możesz wiedzić ile jest znaków vbcrlf w tej etykiecie?

przeciez AFRO pisze :
Zaznaczam, że Caption Label1 ma 10 vbcrlf, po 1 wpisanym po jednym słowie

19-05-2003 09:54
Pokaż profil Knight Lore  Wyślij email do Knight Lore        1065423
AFRO




Typ: neutral
Postów: 60
Zarejestrowany: Mar 2003

Wielce wdzięczny Ci jestem...

...sorry, za te e-malie, że są błędy...ale przez przypadek miałem cos gdzieś źle wpisane...

...wybacz, ale alles ist sehr Gut - danke schon

19-05-2003 13:04
Pokaż profil AFRO  Wyślij email do AFRO   
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
Widzę, że ktoś już mnie uprzedził...

U mnie ten kod chodzi bez zarzutu, w takiej postaci, w jakiej jest. Drukuje
również jedno pod drugim.
Myślę, że problem może tkwić w sterownikach drukarki.Spróbuj z inną drukarką lub na innym kompie.
Innym rozwiązaniem może być zapisanie tych danych do pliku tekstowego (np.: abc.txt) i wywołanie funkcji Shell w następujacy sposób: Shell("C:\Windows\Notepad.exe /p abc.txt",0).



...obierz pocztę ze skrzynki - dostaleś ode mnie emalie - dość dlugą i nie chciało mi się pisać:

proszę o pomoc...

afro



_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

19-05-2003 22:21
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Knight Lore''FC




Typ: neutral
Postów: 240
Zarejestrowany: Jan 2003

Wersja uproszczona (pod VB6)

Private Sub Command1_Click()
Label1.Caption = "mama" & vbCrLf
Label1.Caption = Label1.Caption & "tata" & vbCrLf
Label1.Caption = Label1.Caption & "babcia" & vbCrLf
Label1.Caption = Label1.Caption & "dziadek" & vbCrLf
Label1.Caption = Label1.Caption & "siostra" & vbCrLf
Label1.Caption = Label1.Caption & "kolega" & vbCrLf
Label1.Caption = Label1.Caption & "Rafal" & vbCrLf
Label1.Caption = Label1.Caption & "Marcin" & vbCrLf
Label1.Caption = Label1.Caption & "Jacek" & vbCrLf
Label1.Caption = Label1.Caption & "Tomek" & vbCrLf
End Sub


Private Sub Command2_Click()

Dim Dane As String
Dim Wczytano As Integer

Dane = Form1.Label1.Caption  'przepisyjemy dane z Label do zmiennej Dane

'rozdzielamy na skladniki i zapisujemy w tablicy DoDruku
DoDruku = Split(Dane, vbCrLf)

'okreslamy jaki jest Max rozmiar tablicy
Wczytano = UBound(DoDruku)

'teraz dane mamy w tablicy
'no to drukujemy opisana juz przedtem metoda

X = 2300 'to jest przesuniecie w poziomie
Y = 200  'a to w pionie
For a = 0 To Wczytano
  Y = Y + 250 'ten skok zalezy od uzytej czcionki
  Printer.CurrentX = X
  Printer.CurrentY = Y
  Printer.Print DoDruku(a)
Next a
Printer.EndDoc

End Sub

26-05-2003 11:17
Pokaż profil Knight Lore  Wyślij email do Knight Lore        1065423
Wszystkich odpowiedzi: 8 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1