Imam en problem pri šifriranju preglednice, šifrira mi vredi, ko pa hočem dešifrirat pa mi javi napako v: A = Asc(znak).
Moram pa napisat makro, ki bo šifriral/dešifriral aktivno območje celic preglednice. Za šifriranje oz. dešifriranje moram vnest geslo iz katerega bom najprej izračunal zrno za generator naključnih števil. Celice moram šifrirat z operacijo XOR. Šifrirat je treba vrednosti celic in enačbe (pazit moramo da bodo ustvarjeni samo znaki ASCII med 32 in 127).Preizkušam funkcijo SifrirajCelico
Napaka pri klicanju funkcije SifrirajCelico: Neveljaven klic procedure.
Moram pa imeti 2 funkciji (SifrirajCelico, GesloVZrno) in 2 podprograma (SifrirajList in Main).
Koda: Izberi vse
Function SifrirajCelico(Celica$, Zrno, Znacka$) ' Znacka$ = "ZNACKA", Celica$ = vrednost/formula, Zrno = Zrno
Dim kodirano, znak As String
Dim i, dolzinaZnacke, dolzinaCelice As Integer
kodirano = ""
Randomize(Zrno)
dolzinaZnacke = Len(Znacka$)
dolzinaCelice = Len(Celica$)
If (Left(Celica$,1) = "=") Or (Left(Celica$,1) = "+") Or (Left(Celica$,1) = "-") Then
Celica$ = Znacka$ + Celica$ ' Na začetek niza Celica$ vstavimo niz Znacka$
kodirano = Znacka$ ' Na začetek vstavimo značko
For i = dolzinaZnacke + 1 To dolzinaCelice ' Za vsak znak celice od zadnjega znaka v nizu Znacka$
znak = Mid(Celica$,i,1) ' Vzamemo trenutni znak
A = Asc(znak) ' Znak pretvorimo v ascii kodo in shranimo v A
If (A > 31) And (A < 128) Then
B = CInt(rnd()*31)
A = A XOR B
rezultat = Chr(A)
kodirano = kodirano + rezultat
Else
kodirano = kodirano + znak ' Če je posebni znak (šumniki,..) ga ne de/kodiramo
End If
Next i
Else If (Left(Celica$,dolzinaZnacke)) = Znacka$ Then ' V primeru da se na začetku niza Celica$ nahaja značka; Funkcija Left vrne levi del niza Celica$ z dolžino Značka$
Celica$ = Right(Celica$,(dolzinaCelice - dolzinaZnacke)) ' Niz, ki predstavlja značko se vzame iz Celica$; Funkcija Right vrne desni del niza Celica$ velikosti dolžina celice minus dolžina značke
For i = 1 To dolzinaCelice ' Za vsak znak v celici
znak = Mid(Celica$,i,1) ' Vzamemo trenutni znak
A = Asc(znak) ' Znak pretvorimo v ascii kodo in shranimo v A
If (A > 31) And (A < 128) Then
B = CInt(rnd()*31)
A = A XOR B
rezultat = Chr(A)
kodirano = kodirano + rezultat
Else
kodirano = kodirano + znak ' Če je posebni znak (šumniki,..) ga ne de/kodiramo
End If
Next i
Else
For i = 1 To dolzinaCelice ' Za vsak znak v celici
znak = Mid(Celica$,i,1) ' Vzamemo trenutni znak
A = Asc(znak) ' Znak pretvorimo v ascii kodo in shranimo v A
If (A > 31) And (A < 128) Then
B = CInt(rnd()*31)
A = A XOR B
rezultat = Chr(A)
kodirano = kodirano + rezultat
Else
kodirano = kodirano + znak ' Če je posebni znak (šumniki,..) ga ne de/kodiramo
End If
Next i
End If
End If
SifrirajCelico = kodirano
End Function
Hvala, Jani