Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1640to1644
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

array

array
28.08.2018 17:45:48
Georg

Liebe Mitglieder, konzentriert euch einfach mal auf den Array. Wenn der code durchläuft und die Datei nicht 12 Blätter hat, sondern beispielsweise nur 10 (beginnend mit März, April..)kommt am Ende heraus:
Blatt März wurde zu Jan_2018_Name etc.
ich bin mir sicher es liegt am Array aber ich kenne mich zu wenig aus. Ich müsse 100 Dateien bearbeiten, aber nicht alle haben eben 12 Blätter. Könnt ihr mir einen Tipp geben, das wäre super. DANKE
Sub NEU()
Dim WbNeuFallzahl As Workbook
Dim ws As Worksheet
Dim BPx As String
Dim BPxLang As String
Dim strFileName As String
Dim strFilter As String
Dim strInitFileName As String
Dim i As Long
Dim wsNumber As Long
Dim arrMonat(1 To 12) As Variant
arrMonat(1) = "Jan"
arrMonat(2) = "Feb"
arrMonat(3) = "März"
arrMonat(4) = "April"
arrMonat(5) = "Mai"
arrMonat(6) = "Juni"
arrMonat(7) = "Juli"
arrMonat(8) = "Aug"
arrMonat(9) = "Sept"
arrMonat(10) = "Okt"
arrMonat(11) = "Nov"
arrMonat(12) = "Dez"
Dim arrMonatlang(1 To 12) As Variant
arrMonatlang(1) = "Januar"
arrMonatlang(2) = "Februar"
arrMonatlang(3) = "März"
arrMonatlang(4) = "April"
arrMonatlang(5) = "Mai"
arrMonatlang(6) = "Juni"
arrMonatlang(7) = "Juli"
arrMonatlang(8) = "August"
arrMonatlang(9) = "September"
arrMonatlang(10) = "Oktober"
arrMonatlang(11) = "November"
arrMonatlang(12) = "Dezember"
'DateiÖffnen Dialog
strFilter = "Excel-Dateien(*.xlsx), *.xlsx" '** Dateifilter definieren
ChDrive "Q"
ChDir "Q:\Bereitschaftspraxen\Dienstprotokolle" '** Laufwerk und Pfad  _
definieren, welcher geöffnet werden soll
'** Den im Dialogfeld gewählten Namen auslesen
strFileName = Application.GetOpenFilename(strFilter)
Set WbNeuFallzahl = Workbooks.Open(strFileName)
'** Hinweis ausgeben
MsgBox "Die Datei '" & WbNeuFallzahl.Name & "' wurde geöffnet.", vbInformation,  _
"Hinweis"
WbNeuFallzahl.Activate
Worksheets(1).Range("X1").Value = Worksheets(1).Range("B2") 'langen Namen behalten, damit ich  _
ihn später nicht wieder eingeben muss
BPxLang = Worksheets(1).Range("X1").Value
'Vorbereiten und BPx Namen kürzen, Monat kürzen
BPx = Application.InputBox("KurzName eingeben!") 'Kurznamen eingeben
For i = 1 To WbNeuFallzahl.Worksheets.Count
With WbNeuFallzahl.Worksheets(i)
.Cells(2, 2).Value = BPx 'kürzen
.Cells(4, 2).Value = arrMonat(i) ' Monat kürzen
End With
Next i
'Jeztt Blätter umbenennen
'WbNeuFallzahl.Activate
For Each ws In ActiveWorkbook.Worksheets
ws.Name = ws.Range("B4") & "_" & ws.Range("B3") & "_" & ws.Range("B2")
Next ws
'ursprügl. Namen & Monate wiederherstellen,
For i = 1 To WbNeuFallzahl.Worksheets.Count
With WbNeuFallzahl.Worksheets(i)
.Cells(2, 2).Value = BPxLang
.Cells(4, 2).Value = arrMonatlang(i)
End With
Next i
End Sub

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Rückfrage
28.08.2018 20:23:19
Fennek
Hallo,
der entscheidenden Satz ist ?

Datei nicht 12 Blätter hat, sondern beispielsweise nur 10
Wenn dem so wäre, könnte es relativ einfach gelöst werden. Ist es möglich, das Ziel genauer zu beschreiben, insbesondere die Namen der Tabellen ("Jan" oder "Januar")
mfg
AW: Danke
28.08.2018 21:18:02
Fennek
Hallo snb,
danke für den Tip, als Alternative käme auch VBA.MonthName(i) in betracht.
mfg
AW: Danke
29.08.2018 08:19:03
Luschi
Hallo Fennek,
mit   Me.ComboBox1.List = Application.GetCustomListContents(7)
bzw. Me.ComboBox1.List = Application.GetCustomListContents(8)
bekommt man die Monatsnamen auch in der Landessprache.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Rückfrage
28.08.2018 21:39:21
Sandra
Hallo Georg
Sie könnten das Problem wie nachfolgend mit einer IF-Funktion lösen, jedoch werde ich aus Ihrem Beispiel nicht ganz schlau. Sollte die Zelle X1 kein zentraler Bestandteil der Daten sein, können Sie diesen Monatsnahmen der Variable auch direkt zuordnen und müssen diese in keine separate Zelle schreiben (BPxLang = Worksheets(1).Range("B2")).
Wenn Sie die Monatsnamen kürzen möchten, dann müssen Sie zusätzlich auch das Array mit den kurzen Monatsnamen durchlaufen, weil Sie sonst immer denselben Monatsnamen hineinschreiben.
For i = 1 To WbNeuFallzahl.Worksheets.Count
if .cells(2,2).value = arrMonatlang(i) then
With WbNeuFallzahl.Worksheets(i)
.Cells(2, 2).Value = BPx 'kürzen
.Cells(4, 2).Value = arrMonat(i) ' Monat kürzen
End With
end if
Next i
For i = 1 To WbNeuFallzahl.Worksheets.Count
if .cells(4,2).value = arrMonat(i) then
With WbNeuFallzahl.Worksheets(i)
.Cells(2, 2).Value = BPxLang
.Cells(4, 2).Value = arrMonatlang(i)
End With
end if
Next i
Vielleicht hilft Ihnen diese Antwort trotzdem.
Gruß Sandra
Anzeige
AW: Rückfrage/
29.08.2018 10:32:41
Georg
Liebe MitgliederInnen,
ich komme einfach nicht klar damit, trotz der Hinweise (liegt an meinen Kenntnissen)
Vielleicht kann sich den Code nochmals jd anschauen (bitte nicht auf die Kleinigkeiten achten)
Folgende Punkte:
1. Wird eine Datei geöffent mit 12 Blättern (Jan - Dez), macht der Code genau das was er soll.
2. Es gibt aber Dateien, die beginnen unterm Jahr und haben dann beispielsweise nur 10 Blätter (März - Dezember).
Und genau hier ist das Problem, der Code überschreibt dann den März mit 2018_Jan_BPxName, April mit 2018_Feb_BPx Name usw.
Und ich habe keinen Plan wie ich es lösen kann.
Vielen Dank
Anzeige
AW: Hilft das?
29.08.2018 11:26:59
Fennek
Hallo,
offensichtlich komme ich mit dem gezeigten Code nicht zurecht.
Dieser Code prüft, ob für jeden Monat (3 Buchstaben) ein Blatt existiert. Falls nicht, wird es angelegt.

Sub T_1()
On Error Resume Next
For i = 1 To 12
Debug.Print i, Application.GetCustomListContents(7)(i)
Sheets(Application.GetCustomListContents(7)(i)).Activate
If Err.Number  0 Then
Sheets.Add(, ActiveSheet).Name = Application.GetCustomListContents(7)(i)
Err.Clear
End If
Next i
End Sub
mfg
AW: Hilft das? Leider nein
29.08.2018 11:42:36
Georg
.. die Datei soll so erhalten bleiben wie sie ist: wenn eine Datei im März anfängt, soll es auch so bleiben.
Ich muss wohl eine andere Lösung suchen. Danke für die Unterstützung
Anzeige
AW: array
29.08.2018 12:45:49
Rudi
Hallo,
teste mal:
Sub NEU()
Dim WbNeuFallzahl As Workbook
Dim BPx As String
Dim strFilter As String
Dim strFileName As String
Dim i As Long
Dim arrName, arrMonat(1 To 12), arrMonatLang(1 To 12)
For i = 1 To 12
arrMonat(i) = MonthName(i, 1)
arrMonatLang(i) = MonthName(i)
Next i
'DateiÖffnen Dialog
strFilter = "Excel-Dateien(*.xlsx), *.xlsx" '** Dateifilter definieren
ChDrive "Q"
ChDir "Q:\Bereitschaftspraxen\Dienstprotokolle" '** Laufwerk und Pfad _
definieren, welcher geöffnet werden soll
'** Den im Dialogfeld gewählten Namen auslesen
strFileName = Application.GetOpenFilename(strFilter)
Set WbNeuFallzahl = Workbooks.Open(strFileName)
'** Hinweis ausgeben
MsgBox "Die Datei '" & WbNeuFallzahl.Name & "' wurde geöffnet.", vbInformation, _
"Hinweis"
WbNeuFallzahl.Activate
'Vorbereiten und BPx Namen kürzen, Monat kürzen
BPx = Application.InputBox("KurzName eingeben!") 'Kurznamen eingeben
For i = 1 To WbNeuFallzahl.Worksheets.Count
With WbNeuFallzahl.Worksheets(i)
arrName = Split(.Name, "_")
arrName(0) = arrMonat(Application.Match(arrName(0), arrMonatLang, 0))
arrName(2) = BPx
.Name = Join(arrName, "_")
End With
Next i
End Sub

Gruß
Rudi
Anzeige
AW: array ! Es kommt ein laufzeitfehler..
29.08.2018 13:11:35
Georg
...hier, lieber Rudi:
arrName(2) = BPx (5. Zeile von unten)
Laufzeitfehler, Index außerhalb des gültigen Bereiches.
AW: array ! Es kommt ein laufzeitfehler..
29.08.2018 13:13:37
Werner
Hallo Georg,
und so?
x = WbNeuFallzahlWorksheets.Count + 1 - WbNeuFallzahl.Worksheets.Count
For i = 1 To WbNeuFallzahl.Worksheets.Count
With WbNeuFallzahl.Worksheets(i)
.Cells(2, 2).Value = BPx 'kürzen
.Cells(4, 2).Value = arrMonat(x) ' Monat kürzen
x = x + 1
End With
Next i
Dann bei der Langversion der Monatsnamen dann analog.
Wenn ich das richtig sehe, hast du ja in deinen Dateien nur die Monatsblätter und sonst keine zusätzlichen Blätter.
Gruß Werner
Anzeige
AW: array ! Es geht...DANKE...
29.08.2018 13:38:51
Georg
..lieber Werner, ich musste nur noch die x Variable anpassen, da der Code wieder Blätter hinzugefügt hat, aber da bin dann doch noch selber draufgekommen.
Somit kann ich ca. 120 Dateien umbenennen, erforderlich für Power Query, SUPER!!!
MaxWs = 12 'mehr als 12 Monate gibt es nicht
x = MaxWs - WbNeuFallzahl.Worksheets.Count + 1
Gerne u. Danke für die Rückmeldung...
29.08.2018 13:53:00
Werner
Hallo Georg,
...das hatte ich eigentlich auch so drin, hab versehentlich eine falsche Zeile rein kopiert.
Du kannst auch gleich
x = 12 - Worksheets.Count + 1

schreiben.
Gruß Werner
AW: array ! Es geht...DANKE...
29.08.2018 14:49:04
Werner
Hallo Georg,
offensichtlich geht es dir nur darum die Monatsschreibweise der Blattnamen von Lang (Januar, Februar...)
auf kurz (Jan, Feb...) umzustellen.
In den jeweiligen Monatsblättern hast du ja wohl in einer Zelle die lange Schreibweise, die dort aber auch so bleiben soll.
Dann geht das Ganze doch auch ohne die vorherige Erfassung der Monate in einem Array und ohne das ständige Ändern des Zellinhaltes von lang auf kurz und wieder zurück.
Dim WbNeuFallzahl As Workbook
Dim strFileName As String, strFilter As String, strInitFileName As String
Dim i As Long, x As Long, daDatum As Date
'DateiÖffnen Dialog
strFilter = "Excel-Dateien(*.xlsx), *.xlsx" '** Dateifilter definieren
ChDrive "Q"
ChDir "Q:\Bereitschaftspraxen\Dienstprotokolle" '** Laufwerk und Pfad _
definieren, welcher geöffnet werden soll
'** Den im Dialogfeld gewählten Namen auslesen
strFileName = Application.GetOpenFilename(strFilter)
Set WbNeuFallzahl = Workbooks.Open(strFileName)
'** Hinweis ausgeben
MsgBox "Die Datei '" & WbNeuFallzahl.Name & "' wurde geöffnet.", vbInformation, "Hinweis"
x = 12 - WbNeuFallzahl.Worksheets.Count + 1
For i = 1 To WbNeuFallzahl.Worksheets.Count
With WbNeuFallzahl.Worksheets(i)
daDatum = DateSerial(2018, x, 1)
.Name = Format(daDatum, "MMM") & "_" & .Range("B3") & "_" & .Range("B2")
x = x + 1
End With
Next i
Gruß Werner
Anzeige
AW: array ! Es kommt ein laufzeitfehler..
29.08.2018 14:02:40
Rudi
Hallo,
Blattname muss dem Schema
MonatLang_BeliebigerText_BPxLang (März_abcde_fghijk)
folgen.
Gruß
Rudi

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige