Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1264to1268
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

variable Chart und Worksheet ohne Makros speichern

variable Chart und Worksheet ohne Makros speichern
Thomas
Hallo an Alle,
in dem unten stehenden Code wird eine Text-Datei in ein neues Tabellenblatt importiert und daraus in einem neuen Tabellenblatt ein Diagramm erzeugt. Anschließend wird die Mappe unter dem Tabellenblattnamen in einer neuen Mappe gespeichert und die beiden erzeugten Tabellenblätter in der alten Mappe gelöscht. In der alten Mappe ist ein Tabellenblatt Namens "Clear".
Nun hab ich folgendes Problem, ich möchte nur die beiden neu erzeugten Tabellenblätter in eine neue Mappe speichern ohne Makros und ohne das in der "alten Mappe" bestehenden Tabellenblatt "Clear".
Ich weiß nicht ob man die beiden neu erzeugten Tabellenblätter darüber ansprechen kann, dass beide ein "_" im variablen Namen haben oder gleich sagen kann alles speichern außer worksheet "clear", aber da müssten dann wieder die Makros dabei sein.
Sorry für das Durcheinander im Code, bin Anfänger.
Die betreffenden Codezeilen sind:
'Excelfile generieren
strFileName = ThisWorkbook.Path & "\" & Name & _
"_(" & Format(Date, "dd.mm.yy") & "_" & Format(Time, "mm.ss") & ")" & ".xls"
'"\" & Range("B6") & "_" & Range("B7") & "µm.xls"
wkb.SaveCopyAs Filename:=strFileName

Vielen Danke im Voraus!
Zum Verständnis der ganze Code:
Sub OpenTextFile()
Application.ScreenUpdating = False
'Textfiles auslesen
Dim varRetVal     As Variant
Dim strFileName   As String
ChDrive ThisWorkbook.Path
ChDir ThisWorkbook.Path
'Import
varRetVal = Application.GetOpenFilename( _
FileFilter:="Text-Dateien (*.txt), *.txt", _
Title:="Daten aus Text-Datei importieren")
If varRetVal = False Then Exit Sub
'If varRetVal  "False" Or varRetVal  "Falsch" Then
strFileName = varRetVal
ActiveWorkbook.Worksheets.Add
With ActiveSheet.QueryTables.Add(Connection:="Text;" + varRetVal, _
Destination:=Range("A1"))
.Name = strFileName
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1)
.TextFileDecimalSeparator = "."
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
'Tabellenblattname
'Namen+Pfad der Textdatei in Tabelle einfügen
ActiveSheet.Range("D1") = Left(strFileName, Len(strFileName) - 4)
Dim wks As Worksheet
Dim Name As String
Dim wkb As Workbook
Set wks = ActiveSheet
Set wkb = ActiveWorkbook
'Sonderzeichen ersetzen
Dim i As Long, Zelle As Range
Dim Zeichen As String
With wks
For Each Zelle In .Range("B6:B7")
For i = 1 To Len(Zelle.Text)
Zeichen = Mid(Zelle.Text, i, 1)
Select Case Zeichen
Case "/"
Zelle.Value = Left(Zelle.Text, i - 1) & " " & Right(Zelle.Text, Len(Zelle.Text) - i)
Case "\"
Zelle.Value = Left(Zelle.Text, i - 1) & " " & Right(Zelle.Text, Len(Zelle.Text) - i)
Case ":"
Zelle.Value = Left(Zelle.Text, i - 1) & " " & Right(Zelle.Text, Len(Zelle.Text) - i)
Case "*"
Zelle.Value = Left(Zelle.Text, i - 1) & " " & Right(Zelle.Text, Len(Zelle.Text) - i)
Case "?"
Zelle.Value = Left(Zelle.Text, i - 1) & " " & Right(Zelle.Text, Len(Zelle.Text) - i)
Case ">"
Zelle.Value = Left(Zelle.Text, i - 1) & " " & Right(Zelle.Text, Len(Zelle.Text) - i)
Case "'Excelfile generieren
strFileName = ThisWorkbook.Path & "\" & Name & _
"_(" & Format(Date, "dd.mm.yy") & "_" & Format(Time, "mm.ss") & ")" & ".xls"
'"\" & Range("B6") & "_" & Range("B7") & "µm.xls"
wkb.SaveCopyAs Filename:=strFileName
' Alle Register löschen bis auf Register Tabelle1
Dim T As Integer
Application.DisplayAlerts = False
For T = ActiveWorkbook.Worksheets.Count To 1 Step -1
If Worksheets(T).Name  "Clear" Then _
Worksheets(T).Delete
Next T
'Charts().Delete
For P = ActiveWorkbook.Charts.Count To 1 Step -1
If Charts(P).Name  "Clear" Then _
Charts(P).Delete
Next P
Application.DisplayAlerts = True
Workbooks.Open Filename:=strFileName
Set wkb = Nothing
Set wks = Nothing
Application.ScreenUpdating = True
End Sub

Gruß Thomas

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: variable Chart und Worksheet ohne Makros speichern
04.06.2012 16:48:59
fcs
Hallo Thomas,
du kannst die DatenTabelle und das Diagramm auch direkt in einer neuen Arbeitsmappe generieren. So umgehst du das Problem mit den Makros.
Hier mal die entsprechendne Anpassungen in deinem Code (Zeillen sind markiert mit '######
Gruß
Franz
P.S. Zusatzhinweise:
1. Dim-Anweisungen alle am Beginn der Prozedur, nicht mitten in den Makros
2. Zeitstempel im Dateinamen
bevorzugt im Format YYYY-MM-DD hh_mm_ss
Dann kann man gleiche Dateinamen gut sortieren.
3. In deinem wohl aus aufgezeichneten Makrostücken zusammengesetzten Code wiederholen sich einige Abschnitte mit unterschiedlichen Parameter-Werten.
z. B.
With ActiveChart.Axes(xlCategory)
.CrossesAt = 1
.TickLabelSpacing = 2
.TickMarkSpacing = 2
.AxisBetweenCategories = True
.ReversePlotOrder = False
End With
Hier solltes du etwas aufräumen, so dass nur die Anweisungen mit den Formatierungen übrig bleiben, die du am Ende haben möchtest.
Sub OpenTextFile()
Application.ScreenUpdating = False
'Textfiles auslesen
Dim wbkChart As Workbook
Dim varRetVal     As Variant
Dim strFileName   As String
ChDrive ThisWorkbook.Path
ChDir ThisWorkbook.Path
'Import
varRetVal = Application.GetOpenFilename( _
FileFilter:="Text-Dateien (*.txt), *.txt", _
Title:="Daten aus Text-Datei importieren")
If varRetVal = False Then Exit Sub
'If varRetVal  "False" Or varRetVal  "Falsch" Then
strFileName = varRetVal
Set wbkChart = Workbooks.Add(Template:=xlWBATWorksheet)       '###############
'   ActiveWorkbook.Worksheets.Add                               '###############
With ActiveSheet.QueryTables.Add(Connection:="Text;" + varRetVal, _
Destination:=Range("A1"))
.Name = strFileName
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1)
.TextFileDecimalSeparator = "."
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
'Tabellenblattname
'Namen+Pfad der Textdatei in Tabelle einfügen
ActiveSheet.Range("D1") = Left(strFileName, Len(strFileName) - 4)
Dim wks As Worksheet
Dim Name As String
'Dim wkb As Workbook                                                 '###########
Set wks = ActiveSheet
'Set wkb = ActiveWorkbook                                            '###########
'Sonderzeichen ersetzen
Dim i As Long, Zelle As Range
Dim Zeichen As String
With wks
For Each Zelle In .Range("B6:B7")
For i = 1 To Len(Zelle.Text)
Zeichen = Mid(Zelle.Text, i, 1)
Select Case Zeichen
Case "/"
Zelle.Value = Left(Zelle.Text, i - 1) & " " & Right(Zelle.Text, Len(Zelle.Text) - i)
Case "\"
Zelle.Value = Left(Zelle.Text, i - 1) & " " & Right(Zelle.Text, Len(Zelle.Text) - i)
Case ":"
Zelle.Value = Left(Zelle.Text, i - 1) & " " & Right(Zelle.Text, Len(Zelle.Text) - i)
Case "*"
Zelle.Value = Left(Zelle.Text, i - 1) & " " & Right(Zelle.Text, Len(Zelle.Text) - i)
Case "?"
Zelle.Value = Left(Zelle.Text, i - 1) & " " & Right(Zelle.Text, Len(Zelle.Text) - i)
Case ">"
Zelle.Value = Left(Zelle.Text, i - 1) & " " & Right(Zelle.Text, Len(Zelle.Text) - i)
Case "

Anzeige
AW: Nachtrag
04.06.2012 17:48:29
fcs
Hallo Thomas,
ich konnte das Elend nicht mehr ansehen und hab dein Makro mal bereinigt und in eine "select-/selection-freie" Zone verwandelt.
Gruß
Franz
Sub OpenTextFile()
'Textfiles auslesen
Dim wbkChart As Workbook
Dim objChart As Chart
Dim wks As Worksheet
Dim varRetVal     As Variant
Dim strFileName   As String
Dim strName As String
Dim i As Long, Zelle As Range
Dim lz As Integer
Application.ScreenUpdating = False
ChDrive ThisWorkbook.Path
ChDir ThisWorkbook.Path
'Import
varRetVal = Application.GetOpenFilename( _
FileFilter:="Text-Dateien (*.txt), *.txt", _
Title:="Daten aus Text-Datei importieren")
If varRetVal = False Then Exit Sub
strFileName = varRetVal
'neue Mappe für Daten und Diagramm
Set wbkChart = Workbooks.Add(Template:=xlWBATWorksheet)
Set wks = ActiveSheet
With wks.QueryTables.Add(Connection:="Text;" + varRetVal, _
Destination:=wks.Range("A1"))
.Name = strFileName
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1)
.TextFileDecimalSeparator = "."
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
'Tabellenblattname
'Namen+Pfad der Textdatei in Tabelle einfügen
wks.Range("D1") = Left(strFileName, Len(strFileName) - 4)
'Sonderzeichen ersetzen
With wks
For Each Zelle In .Range("B6:B7")
Zelle.Value = VBA.Replace(Zelle.Text, "/", " ")
Zelle.Value = VBA.Replace(Zelle.Text, "\", " ")
Zelle.Value = VBA.Replace(Zelle.Text, ":", " ")
Zelle.Value = VBA.Replace(Zelle.Text, "*", " ")
Zelle.Value = VBA.Replace(Zelle.Text, "?", " ")
Zelle.Value = VBA.Replace(Zelle.Text, ">", " ")
Zelle.Value = VBA.Replace(Zelle.Text, "

Anzeige
AW: Nachtrag
04.06.2012 20:21:08
Thomas
Ach Franz,
Vielen Dank! Bin gerade von Arbeit nach Hause gekommen und wollte den Code anpassen und nach deinen Tipps bereinigen/ strukturieren. Und nun dieses nette Geschenk. Danke für deine Arbeit und Mühe!
Ich wünsch Dir einen schönen Abend!
Gruß Thomas
P.s. der Code funktioniert wunderbar! Ich werde mir noch in Ruhe anschauen wie und was du geändert hast.

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige