Problem ze zmiennymi globalnymi

0

Cześć, mam problem z dostępem do zmiennych globalnych. W module mam zadeklarowane 3 zmienne globalne, a w Sheet przypisuje im wartości i o ile dla ChangedCell wszystko działą ok o tyle dla 2 pozostałych mam error '1004' Application-definied or object-defined error.
PreviousValue i SelectedRow przekazują do zmiennych wiersz i wartość komórki w chwili jej zaznaczenia. ChangedCell przekazuje do zmiennej wartość komórki w której doszło do zmiany wartości. W debuggerze widzę, że wartości są dostępne w module ale jakby nie mogę z nich skorzystać.

Module:

Option Explicit
Public ChangedCell As String
Public SelectedRow As Integer
Public PreviousValue As String

Sub AddToLog()
Dim LogRow As Long

With ActiveSheet

    LogRow = Sheet5.Range("A99999").End(xlUp).Row + 1 'First Available Log Row
    Sheet5.Range("C" & LogRow).Value = .Range(SelectedRow).Value 'Row Line
    Sheet5.Range("D" & LogRow).Value = .Range(PreviousValue).Value 'Previous Value
    Sheet5.Range("E" & LogRow).Value = .Range(ChangedCell).Value 'Updated Value
    Sheet5.Range("F" & LogRow).Value = .Range("D" & .Range(SelectedRow).Value).Value 'LSP
    Sheet5.Range("H" & LogRow).Value = .Range(((Split(ChangedCell, "$")(1)) & "4")).Value
    
End With
End Sub

Sheet:

Option Explicit

Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("A5:J2000")) Is Nothing Then
     If Target.Count > 1 Then

    End
    End If
    If ActiveSheet.Name = "NI HWSD GDC NL OB" Then
        ChangedCell = Target.Address
        AddToLog
    End If
End If
End Sub

Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Target, Range("A5:J2000")) Is Nothing Then
    PreviousValue = Target.Value
    SelectedRow = Target.Row
End If
End Sub
0

Najlepiej by było gdybyś nie używał zmiennych globalnych.

0
Riddle napisał(a):

Najlepiej by było gdybyś nie używał zmiennych globalnych.

W orginale Arkusz zapisywał te informacje w innych komórkach i moduł pobierał je stamtąd ale wydaje się to bardziej podatne na awarie, co jeśli użytkownik usunie wiersze gdzie dane są przechowywane. Zmienne to chyba lepsze rozwiązanie, nie upieram się na globalne ale nie wiem jak to inaczej zrobić.

0
janowski85 napisał(a):
Riddle napisał(a):

Najlepiej by było gdybyś nie używał zmiennych globalnych.

W orginale Arkusz zapisywał te informacje w innych komórkach i moduł pobierał je stamtąd ale wydaje się to bardziej podatne na awarie, co jeśli użytkownik usunie wiersze gdzie dane są przechowywane. Zmienne to chyba lepsze rozwiązanie, nie upieram się na globalne ale nie wiem jak to inaczej zrobić.

Zarówno zapisywanie wartości w wierszach jak i w zmiennych globalnych to słaby pomysł.

Powinieneś skorzystać ze zmiennych lokalnych, procedur/funkcji i parametrów.

0

Ale do zmiennych lokalnych zdeklarowanych w Arkuszu nie będę miał dostępu z poziomu modułu chyba.

0
janowski85 napisał(a):

Ale do zmiennych lokalnych zdeklarowanych w Arkuszu nie będę miał dostępu z poziomu modułu chyba.

Ok już wiem gdzie problem. Odwoływałem się do zmiennych przez .Range(zmienna liczbowa).Value co wyrzucało błąd wystarczyło pozostawić samą nazwę zmiennej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1