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

Warum läuft Codeabschnitt fälschlicherweise?

Warum läuft Codeabschnitt fälschlicherweise?
08.05.2017 14:13:14
Nati
Hi Leute,
kleiner Bug bei mir:

Public Sub DeletingProcess()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws5 As Worksheet: Set Ws5 = Wb.Worksheets("Calculation")
Dim f
ActiveSheet.Unprotect
f = Application.InputBox("EN: Which Process step to be deleted?" & Chr(13) & _
"(please enter letter for column)" & Chr(13) & Chr(13) & _
"DE: Welcher Prozessschritt soll gelöscht werden?" & Chr(13) & "(bitte Spaltenbezeichnung  _
eingeben)" _
& Chr(13) & Chr(13), Type:=2)
Select Case True
Case f = False: Exit Sub
Case IsNumeric(f)
MsgBox "EN: Please enter the LETTER for the respective Column!" _
& Chr(13) & Chr(13) & "DE: Bitte den BUCHSTABEN der gewünschten Spalte eingeben!"
Exit Sub
Case Else
On Error GoTo Hell
' Wenn Spalte vor H ausgewählt wird zum ausblenden --> Fehlermeldung
If Ws5.Range(UCase(f) & ":" & UCase(f)).Column 

Der untere Abschnitt "Hell" läuft immer durch, auch wenn eine korrekte Eingabe gemacht wurde, vielleicht sieht jemand auf Anhieb den Bug.
Viele GRüße,
Nati

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Vorschlag
08.05.2017 14:33:45
Max2
Hallo,
versuch es mal mit:
Dim i As Byte
i = StrComp(f, "H", vbTextCompare)
If Not IsNumeric(f) And i  -1 Then
...Code
Else
...Code
End if 
Damit guckst du ob f nicht numerisch ist und f ein Buchstabe vor H ist.
i = -1 wenn Buchstabe vor H
i = 1 wenn Buchstabe nach nach H
i = 0 wenn Buchstabe H ist
Damit kannst du die Cases los werden und GoTo solltest du immer vermeiden.
Deinen Fehler sehe ich bis jetzt bei den Cases, vor allem bei Select Case True.
Kann mich aber auch irren
Hier auch nochmal ein kleiner mini Code zum testen:
Sub a()
Dim i As Byte
Dim f
f = Application.InputBox("Spalte eingeben")
i = StrComp(f, "h", vbTextCompare)
If Not IsNumeric(f) And i  -1 Then
MsgBox "Eingabe stimmt: " & f
Else
MsgBox "Eingabe ist falsch: " & f
End If
End Sub

Anzeige
AW: Vorschlag
09.05.2017 11:18:19
Nati
Hi MAx2,
Leider kommt bei mir der Fehler dann, dass keine Zellen gefunden werden ...
'' Makro für Button, der je nach Spaltenangabe Prozess löscht (Spalte wird ausgeblendet)
Public Sub DeletingProcess()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws5 As Worksheet: Set Ws5 = Wb.Worksheets("Calculation")
Dim f
Dim i As Byte
ActiveSheet.Unprotect
f = Application.InputBox("EN: Which Process step to be deleted?" & Chr(13) & _
"(please enter letter for column)" & Chr(13) & Chr(13) & _
"DE: Welcher Prozessschritt soll gelöscht werden?" & Chr(13) & "(bitte Spaltenbezeichnung  _
eingeben)" _
& Chr(13) & Chr(13), Type:=2)
i = StrComp(f, "h", vbTextCompare)
If Not IsNumeric(f) And i  -1 Then
If MsgBox("EN: Do you want to delete the process in column " & f & "?" & Chr(13) & Chr( _
13) & _
"DE: Möchten Sie den Prozess in Spalte " & f & " löschen" & "?" & Chr(13), _
vbQuestion + vbYesNo, "Information") = vbNo Then
'Wenn nein, dann schließe Sub
Exit Sub
End If
'Wenn Ja dann blende eingegebene Spalte aus
Ws5.Range(UCase(f) & ":" & UCase(f)).EntireColumn.Hidden = True
'lösche eingeschriebene Werte, Formeln bleiben erhalten
'Werte von oben bleiben bestehen, (Spaltenname)
'Ab Zeile 11 werden fixe Daten gelöscht
Range(Cells(11, f), Cells(Rows.Count, f).End(xlUp)).SpecialCells(xlCellTypeConstants). _
ClearContents
End If
End Sub
LG Nati
Anzeige
AW: Vorschlag
09.05.2017 11:52:01
Max2
Hallo,
habe das ganze mal eben kopiert und debuggen lassen.
Das kommt bei mir auch und liegt an der Zeile:
Range(Cells(11, f), Cells(Rows.Count, f).End(xlUp)).SpecialCells(xlCellTypeConstants). _
ClearContents

Ich habe deinen Code mal ein wenig abgeändert, da du keine Beispiel Mappe zu Verfügung
gestellt hast, kann ich das ganze leider nicht testen und beim Fehler finden auch eher
nur raten.
Code:

Sub DeletingProcess()
Dim ws As Worksheet
Dim userInput
Dim isValid As Boolean
Dim j As Byte
Dim i As Long
ActiveSheet.Unprotect
Set ws = ThisWorkbook.Sheets("Calculation")
With ws
userInput = Application.InputBox("EN: Which Process step to be deleted?" & Chr(13) & _
"(please enter letter for column)" & Chr(13) & Chr(13) & _
"DE: Welcher Prozessschritt soll gelöscht werden?" & Chr(13) & "(bitte  _
Spaltenbezeichnung" & _
"eingeben)" & Chr(13) & Chr(13), Type:=2)
'vergleiche Eingabe
j = StrComp(userInput, "H", vbTextCompare)
'Wenn die Eingabe nicht numerisch und kein Buchstabe vor H ist dann
If Not IsNumeric(userInput) And j  -1 Then
'ist der Input in Ordnung
isValid = True
End If
'Wenn der Boolean Wahr ist führe aus:
If isValid Then
'Will Nutzer wirklich Löschen
If MsgBox("EN: Do you want to delete the process in column " & f & "?" & Chr(13) &  _
Chr(13) & _
"DE: Möchten Sie den Prozess in Spalte " & f & " löschen" & "?" & Chr(13), _
vbQuestion + vbYesNo, "Information") = vbNo Then Exit Sub
'spalte verstecken (ucase kannst du dir sparen, er erkennt es auch so)
.Range(userInput & ":" & userInput).EntireColumn.Hidden = True
'Letzte Zeile der Spalte
i = .Cells(.Rows.Count, userInput).End(xlUp).Row
'Wenn die Letzte Zeile kleiner 11 ist dann:
If i 

Anzeige
So vielleicht?
09.05.2017 14:10:18
Max2
Hallo,
mit unten stehendem Code hat es bei mir Funktioniert.

Sub DeletingProcess()
Dim ws As Worksheet
Dim userInput
Dim isValid As Boolean
Dim j As Byte
Dim i As Long
Dim rng As Range, c As Range
Dim f
ActiveSheet.Unprotect
Set ws = ThisWorkbook.Sheets("Calculation")
With ws
userInput = Application.InputBox("EN: Which Process step to be deleted?" & Chr(13) & _
"(please enter letter for column)" & Chr(13) & Chr(13) & _
"DE: Welcher Prozessschritt soll gelöscht werden?" & Chr(13) & "(bitte  _
Spaltenbezeichnungeingeben)" & Chr(13) & Chr(13), Type:=2)
'vergleiche Eingabe
j = StrComp(userInput, "H", vbTextCompare)
'Wenn die Eingabe nicht numerisch und kein Buchstabe vor H ist dann
If Not IsNumeric(userInput) And j  -1 Then
'ist der Input in Ordnung
isValid = True
End If
'Wenn der Boolean Wahr ist führe aus:
If isValid Then
'Will Nutzer wirklich Löschen
If MsgBox("EN: Do you want to delete the process in column " & f & "?" & Chr(13) &  _
Chr(13) & _
"DE: Möchten Sie den Prozess in Spalte " & f & " löschen" & "?" & Chr(13), _
vbQuestion + vbYesNo, "Information") = vbNo Then Exit Sub
'spalte verstecken (ucase kannst du dir sparen, er erkennt es auch so)
.Range(userInput & ":" & userInput).EntireColumn.Hidden = True
'Letzte Zeile der Spalte
i = .Cells(.Rows.Count, userInput).End(xlUp).Row
'Wenn die Letzte Zeile kleiner 11 ist dann:
If i             If Not rng Is Nothing Then
For Each c In rng
If InStr(1, c.Formula, """") Then
Debug.Print c.Address & " === konstante gefunden"
c.ClearContents
End If
Next c
End If
Else
'Hier irgend eine Fehlermeldung falls die Eingabe nicht korrekt war
MsgBox "EN: Please enter the LETTER for the respective Column!" _
& Chr(13) & Chr(13) & "DE: Bitte den BUCHSTABEN der gewünschten Spalte eingeben! _
" _
End If
End With
Set ws = Nothing
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Range("B5").Select
End Sub
Das Fettmarkierte ist neu und prüft ob die Zelle eine Konstante ist und keine Formel.
Anzeige
AW: Warum läuft Codeabschnitt fälschlicherweise?
08.05.2017 23:54:02
JürgenV
Hallo Nati,
das "Exit Sub" muss nach "End Select" stehen.
Gruß,Jürgen
AW: Warum läuft Codeabschnitt fälschlicherweise?
09.05.2017 11:07:19
Nati
Hi Jürgen,
Läuft leider trz durch dieses "Hell" :(

Public Sub DeletingProcess()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws5 As Worksheet: Set Ws5 = Wb.Worksheets("Calculation")
Dim f
ActiveSheet.Unprotect
f = Application.InputBox("EN: Which Process step to be deleted?" & Chr(13) & _
"(please enter letter for column)" & Chr(13) & Chr(13) & _
"DE: Welcher Prozessschritt soll gelöscht werden?" & Chr(13) & "(bitte Spaltenbezeichnung  _
eingeben)" _
& Chr(13) & Chr(13), Type:=2)
Select Case True
Case f = False: Exit Sub
Case IsNumeric(f)
MsgBox "EN: Please enter the LETTER for the respective Column!" _
& Chr(13) & Chr(13) & "DE: Bitte den BUCHSTABEN der gewünschten Spalte eingeben!"
Exit Sub
Case Else
On Error GoTo Hell
' Wenn Spalte vor H ausgewählt wird zum ausblenden --> Fehlermeldung
If Ws5.Range(UCase(f) & ":" & UCase(f)).Column 

Anzeige
AW: Warum läuft Codeabschnitt fälschlicherweise?
09.05.2017 13:38:00
Nati
Ist beim Button "Remove" hinterlegt
AW: Warum läuft Codeabschnitt fälschlicherweise?
09.05.2017 16:29:20
Nati
Hab den Fehler gefunden... Es liegt an der Zeile:
Ws5.Range(Cells(11, f), Cells(Rows.Count, f).End(xlUp)).SpecialCells(xlCellTypeConstants).ClearContents

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige