Datenimport und Diagrammerstellung
01.04.2020 12:22:41
Dominik
ich möchte mehrere .txt-Dateien in eine Excel Arbeitsmappe importieren.
Aus diesen Dateien soll ein Diagramm erstellt werden, mit y-Achse primär und sekundär.
In der angehängten Excel Tabelle wären die Daten für das Diagramm:
x-Achse A39 bis Ende
y primär C39 bis Ende
y sekundär F39 bis Ende
Dazu habe ich ein Makro gefunden, das gut zu meiner Aufgabe passt.
Mein Problem allerdings ist, dass ich im Makro nicht die Bereiche definieren kann, die den jeweiligen Achsen zugeordnet werden sollen
Kann mir das jemand weiterhelfen?
https://www.herber.de/bbs/user/136317.txt
Sub blattimportieren()
Dim ordner As Variant, wbAct As Workbook, wbNeu As Workbook, Abfrage
Dim objBlatt As Worksheet
Dim strBlattName As String
Dim i As Integer
Dim j As Integer
Dim k As Variant
Dim Bereich As Range
Dim AnzZeilen As Long
Abfrage = vbYes 'Initialisierung
Application.ScreenUpdating = False
'Löschen aller Arbeitsblätter bis auf das erste
Application.DisplayAlerts = False
strBlattName = "Tabelle1"
On Error Resume Next
Worksheets(strBlattName).Activate
If Err.Number 0 Then
Err.Clear
End If
For Each objBlatt In Sheets
If objBlatt.Name "Tabelle1" Then objBlatt.Delete
Next
Application.DisplayAlerts = True
'Import der Dateien
Do Until Abfrage = vbNo
ordner = Application.GetOpenFilename("Alle Dateien,*.*")
If ordner = False Then Exit Sub
Set wbAct = ActiveWorkbook
Set wbNeu = Workbooks.Open(ordner)
wbNeu.Sheets.Copy After:=wbAct.Sheets(1)
wbAct.Activate
wbNeu.Close False
Abfrage = MsgBox("Weitere Datei importieren?", vbYesNo, "Abfrage")
Loop
'Löschen der übrigen Tabellenblätter
Application.DisplayAlerts = False
Sheets("Tabelle1").Select
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
MsgBox ("Import beendet." & Chr(13) & Chr(13) & "Diagrammerstellung beginnt.")
'Kopieren relevanter Daten in Tabellenblatt Zusammenfassung
Sheets.Add
ActiveSheet.Name = "Zusammenfassung"
i = 1
j = 1
Sheets(i + 1).Select
Rows(3).Copy
Sheets(1).Cells(j, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Do Until i = Worksheets.Count
i = i + 1
j = j + 1
Sheets(i).Select
AnzZeilen = IIf(Len(Cells(Rows.Count, 1)), Rows.Count, Cells(Rows.Count, 1).End(xlUp). _
Row)
Rows(AnzZeilen).Copy
Sheets(1).Cells(j, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Range("B5").Copy
Sheets(1).Cells(j, 3).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Loop
Sheets(1).Activate
Columns("C:C").NumberFormat = "0"
'Daten aufbereiten und Diagramm erstellen
k = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Range("C1").ClearContents
Columns("A:B").Delete Shift:=xlToLeft
Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Charts.Add
ActiveChart.ChartType = xl3DArea
ActiveChart.SetSourceData Source:=Sheets("Zusammenfassung").Rows("1:" & k), _
PlotBy:=xlRows
ActiveChart.Location Where:=xlLocationAsNewSheet
With ActiveChart
.HasTitle = False
.Axes(xlCategory).HasTitle = True
.Axes(xlCategory).AxisTitle.Characters.Text = "Frequenz"
.Axes(xlSeries).HasTitle = True
.Axes(xlSeries).AxisTitle.Characters.Text = "Drehzahl"
.Axes(xlValue).HasTitle = True
.Axes(xlValue).AxisTitle.Characters.Text = "Amplitude"
End With
With ActiveChart.Axes(xlCategory)
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
With ActiveChart.Axes(xlSeries)
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
With ActiveChart.Axes(xlValue)
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
ActiveChart.WallsAndGridlines2D = False
ActiveChart.HasLegend = False
'Löschen der importierten Tabellenblätter
Application.DisplayAlerts = False
strBlattName = "Tabelle1"
On Error Resume Next
Worksheets(strBlattName).Activate
If Err.Number 0 Then
Err.Clear
End If
For Each objBlatt In Sheets
If objBlatt.Name "Zusammenfassung" And objBlatt.Name "Diagramm1" Then objBlatt.Delete
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Manche Teile des Makros scheinen außerdem völlig belanglos zu sein.
Bspw. dieser hier hat überhaupt keinen Effekt:
'Löschen aller Arbeitsblätter bis auf das erste
Application.DisplayAlerts = False
strBlattName = "Tabelle1"
On Error Resume Next
Worksheets(strBlattName).Activate
If Err.Number 0 Then
Err.Clear
End If
For Each objBlatt In Sheets
If objBlatt.Name "Tabelle1" Then objBlatt.Delete
Next
Application.DisplayAlerts = True