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
1476to1480
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
"Do ohne Loop" wer findet den Fehler
26.02.2016 10:26:17
Dove
Hallo Zusammen,
ich hoffe ihr habt ein wenig Zeit und Lust :) nach einem kleinen Fehler zu suchen.
Ich bekommen ständig die Fehlermedlung "Do ohne Loop". Kommt ja auch wenn ein IF zu viel da ist.
Da ich schon seit Stunden den Fehler nicht finde und vermutlich blind bin, könnt ihr mir helfen?
Sub mit_anderer_JA_NEIN_Abfrage()
' Worksheet3 wird ausgewählt und in der ersten Zeile Zellen mit "/" durch "_" ersetzt, damit spä _
_
ter die Reiter benannt werden können
Worksheets(3).Select
Rows(1).Select
Selection.Replace What:="/", Replacement:="_", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Do
On Error Resume Next
strS = InputBox("Suchbegriff:", Value  "", strS)
If StrPtr(strS) = 0 Or Len(strS) = 0 Then Exit Do
Set rngT = Rows(1).Find(What:=strS, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False).EntireColumn.Copy
Sheets.Add After:=Worksheets(Worksheets.Count)
Sheets(Worksheets.Count).Paste Destination:=Sheets(Worksheets.Count).Columns("X:X")
ActiveSheet.Name = Range("X1")
' Spalte wird nach leeren Zeilen durchsucht. Falls gefunden wird "keine Angabe" in die  _
Leerzeile eingetragen
Dim zelle As Range
Dim bereich As Range
Set bereich = Range("X1:X5000")
For Each zelle In bereich
If zelle.Value = "" Then zelle.Value = "keine Angabe gemacht"
Next zelle
' Es erscheint eine Ja/Nein Abfrage ob der Zellinhalt getrennt werden soll. Dabei wird nach  _
Komma gesucht
Dim a
Dim rngFound As Range
Dim ar As Variant
Dim i As Integer
Dim rngSource As Range
If MsgBox("Wollen Sie denn Zellinhalt trennen", vbYesNo) = vbYes Then
Set rngSource = ActiveSheet.Range("X:X")
With rngSource.EntireColumn
Set rngFound = .Find(What:=",", LookIn:=xlFormulas, LookAt:=xlPart)
While Not rngFound Is Nothing
ar = Split(rngFound.Value, ",")
.Rows(rngFound.Row + 1).Resize(UBound(ar)).Insert xlShiftDown
For i = 0 To UBound(ar)
rngFound.Offset(i, 0).Value = ar(i)
Next
Set rngFound = .FindNext(rngFound)
Wend
End With
' PivotTabelle wird erstellt
Dim pt As PivotTable
Dim cacheofpt As PivotCache
Dim pf As PivotField
Dim pi As PivotItem
With rngSource
Set cacheofpt = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:="'" & rngSource.Parent.Name & "'!" _
& rngSource.Range("A1").Address(True, True, xlR1C1) & ":" _
& .Parent.Cells(.Row + .Rows.Count - 1, .Column).Address(True, True, xlR1C1))
End With
Set pt = cacheofpt.CreatePivotTable(TableDestination:=ActiveSheet.Range("A1"))
With pt
With .PivotFields(rngSource.Range("A1").Text)
.Orientation = xlRowField
.Position = 1
End With
End With
' BalkenChart wird erstellt
With Charts.Add
.ChartType = xlColumnClustered
.ApplyLayout (5)
.ClearToMatchStyle
.ChartStyle = 3
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Worksheets(Worksheets.Count).Range("X1" _
_
)
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Anzahl der Tickets"
.SetSourceData Source:=ActiveSheet.Range("b1"), PlotBy:=xlColumns
.Location where:=xlLocationAsObject, Name:="Diagramm"
ActiveChart.HasLegend = True
ActiveChart.Legend.Select
Selection.Position = xlRight
ActiveChart.HasTitle = False
End With
Worksheets(3).Select
' Diagramme werden angeordnet. 3 Diagramme pro Zeile
Dim objShape As ChartObject, MerkShape As ChartObject
Dim iCount As Integer
iCount = 1
For Each objShape In Sheets("Diagramm").ChartObjects
With objShape
If MerkShape Is Nothing Then
.Left = 10
.Top = 150
Else
iCount = IIf(iCount = 3, 1, iCount + 1)
If iCount > 1 Then
.Top = MerkShape.Top
.Left = MerkShape.Left + MerkShape.Width + 100
Else
.Left = 10
.Top = MerkShape.Top + MerkShape.Height + 100
End If
End If
Set MerkShape = objShape
End With
Next objShape
Else
With rngSource
Set cacheofpt = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:="'" & rngSource.Parent.Name & "'!" _
& rngSource.Range("A1").Address(True, True, xlR1C1) & ":" _
& .Parent.Cells(.Row + .Rows.Count - 1, .Column).Address(True, True, xlR1C1))
End With
Set pt = cacheofpt.CreatePivotTable(TableDestination:=ActiveSheet.Range("A1"))
With pt
With .PivotFields(rngSource.Range("A1").Text)
.Orientation = xlRowField
.Position = 1
End With
End With
' BalkenChart wird erstellt
With Charts.Add
.ChartType = xlColumnClustered
.ApplyLayout (5)
.ClearToMatchStyle
.ChartStyle = 3
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Worksheets(Worksheets.Count).Range("X1" _
_
)
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Anzahl der Tickets"
.SetSourceData Source:=ActiveSheet.Range("b1"), PlotBy:=xlColumns
.Location where:=xlLocationAsObject, Name:="Diagramm"
ActiveChart.HasLegend = True
ActiveChart.Legend.Select
Selection.Position = xlRight
ActiveChart.HasTitle = False
End With
Worksheets(3).Select
Loop
' Diagramme werden angeordnet. 3 Diagramme pro Zeile
Dim objShape As ChartObject, MerkShape As ChartObject
Dim iCount As Integer
iCount = 1
For Each objShape In Sheets("Diagramm").ChartObjects
With objShape
If MerkShape Is Nothing Then
.Left = 10
.Top = 150
Else
iCount = IIf(iCount = 3, 1, iCount + 1)
If iCount > 1 Then
.Top = MerkShape.Top
.Left = MerkShape.Left + MerkShape.Width + 100
Else
.Left = 10
.Top = MerkShape.Top + MerkShape.Height + 100
End If
End If
Set MerkShape = objShape
End With
Next objShape
End If
End Sub
Vielen Dank für die Mühe

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: "Do ohne Loop" wer findet den Fehler
26.02.2016 10:37:18
Mullit
Hallo,
....oder ein End If zu wenig....;-)
Gruß, Mullit

AW: "Do ohne Loop" wer findet den Fehler
26.02.2016 11:00:45
Rudi
Hallo,
hier ist schon ein Fehler:
strS = InputBox("Suchbegriff:", Value  "", strS)
Dim alle an den Anfang des Codes!
Ansonsten fehlt wahrscheinlich hierfür das End If oder sitzt falsch.
    If MsgBox("Wollen Sie denn Zellinhalt trennen", vbYesNo) = vbYes Then
Gruß
Rudi

AW: "Do ohne Loop" wer findet den Fehler
26.02.2016 11:13:47
Werner
Hallo,
ich hab mal die If-Anweisungen und die End If durchnummeriert. Ich hoffe ich habe nichts übersehen, sitze an meinem Tablet.
Schau es mal an.
Sub mit_anderer_JA_NEIN_Abfrage()
' Worksheet3 wird ausgewählt und in der ersten Zeile Zellen mit "/" durch "_" ersetzt, damit spä _
_
_
ter die Reiter benannt werden können
Worksheets(3).Select
Rows(1).Select
Selection.Replace What:="/", Replacement:="_", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Do
On Error Resume Next
strS = InputBox("Suchbegriff:", Value  "", strS)
If StrPtr(strS) = 0 Or Len(strS) = 0 Then Exit Do '## 0 ##
Set rngT = Rows(1).Find(What:=strS, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False).EntireColumn.Copy
Sheets.Add After:=Worksheets(Worksheets.Count)
Sheets(Worksheets.Count).Paste Destination:=Sheets(Worksheets.Count).Columns("X:X")
ActiveSheet.Name = Range("X1")
' Spalte wird nach leeren Zeilen durchsucht. Falls gefunden wird "keine Angabe" in die  _
Leerzeile eingetragen
Dim zelle As Range
Dim bereich As Range
Set bereich = Range("X1:X5000")
For Each zelle In bereich
If zelle.Value = "" Then zelle.Value = "keine Angabe gemacht" '## 0 ##
Next zelle
' Es erscheint eine Ja/Nein Abfrage ob der Zellinhalt getrennt werden soll. Dabei wird nach  _
Komma gesucht
Dim a
Dim rngFound As Range
Dim ar As Variant
Dim i As Integer
Dim rngSource As Range
If MsgBox("Wollen Sie denn Zellinhalt trennen", vbYesNo) = vbYes Then '## 1 ##
Set rngSource = ActiveSheet.Range("X:X")
With rngSource.EntireColumn
Set rngFound = .Find(What:=",", LookIn:=xlFormulas, LookAt:=xlPart)
While Not rngFound Is Nothing
ar = Split(rngFound.Value, ",")
.Rows(rngFound.Row + 1).Resize(UBound(ar)).Insert xlShiftDown
For i = 0 To UBound(ar)
rngFound.Offset(i, 0).Value = ar(i)
Next
Set rngFound = .FindNext(rngFound)
Wend
End With
' PivotTabelle wird erstellt
Dim pt As PivotTable
Dim cacheofpt As PivotCache
Dim pf As PivotField
Dim pi As PivotItem
With rngSource
Set cacheofpt = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:="'" & rngSource.Parent.Name & "'!" _
& rngSource.Range("A1").Address(True, True, xlR1C1) & ":" _
& .Parent.Cells(.Row + .Rows.Count - 1, .Column).Address(True, True, xlR1C1))
End With
Set pt = cacheofpt.CreatePivotTable(TableDestination:=ActiveSheet.Range("A1"))
With pt
With .PivotFields(rngSource.Range("A1").Text)
.Orientation = xlRowField
.Position = 1
End With
End With
' BalkenChart wird erstellt
With Charts.Add
.ChartType = xlColumnClustered
.ApplyLayout (5)
.ClearToMatchStyle
.ChartStyle = 3
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Worksheets(Worksheets.Count).Range("X1" _
_
_
)
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Anzahl der Tickets"
.SetSourceData Source:=ActiveSheet.Range("b1"), PlotBy:=xlColumns
.Location where:=xlLocationAsObject, Name:="Diagramm"
ActiveChart.HasLegend = True
ActiveChart.Legend.Select
Selection.Position = xlRight
ActiveChart.HasTitle = False
End With
Worksheets(3).Select
' Diagramme werden angeordnet. 3 Diagramme pro Zeile
Dim objShape As ChartObject, MerkShape As ChartObject
Dim iCount As Integer
iCount = 1
For Each objShape In Sheets("Diagramm").ChartObjects
With objShape
If MerkShape Is Nothing Then '## 2 ##
.Left = 10
.Top = 150
Else
iCount = IIf(iCount = 3, 1, iCount + 1)
If iCount > 1 Then '## 3 ##
.Top = MerkShape.Top
.Left = MerkShape.Left + MerkShape.Width + 100
Else
.Left = 10
.Top = MerkShape.Top + MerkShape.Height + 100
End If '## 2 ##
End If '## 1 ##
Set MerkShape = objShape
End With
Next objShape
Else
With rngSource
Set cacheofpt = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:="'" & rngSource.Parent.Name & "'!" _
& rngSource.Range("A1").Address(True, True, xlR1C1) & ":" _
& .Parent.Cells(.Row + .Rows.Count - 1, .Column).Address(True, True, xlR1C1))
End With
Set pt = cacheofpt.CreatePivotTable(TableDestination:=ActiveSheet.Range("A1"))
With pt
With .PivotFields(rngSource.Range("A1").Text)
.Orientation = xlRowField
.Position = 1
End With
End With
' BalkenChart wird erstellt
With Charts.Add
.ChartType = xlColumnClustered
.ApplyLayout (5)
.ClearToMatchStyle
.ChartStyle = 3
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Worksheets(Worksheets.Count).Range("X1" _
_
_
)
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Anzahl der Tickets"
.SetSourceData Source:=ActiveSheet.Range("b1"), PlotBy:=xlColumns
.Location where:=xlLocationAsObject, Name:="Diagramm"
ActiveChart.HasLegend = True
ActiveChart.Legend.Select
Selection.Position = xlRight
ActiveChart.HasTitle = False
End With
Worksheets(3).Select
'Hier bist du noch in einem Else-Zweig, hast also noch ein End If offen
Loop
' Diagramme werden angeordnet. 3 Diagramme pro Zeile
Dim objShape As ChartObject, MerkShape As ChartObject
Dim iCount As Integer
iCount = 1
For Each objShape In Sheets("Diagramm").ChartObjects
With objShape
If MerkShape Is Nothing Then '## 2 ##
.Left = 10
.Top = 150
Else
iCount = IIf(iCount = 3, 1, iCount + 1)
If iCount > 1 Then '## 3 ##
.Top = MerkShape.Top
.Left = MerkShape.Left + MerkShape.Width + 100
Else
.Left = 10
.Top = MerkShape.Top + MerkShape.Height + 100
End If '## 2 ##
End If '## 1 ##
Set MerkShape = objShape
End With
Next objShape
End If '## 0 ##
End Sub
Gruß Werner

Anzeige
AW: "Do ohne Loop" wer findet den Fehler
29.02.2016 10:56:33
Dove
Vielen Dank für die Mühe,
@ Rudi, danke dir, aber da lag der Fehler nicht.
@ Werner, hat mir sehr geholfen.
Hab das Makro bisschen abgeändert und schon hats funktioniert. Hab den Teil vor dem ELSE mit einem GoTo überbrückt und schon hats funktioniert.
Danke euch beiden trotzem

AW: "Do ohne Loop" wer findet den Fehler
29.02.2016 11:22:57
Mullit
Hallo,
..na, na, nu wollen wir aber Rudi mal nicht Unrecht tun, dann zeig mir mal zu der IF-THEN-ELSE Anweisung Dein END IF.....
Do
On Error Resume Next
strS = InputBox("Suchbegriff:", Value <> "", strS)
If StrPtr(strS) = 0 Or Len(strS) = 0 Then Exit Do
Set rngT = Rows(1).Find(What:=strS, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False).EntireColumn.Copy
Sheets.Add After:=Worksheets(Worksheets.Count)
Sheets(Worksheets.Count).Paste Destination:=Sheets(Worksheets.Count).Columns("X:X")
ActiveSheet.Name = Range("X1")
' Spalte wird nach leeren Zeilen durchsucht. Falls gefunden wird "keine Angabe" in die  _
Leerzeile eingetragen
Dim zelle As Range
Dim bereich As Range
Set bereich = Range("X1:X5000")
For Each zelle In bereich
If zelle.Value = "" Then zelle.Value = "keine Angabe gemacht"
Next zelle
' Es erscheint eine Ja/Nein Abfrage ob der Zellinhalt getrennt werden soll. Dabei wird nach  _
Komma gesucht
Dim a
Dim rngFound As Range
Dim ar As Variant
Dim i As Integer
Dim rngSource As Range
If  _
MsgBox("Wollen Sie denn Zellinhalt trennen", vbYesNo) = vbYes Then
Set rngSource = ActiveSheet.Range("X:X")
With rngSource.EntireColumn
Set rngFound = .Find(What:=",", LookIn:=xlFormulas, LookAt:=xlPart)
While Not rngFound Is Nothing
ar = Split(rngFound.Value, ",")
.Rows(rngFound.Row + 1).Resize(UBound(ar)).Insert xlShiftDown
For i = 0 To UBound(ar)
rngFound.Offset(i, 0).Value = ar(i)
Next
Set rngFound = .FindNext(rngFound)
Wend
End With
' PivotTabelle wird erstellt
Dim pt As PivotTable
Dim cacheofpt As PivotCache
Dim pf As PivotField
Dim pi As PivotItem
With rngSource
Set cacheofpt = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:="'" & rngSource.Parent.Name & "'!" _
& rngSource.Range("A1").Address(True, True, xlR1C1) & ":" _
& .Parent.Cells(.Row + .Rows.Count - 1, .Column).Address(True, True, xlR1C1))
End With
Set pt = cacheofpt.CreatePivotTable(TableDestination:=ActiveSheet.Range("A1"))
With pt
With .PivotFields(rngSource.Range("A1").Text)
.Orientation = xlRowField
.Position = 1
End With
End With
' BalkenChart wird erstellt
With Charts.Add
.ChartType = xlColumnClustered
.ApplyLayout (5)
.ClearToMatchStyle
.ChartStyle = 3
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Worksheets(Worksheets.Count).Range("X1" _
_
_
)
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Anzahl der Tickets"
.SetSourceData Source:=ActiveSheet.Range("b1"), PlotBy:=xlColumns
.Location where:=xlLocationAsObject, Name:="Diagramm"
ActiveChart.HasLegend = True
ActiveChart.Legend.Select
Selection.Position = xlRight
ActiveChart.HasTitle = False
End With
Worksheets(3).Select
' Diagramme werden angeordnet. 3 Diagramme pro Zeile
Dim objShape As ChartObject, MerkShape As ChartObject
Dim iCount As Integer
iCount = 1
For Each objShape In Sheets("Diagramm").ChartObjects
With objShape
If MerkShape Is Nothing Then
.Left = 10
.Top = 150
Else
iCount = IIf(iCount = 3, 1, iCount + 1)
If iCount > 1 Then
.Top = MerkShape.Top
.Left = MerkShape.Left + MerkShape.Width + 100
Else
.Left = 10
.Top = MerkShape.Top + MerkShape.Height + 100
End If
End If
Set MerkShape = objShape
End With
Next objShape
Else _
span>
With rngSource
Set cacheofpt = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:="'" & rngSource.Parent.Name & "'!" _
& rngSource.Range("A1").Address(True, True, xlR1C1) & ":" _
& .Parent.Cells(.Row + .Rows.Count - 1, .Column).Address(True, True, xlR1C1))
End With
Set pt = cacheofpt.CreatePivotTable(TableDestination:=ActiveSheet.Range("A1"))
With pt
With .PivotFields(rngSource.Range("A1").Text)
.Orientation = xlRowField
.Position = 1
End With
End With
' BalkenChart wird erstellt
With Charts.Add
.ChartType = xlColumnClustered
.ApplyLayout (5)
.ClearToMatchStyle
.ChartStyle = 3
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Worksheets(Worksheets.Count).Range("X1" _
_
_
)
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Anzahl der Tickets"
.SetSourceData Source:=ActiveSheet.Range("b1"), PlotBy:=xlColumns
.Location where:=xlLocationAsObject, Name:="Diagramm"
ActiveChart.HasLegend = True
ActiveChart.Legend.Select
Selection.Position = xlRight
ActiveChart.HasTitle = False
End With
Worksheets(3).Select
Loop

Gruß, Mullit
Anzeige

63 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige