Hallo,
Ich verzweifele gerade. In meinem Programm habe ich Variablen als Public deklariert um Sie von Funktionen und Formularen lesen und Schreiben zu können. Nun habe ich von einer Funktion zur nächsten keinen Zugriff mehr. was läuft falsch?
Als Beispiel wird mir im Überwachungsfenster die Variable HerstellerStr, im Kontext einmal als "Global" und ein zweites mal als ". HerstellerNichtGefunfunden" angezeigt
Zusätzlich gibt es noch Formulare, in denen die Variablen auch benutzt werden.
Danke
Option Explicit
Public AnzahlZeilenImport As Long
Public AnzahlZeilenExport As Long
Public AnzahlHersteller As Integer
Public CounterImport As Long
Public CounterExport As Long
Public CounterHersteller As Integer
Public TempImportString As String
Public TempExportString As String
Public SuchPos As Integer
Public Hersteller() As String
Public HerstellerStr As String
Public HerstellerNeuStr As String
Public PartNrStr As String
Public PartNrAStr As String
Public PartNrBStr As String
Public BezeichnungStr As String
Public BezeichnungVorStr As String
Public AbbruchTaste As Boolean
Public StartBearbeitung As Long
Const HerstellerStart = 4
Const HerstellerSpalte = "G"
Const PartNrSpalte = "F"
Const BezeichnungSpalte = "E"
Const AbbruchString = "##"
Const RohDatenSpalte = "H"
Public Sub Import_SMA_Variante_1()
HerstellerStr = "Hersteller"
VariablenEinlesen
Sheets("Export").Select
Sheets("Export").Columns("A:A").ColumnWidth = 18
If Sheets("Export").Range("E1").Text = "Bezeichnung" Then
Else
Sheets("Export").Columns("E:E").Insert Shift:=xlToRight
Sheets("Export").Range("E1") = "Bezeichnung"
End If
SMA_Import.Show
Sheets("Export").Select
Range("C2").Select
ActiveWindow.FreezePanes = True
End Sub
Public Function VariablenEinlesen()
AnzahlZeilenImport = WorksheetFunction.CountA(Sheets("Import").Range("A:A"))
AbbruchTaste = False
StartBearbeitung = 2
AnzahlZeilenExport = WorksheetFunction.CountA(Sheets("Export").Range("A:A"))
CounterExport = WorksheetFunction.CountA(Sheets("Export").Range("A:A"))
If CounterExport >= 1 Then SMA_Import.Import1Erl = True
End Function
Public Function DatenImportierenKnopf()
If SMA_Import.Import1Erl Then
If MsgBox("Es sind schon Daten vorhanden. Diese überschreiben?", vbYesNo) = vbYes Then
DatenImportieren
SortierungEintragen
End If
Else
DatenImportieren
SortierungEintragen
End If
SMA_Import.Import1Erl = True
End Function
Public Function DatenSelektierenKnopf()
AnzahlHersteller = HerstellerEinlesen
StartBearbeitung = InputBox("Bitte Startzeile eingeben " & vbCrLf, "Startzeile", StartBearbeitung)
If StartBearbeitung < 2 Then StartBearbeitung = 2
For CounterImport = StartBearbeitung To AnzahlZeilenExport '########## Zeilenbearbeitun starten ##################
TempImportString = Sheets("Export").Range(RohDatenSpalte & CounterImport) ' Text holen
Application.ScreenUpdating = True ' Zu bearbeitende Zeil in Focus
Application.Goto Range("A" & CounterImport - 1), True
Rows(CounterImport).Select
HerstellerSuchen
PartNrSelektieren
If AbbruchTaste Then GoTo AbbruchHerstellerSuchen
Next '########## Zeilenbearbeitun ende #####################
AbbruchHerstellerSuchen:
End Function
Public Function DatenImportieren()
Sheets("Export").UsedRange.ClearContents
Sheets("Export").Rows(1).Value = Sheets("Import").Rows(1).Value
AnzahlZeilenExport = 2
CounterExport = 2
For CounterImport = 2 To AnzahlZeilenImport
TempImportString = Sheets("Import").Range("F" & CounterImport).Value
SuchPos = InStr(1, TempImportString, " oder ", 1)
If SuchPos = 0 Then
Sheets("Export").Rows(CounterExport).Value = Sheets("Import").Rows(CounterImport).Value
Else
Sheets("Export").Rows(CounterExport).Value = Sheets("Import").Rows(CounterImport).Value
Sheets("Export").Range("F" & CounterExport).Value = Left(TempImportString, SuchPos)
Do While SuchPos > 0
CounterExport = CounterExport + 1
Sheets("Export").Rows(CounterExport).Value = Sheets("Import").Rows(CounterImport).Value
TempImportString = Right(TempImportString, Len(TempImportString) - SuchPos)
SuchPos = InStr(2, TempImportString, "oder", 1) - 1
If SuchPos > 0 Then
Sheets("Export").Range("F" & CounterExport).Value = Left(TempImportString, SuchPos)
Else
Sheets("Export").Range("F" & CounterExport).Value = TempImportString
End If
Loop
End If
CounterExport = CounterExport + 1
Next
Sheets("Export").Columns("A:A").Insert Shift:=xlToRight
End Function
Public Function SortierungEintragen()
Sheets("Export").Range("A1").Value = "Sortierung"
AnzahlZeilenExport = CounterExport
For CounterExport = 2 To AnzahlZeilenExport
Sheets("Export").Range("A" & CounterExport).Value = CounterExport - 1
Next
Sheets("Export").Select
Sheets("Export").Columns("A:A").HorizontalAlignment = xlCenter
Sheets("Export").Columns("A:A").ColumnWidth = 18
Sheets("Export").Columns("F:G").EntireColumn.AutoFit
Sheets("Export").Columns("F:G").HorizontalAlignment = xlLeft
End Function
Public Function HerstellerSuchen()
SuchPos = 0
CounterHersteller = 0
Do
CounterHersteller = CounterHersteller + 1
SuchPos = InStr(1, TempImportString, Hersteller(CounterHersteller), 1) ' Hersteller suchen
Loop Until SuchPos > 1 Or CounterHersteller > AnzahlHersteller ' Position ermitteln
If SuchPos > 0 And Len(Hersteller(CounterHersteller)) > 0 Then ' Hersteller gefunden '
Sheets("Export").Range(HerstellerSpalte & CounterImport) = Hersteller(CounterHersteller)
Else
HerstellerNichtGefunden
CounterHersteller = CounterHersteller - 1
Sheets("Export").Range(HerstellerSpalte & CounterImport) = HerstellerStr
SuchPos = InStr(1, TempImportString, Hersteller(CounterHersteller), 1)
End If
End Function
Public Function HerstellerNichtGefunden()
CounterHersteller = WorksheetFunction.CountA(Sheets("Start").Range("A:A"))
HerstellerStr = InputBox("Der Hersteller kann nicht gefunden werden. Bitte löschen Sie alle unnötigen Zeichen", "Erstellung eines neuen Herstellers - Abbruich mit ##", TempImportString)
If HerstellerStr = AbbruchString Then
AbbruchTaste = True
Else
Hersteller(AnzahlHersteller) = HerstellerStr
AnzahlHersteller = AnzahlHersteller + 1
ReDim Preserve Hersteller(1 To AnzahlHersteller + 1)
Sheets("Start").Range("A" & CounterHersteller + HerstellerStart) = Trim(HerstellerStr)
End If
AnzahlHersteller = HerstellerEinlesen
End Function
Public Function PartNrSelektieren()
If SuchPos <= 0 Then SuchPos = 1
If Sheets("Export").Range(PartNrSpalte & CounterImport) = "" Then
PartNrStr = Left(TempImportString, SuchPos - 1)
Else
PartNrStr = Sheets("Export").Range(PartNrSpalte & CounterImport)
End If
If Sheets("Export").Range(BezeichnungSpalte & CounterImport) = "" Then
BezeichnungStr = Right(TempImportString, (Len(TempImportString) - (Len((Hersteller(CounterHersteller))) + SuchPos - 1)))
Else
BezeichnungStr = Sheets("Export").Range(BezeichnungSpalte & CounterImport)
End If
If CounterImport <= 2 Then
BezeichnungVorStr = ""
Else
BezeichnungVorStr = Sheets("Export").Range(BezeichnungSpalte & CounterImport - 1)
End If
DatenSelektierenBox
If AbbruchTaste Then
Else
Sheets("Export").Range(HerstellerSpalte & CounterHersteller + HerstellerStart) = HerstellerNeuStr
If HerstellerNeuStr = HerstellerStr Then
Else
AnzahlHersteller = AnzahlHersteller + 1
ReDim Preserve Hersteller(1 To AnzahlHersteller + 1)
Sheets("Start").Range("A" & CounterHersteller + HerstellerStart) = Trim(HerstellerStr)
AnzahlHersteller = HerstellerEinlesen
End If
Sheets("Export").Range(PartNrSpalte & CounterImport) = PartNrStr
Sheets("Export").Range(BezeichnungSpalte & CounterImport) = BezeichnungStr
End If
End Function
Public Function DatenSelektierenBox()
DatenSelektieren.Rohdaten = Trim(TempImportString)
DatenSelektieren.ErkannterHersteller = Trim(Hersteller(CounterHersteller))
DatenSelektieren.ErkanntePartNr = Trim(PartNrStr)
DatenSelektieren.ErkannteBezeichnung = Trim(BezeichnungStr)
DatenSelektieren.BezeichnungLetzterEintrag = BezeichnungVorStr
DatenSelektieren.Show
End Function
Public Function HerstellerEinlesen()
AnzahlHersteller = WorksheetFunction.CountA(Sheets("Start").Range("A:A"))
ActiveWorkbook.Worksheets("Start").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Start").AutoFilter.Sort.SortFields.Add Key:=Range("A4:A" & AnzahlHersteller + 10), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Start").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ReDim Preserve Hersteller(1 To AnzahlHersteller + 1) ' Hersteller Array an AnzahlHersteller anpassen
For CounterHersteller = 1 To AnzahlHersteller ' Hersteller in Array laden
Hersteller(CounterHersteller) = Sheets("Start").Range("A" & CounterHersteller + 4)
Next
HerstellerEinlesen = AnzahlHersteller
End Function ' Müll zum Löschen
|