Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

daten aus Arbeitsmappe einlesen

Betrifft: daten aus Arbeitsmappe einlesen von: Peter
Geschrieben am: 19.08.2008 13:25:27

Hallo,
kurze Fragestellung an die Experten. Habe mir einen Code zusammengebastelt, der in einer geöffneten Arbeitsmappe, bestimmte Daten aus einer anderen noch "unbestimmten" Arbeitsmappe importieren soll. Funktioniert auch, jedoch kommt mir der Code zu unübersichtlich und auch "unsauber" vor. Wäre für Anregungen dankbar, speziell für eine verschlankung des Codes (da sehr viele Daten aus der anderen AM für vergleichszahlen importiert werden müssen) und insbesondere für einen Import der Daten ohne die gewählte datei öffnen zu müssen.

hier der Code:




Sub Test ()

On Error GoTo Ende

Dim wkb As Workbook 'Arbeitsmappe def.
Set wkb = ActiveWorkbook 'Arbeitsmappe auf das aktive Workbook setzen

Application.ScreenUpdating = False

Application.EnableEvents = False

Application.Dialogs(xlDialogOpen).Show 'Nun ist das aktive Workbook das neu geöffnete

Worksheets("Tabelle1").Range("B5:H15").Copy
wkb.Worksheets("Tabelle2").Range("B5").PasteSpecial _
Paste:=xlPasteValues

Worksheets("Tabelle2").Range("B5:H15").Copy
wkb.Worksheets("Tabelle3").Range("B5").PasteSpecial _
Paste:=xlPasteValues

Worksheets("Tabelle3").Range("B5:H15").Copy
wkb.Worksheets("Tabelle4").Range("B5").PasteSpecial _
Paste:=xlPasteValues


Application.CutCopyMode = False

For Each wkb In Workbooks
      If wkb.Name <> ThisWorkbook.Name Then
         wkb.Close savechanges:=False
      End If
   Next wkb
   

Ende:
Application.ScreenUpdating = True
Application.EnableEvents = True

Worksheets("Checkliste").Select
ActiveWorkbook.Save

End Sub


  

Betrifft: AW: daten aus Arbeitsmappe einlesen von: Daniel
Geschrieben am: 19.08.2008 14:39:43

Hi

im Prinzip ist der Code ok.
lediglich die Schleife zum Schließen würde ich durch ein:

ActiveWorkbook.Saved = True
ActiveWorkbook.Close


ersetzen, das müsste eigentlich ausreichen.
die Schleife würde ja auch u.U. gänzlich unbeteiligte Excel-Dateien schließen, die zufälligerweise auch noch geöffnet sind.
den Zweizeiler mache ich, da beim mir "Workbook.Close Savechanges = False" nicht immer zuverlässig funktioniert und ich trotzdem gefragt werde, ob ich speichern will. die o.g. Mehtode funktioniert besser.

wenn du immer nur Werte überträgst, dann könnte man den Copy-Paste-Zweizeiler noch so verkürzen:

wbk.Sheets("Tabelle2").Range("B5:H15").Value = sheets("Tabelle1").Range("B5:H15").Value



ob sich ansonsten noch durch Schleifen irgendwelche Vereinfachungen erreichen lassen, hängt von den zu kopierenden Zellbereichen und den Verwendeten Sheet-Namen ab, dazu müsste man die Dateien im Original kennen, für das obige Beispiel könnte man sowas verwenden:

for i = 1 to 3
wbk.sheets("Tabelle" & i+1).Range("B5:h15").Value = Sheets("Tabelle" & i).Range("B5:H15").value
next



das öffnen der Dateien würde ich beibehalten, der Zugriff auf geschlossene Excel-Dateien ist wesentlich aufwendiger zu programmieren und wahrscheinlich auch deutlich langsamer (das gilt zumindest für das Akutalisieren von Fernbezügen auf geschlossene Dateien in Formeln), so daß du hier keinen Vorteil hast.

das einzige Problem ist, daß wenn der Anwender im File-Open-Dialog auf abbrechen drückt, dann wird der Code die Daten innerhalb der gleichen Datei rumkopiern.
das könnt man aber so abfangen, wirkung ist:
1. es wird die gewählte datei geöffnet
2. es wird ein Wahrheitswert erzeugt: True beim Öffnen, False beim Abbrechen, dieser wird in der IF-Funktion verwendet

Sub Test ()
'... hier der este Teil des Codes

If Application.Dialogs(xlDialogOpen).Show Then
    '... hier der Code zum Übertragen der Daten
Else
    MsgBox "es wurde abgebrochen"
End If
End Sub



Gruß, Daniel


  

Betrifft: AW: daten aus Arbeitsmappe einlesen von: Peter
Geschrieben am: 19.08.2008 15:07:41

Danke für die schnelle und hilfreiche Unterstützung.


 

Beiträge aus den Excel-Beispielen zum Thema "daten aus Arbeitsmappe einlesen"