ich habe mal was verrücktes entdeckt.
Ich habe eine Schleife, welche mehrere Datensätze über OLE an eine andere Anwendung schickt und dann Ergebisse zurückbekommt. Das klappt auch alles super.
Da man aber endlos viele Datensätze haben könnte, da habe ich gedacht, machen wir eine "Progress Bar" und dann sieht es hübscher aus.
Nun kommt das Problem. Der Code für die Schleife läuft einwandfrei.
Wenn ich den Code mit Progress Bar ausführe, dann läuft er auch einwandfrei, ABER nur wenn Excel die aktive Anwendung ist. Aktiviere ich z.B. das Fenster der anderen OLE-Anwendung oder jedes andere beliebige Fenster, dann setzt Excel den Zähler der Schleife immer wieder zurück und lädt immer wieder den ersten Datensatz.
Der Code für die Progress Bar (wird vom Button gestartet):
Private Sub UserForm_Activate()
'Puts the user form in the middle of the Excel screen when opened.
Me.StartupPosition = 0
Me.Top = (Application.Height / 2) - (Me.Height / 2)
Me.Left = (Application.Width / 2) - (Me.Width / 2)
UF5_Code
Unload UserForm5
End Sub
Der Code im Modul "UF5"Public pctCompl_UF5 As Single
Sub UF5_Code()
Send_Spectra_to_Code
End Sub
Sub Progress_UF5(pctCompl_UF5 As Single)
'BarWidthMax = 200
UserForm5.Text.Caption = Int(pctCompl_UF5) & "% Completed"
UserForm5.Bar.Width = pctCompl_UF5 * 2
DoEvents
End Sub
... und noch die Sub mit der Schleife:
Public SpectraNo
Sub Send_Spectra_to_Code()
Dim ARR
pctCompl_UF5 = 0 'Progress for Userform
Progress_UF5 pctCompl_UF5 'Update UserForm "Progess Bar"
'Clean up
LastCol = Sheets(1).Cells(3, Sheets(1).Columns.Count).End(xlToLeft).Column
LastRow = Sheets(1).Cells(Sheets(1).Rows.Count, "A").End(xlUp).Row
If LastCol > 2 Then Sheets(1).Range(Sheets(1).Cells(3, 3), Sheets(1).Cells(LastRow, LastCol)) _
.Clear
'Check the Spectra Sheet Dimension
LastRow = Sheets(2).Cells(Sheets(2).Rows.Count, "A").End(xlUp).Row - 1
LastCol = Sheets(2).Cells(1, Sheets(2).Columns.Count).End(xlToLeft).Column
SpectraNo = 2 'Start with 2, 1 is WL
While SpectraNo
Das gleiche Resultat habe ich auch wenn ich es versuche mit:
For SpectraNo = 2 To LastCol
Wenn ich die Sub "Send_Spectra_to_Code" alleine ausführe, dann habe ich keine Probleme und die Zählervariable zählt richtig hoch. Damit der Code keinen Einfluss haben kann, lasse ich die Zählervariable extra in eine Zelle schreiben und hole sie mir wieder am Ende der Schleife. Aber Pustekuchen.
Dieser Mist lässt sich leider auch nicht im Debugger nachverfolgen, weil beim Debug Excel ja die aktive Anwendung ist.
Hat jemand eine Idee für dieses merkwürdige Benehmen?
Gruß,
Rainer