AW: Nach vbModeless -> Fokus auf Wsheet
25.03.2010 11:15:55
fcs
Hallo Mathias,
mit sauberer Zuweisung von Objekt-Variablen sollte es kein Problem sein. Nach dem Einlesen der Daten zur gewünschten Tabelle zu navigieren, wenn nacheinander Arbeitsmappe und Tabellenblatt aktiviert werden und anschliessend die Zelle selektiert.
Nachfolgend ein unter Excel 2003 erstelltes Makro. Mein UF enthält dabei außer dem Fortschritts-Scrolbalken auch noch ein Label zur Anzeige des Prozentswerts.
Gruß
Franz
'Erstellt unter Excel 2003
Sub HoleDaten()
Dim wbZiel As Workbook, wbQuelle As Workbook
Dim wksZiel As Worksheet, wksQuelle As Worksheet
Dim ZeileZ As Long, ZeileQ As Long, Spalte As Long, ZeileMax As Long
Dim LastProzent As Double
Const DeltaProzent = 2 'Prozentschritte für Aktualisierung Fortschrittsanzeige
'Zieldatei
Set wbZiel = ThisWorkbook
Set wksZiel = wbZiel.Worksheets("Tab1")
'Quelldaten-Datei öffnen
Set wbQuelle = Workbooks.Open(Filename:="C:\Lokale Daten\Test\DataQuelle.xls", _
ReadOnly:=True)
Set wksQuelle = wbQuelle.Worksheets(1)
ZeileMax = wksQuelle.Cells(wksQuelle.Rows.Count, 1).End(xlUp).Row
'Fortschritts-Userform anzeigen
'besondere Eigenschaften von Steuerelementen im UF
'UF_Fortschritt - ShowModal = False
'ScrollBar_Fortschritt - Min = 0
'ScrollBar_Fortschritt - Max = 100
'ScrollBar_Fortschritt - Orientation = 1 - fmOrientationHorizontal
UF_Fortschritt.Caption = "Fortschritt laden " & wbQuelle.Name
UF_Fortschritt.Label_Prozent.Visible = False
UF_Fortschritt.Show
Application.ScreenUpdating = False
ZeileZ = 3 'Startzeile in Zieltabelle für eingelesene Daten
'Altdaten im Zielblatt löschen
With wksZiel
If .Cells.SpecialCells(xlCellTypeLastCell).Row >= ZeileZ Then
.Range(.Rows(ZeileZ), .Cells.SpecialCells(xlCellTypeLastCell).EntireRow).ClearContents
End If
End With
'Daten aus Quelle einlesen
For ZeileQ = 1 To ZeileMax
'Userform-Fortschrittsanzeige aktualisieren
If ZeileQ / ZeileMax * 100 >= LastProzent + DeltaProzent Then
UF_Fortschritt.ScrollBar_Fortschritt.Value = CLng(ZeileQ / ZeileMax * 100)
UF_Fortschritt.Repaint
LastProzent = CLng(ZeileQ / ZeileMax * 100)
End If
'nächsten Datensatz holen
If wksQuelle.Cells(ZeileQ, 1) = "B" Then
For Spalte = 1 To 7
wksZiel.Cells(ZeileZ, Spalte) = wksQuelle.Cells(ZeileQ, Spalte)
Next
ZeileZ = ZeileZ + 1
End If
Next
'Fortschritts-Userform schliessen
Unload UF_Fortschritt
'Quelldaten-Datei schliessen
wbQuelle.Close savechanges:=False
'bestimmte Zelle in Zieltabelle Tabelle selektieren
Application.ScreenUpdating = True
wbZiel.Activate
wksZiel.Activate
wksZiel.Range("B3").Select
End Sub
'oder auch alternativ mit vollständigen Objekt-Namen
With Workbooks("MeineDatei.xls")
.Activate
With .Worksheets("TabelleXYZ")
.Activate
.Range("B3").Select
End With
End With
End Sub