Witam.
Napisałem makro do excela i chciałem je zrobić "przyjaznym" dla ludzi nie mających związku z programowaniem. Program ma porównać wartość komórki 1. z wartością komórki 2. i wypisać czy są takie same czy nie. Wszystko działało w oknie pisania makra w Excelu, natomiast w Visual Studio już nie chce. Problem w tym, że program działa aż do pewnego momentu, kiedy wywala taki błąd, do tego momentu wykonuje wszystkie instrukcje poprawnie:
An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll
Additional information: Wywołanie zostało odrzucone przez wywoływanego. (Wyjątek od HRESULT: 0x80010001 (RPC_E_CALL_REJECTED))
Doczytałem, że ten błąd pojawia się gdy wartość zmiennej jest równa niczemu (NULL). Co dziwne w tym przypadku linia błędu ma wszystkie zmienne z jakąś wartością: http://prntscr.com/43lulm. Na dodatek nie ma schematu kiedy wywali błąd, raz na 250 wierszu Excela raz na 90.
Przykładowe wartości jakie mam w tych dwóch kolumnach:
210/2 210/3
201 205
871/2 871/1
133/5 133/2
568/1 568
130/7 130/2
131/6 131
215/16 215/2,215/5
428/12 428/7
Kod programu
Dim i, c, b As Integer
Dim zrodlo, ciag, komOk, komNie, znak1, znak2, arkusz, plik As String
Dim NumerWiersza As Integer
Dim NumerKolumnyZrodlo As Integer
Dim NumerKolumnyCel As Integer
Dim NumerKolumnyOk As Integer
Dim NumerKolumnyNie As Integer
plik = sciezka.Text
arkusz = arkusz1.Text
komOk = "To samo"
komNie = "Inne"
znak1 = ","
znak2 = "."
If kolZ.Text <> "" And kolC.Text <> "" And kolOk.Text <> "" And kolNie.Text <> "" Then
xlWorkBook = xlApp.Workbooks.Open(plik)
xlApp.Visible = True
xlWorkSheet = xlWorkBook.Sheets(arkusz)
uz1.Text = ""
NumerKolumnyZrodlo = kolZ.Text
NumerKolumnyCel = kolC.Text
NumerKolumnyOk = kolOk.Text
NumerKolumnyNie = kolNie.Text
NumerWiersza = 1
i = 0
Dim aarray
Do While xlWorkSheet.Cells(NumerWiersza, NumerKolumnyZrodlo).Value <> ""
c = 0
zrodlo = xlWorkSheet.Cells(NumerWiersza, NumerKolumnyZrodlo).Value 'tu zwraca błąd
'Msgbox(zrodlo)
ciag = xlWorkSheet.Cells(NumerWiersza, NumerKolumnyCel).Value
If InStr(ciag, znak1) > 0 Then
aarray = Split(ciag, ",", -1, 1)
b = 2
ElseIf InStr(ciag, znak2) > 0 Then
aarray = Split(ciag, ".", -1, 1)
b = 2
Else
b = 1
End If
If b = 1 Then
If zrodlo = ciag Then
xlWorkSheet.Cells(NumerWiersza, NumerKolumnyOk).Value = komOk
Else
xlWorkSheet.Cells(NumerWiersza, NumerKolumnyNie).Value = komNie
End If
ElseIf b = 2 Then
For i = 0 To UBound(aarray)
If zrodlo = aarray(i) Then
xlWorkSheet.Cells(NumerWiersza, NumerKolumnyOk).Value = komOk
c = 1
End If
Next i
If c <> 1 Then
xlWorkSheet.Cells(NumerWiersza, NumerKolumnyNie).Value = komNie
End If
End If
NumerWiersza = NumerWiersza + 1
Loop
got1.Text = "Gotowe"
Else
uz1.Text = "Uzupełnij wszystkie pola!"
End If
Bardzo proszę o pomoc, siedzę już nad tym kilka dni ale vb ciągle się uczę.