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

Marko auf best. Bereiche mit B-Schutz

Marko auf best. Bereiche mit B-Schutz
01.02.2021 09:45:47
Anne
Hallo,
ich habe bereits ein funktionierendes Marko, jedoch möchte ich gerne, dass dieses automatische auf bestimmte Bereiche (H10;I53), (K10;L53), und (N10;O53) in einem Excel-Datei mit Blattschutz angewendet wird.
Hier das Makro:

Sub test()
Dim i, anzNach, anzZeil, soll As Integer, tmp As String
soll = 3 'die soll-Anzahl der signifikanten stellen
anzZeil = Selection.Cells.Count 'Zellenanzahl ermitteln
For i = 1 To anzZeil 'Schleifenstart von zelle 1 bis letzte Zelle
tmp = Selection.Cells(i) 'einlesen neuer Zelle
If tmp 1 dann trenne die Zahl bei , und _
sag mir wie lang sie ist
'bei Amerikanischer einstellung muss hier das , duch einen . ersetzt werden
'aus 152,5648 mach er hier 152 = 3 Stellen vor dem ,
End If
If anzNach  ?0.000
End If
Next i
End Sub

Ich hoffe, dass mir jemand helfen kann.
Gruß
Anne

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UserInterfaceOnly
01.02.2021 10:02:51
hary
Moin
Nutze UserInterfaceOnly. Damit arbeitet das Makro trotz Blattschutz.
Der Code kommt in den Code der Arbeitsmappe.
Private Sub Workbook_Open()
With Worksheets("Tabelle1")'--Blattname anpassen
.Protect Password:="hallo", UserInterfaceOnly:=True '--Passwort anpassen
End With
End Sub

gruss hary
AW: UserInterfaceOnly
01.02.2021 10:18:39
Anne
Hallo Harry,
wo genau baue ich den Code ein?
Und wie muss ich mein Makro anpassen, dass diese nur für die Bereiche H10;I53), (K10;L53), und (N10;O53)angewendet wird?
Gruß
Anne
AW: UserInterfaceOnly
01.02.2021 11:12:13
hary
Moin
Der Code kommt in den Code "DieseArbeitsmappe"
gruss hary
Anzeige
AW: Marko auf best. Bereiche mit B-Schutz
01.02.2021 10:48:54
Jacek
Hallo Anne,
ich habe folgende Lösung (auch wenn vermutlich nicht sehr hübsch)
Wenn ich mit dem Funktionsaufruf "Blattschutz" arbeite wird das folgende aufgerufen.
Sub Blattschutz()
With ActiveSheet
Cells.Select
Selection.Locked = False
Selection.FormulaHidden = False
Range("B2:N400").Select
Selection.Locked = True
Selection.FormulaHidden = False
If Not Range("B1:N1").AutoFilter Then
Range("B1:N1").AutoFilter
End If
.Protect userinterfaceonly:=True, Password:="PW"
End With
End Sub

So wähle ich den Bereich aus, der geschützt werden soll.
Das mit dem Autofilter funktioniert aber aktuell noch nicht :D
VG
Jacek
Anzeige
AW: @ Jacek
01.02.2021 11:10:09
hary
Moin
Probier mal so
With ActiveSheet
.EnableAutoFilter = True '--das fehlt
.Cells.Locked = False
.Cells.FormulaHidden = False
.Range("B2:N400").Locked = True
Cells.FormulaHidden = False
If Not .Range("B1:N1").AutoFilter Then
.Range("B1:N1").AutoFilter
End If
.Protect userinterfaceonly:=True, Password:="PW"
End With

gruss hary
AW: @ Jacek
01.02.2021 11:36:57
Jacek
Hi Harry,
das habe ich mir auch schon überlegt. Aber ich habe das Gefühl, als würde ich damit eine Art "Schalter" betätigen.
So würde nur jede zweites Sheet den gewünschten Filter bekommen (nehme ich an).
Also müsste ich nach jedem Durchlauf den Autofilter auf False setzen, oder?
Bin die ganze Zeit am Überlegen wie ich das löse und ob meine Annahmen korrekt sind:D
VG
Jacek
Anzeige
AW: Marko auf best. Bereiche mit B-Schutz
01.02.2021 11:24:39
Daniel
Hi
wenn der Code auf die genannten Zellbereiche angewendet werden soll, dann.
anstelle von
Dim i
For i = 1 to AnzZeil
... Selection.Cells(i) ...
Next i
folgendes:
Dim Zelle as Range
For Each Zelle in Range("H10:H53,K10:L53,N10:O53")
... Zelle ...
Next Zelle

dh eine For Each-Schleife über die zu bearbeitenden Zellen und im Code dann dass Selection.Cells(i) durch die Schleifenvariable ersetzen.
das mit dem Blattschutz wurde ja schon angeprochen
Gruß Daniel
AW: Marko auf best. Bereiche mit B-Schutz
01.02.2021 18:19:07
Anne
Hallo Daniel,
vielen Dank. Es funktioniert.
Gruß
Anne
Anzeige
AW: Marko auf best. Bereiche mit B-Schutz
02.02.2021 07:50:25
Anne
Hi,
wie gesagt, es klappt soweit alles, jedoch ist mir noch ein Fehler aufgefallen, welcher mittels des Makros gelöst werden soll.
Das Makro soll nur durchgeführt werden, wenn in dem Bereich ("H10:I53,K10:L53,N10:O53") eine Zahl steht, sprich Wert > 0.
Wo und mit welchen Befehl kann ich das einbauen?
Vielen Dank für eure Hilfe.
Sub test()
Worksheets("Konzentrationsberechnung").Unprotect Password:="ICP"
Dim Cells As Range
soll = 3 'die soll-Anzahl der signifikanten stellen
anzZeil = Selection.Cells.Count 'Zellenanzahl ermitteln
For Each Cells In Range("H10:I53,K10:L53,N10:O53") 'Schleifenstart von zelle 1 bis letzte  _
Zelle
tmp = Cells 'einlesen neuer Zelle
If tmp 1 dann trenne die Zahl bei , und _
sag mir wie lang sie ist
'bei Amerikanischer einstellung muss hier das , duch einen . ersetzt werden
'aus 152,5648 mach er hier 152 = 3 Stellen vor dem ,
End If
If anzNach  ?0.000
End If
Next Cells
Worksheets("Konzentrationsberechnung").Protect Password:="ICP"
End Sub

Anzeige
AW: Marko auf best. Bereiche mit B-Schutz
02.02.2021 09:21:48
Daniel
Hi
Kannst du mit der Abfrage prüfen:
If Vartype(Cells.value) = vbDouble

Wenn die Werte eindeutiger Herkunft sind (Formel oder Konstante), kann man das auch gleich bei der Schleife festlegen, dass diese nur über Zellen mit Zahlen laufen soll:
For each Cells in Range(...).specialcells(xlcelltypeconstants, 1)
Bzw man sollte Begriffe, die feststehende VBA-Begriffe sind, nicht als Variablennamen verwenden ("Cells")
1. ist das für den Leser deines Codes verwirrend
2. kann es dazu führen, dass du dann das Cells nicht mehr in seiner ursprünglichen VBA-Bedeutung verwenden kannst
Gruß Daniel
Anzeige
AW: Marko auf best. Bereiche mit B-Schutz
02.02.2021 09:27:02
Anne
Hallo Danial,
wo genau muss ich die Zeile:
If Vartype(Cells.value) = vbDouble
einfügen, damit es funktioniert?
Gruß
Anne
AW: Marko auf best. Bereiche mit B-Schutz
02.02.2021 11:46:39
Anne
Hi,
mit beiden Codes komme ich leider nicht zum gewünschten Ziel. Es wird mir immer ein Fehler angezeigt, irgendwas mache ich falsch. :(
Wo genau müsste ich beide Codes einfügen, damit das Makro nur durchgeführt wird, wenn auch eine Zahl in den Zelle in der Range ("H10:I53,K10:L53,N10:O53")ist.
Gruß
Anne
AW: Marko auf best. Bereiche mit B-Schutz
02.02.2021 11:52:17
Daniel
Um zu dirr sagen zu können, was du falsch machst, musst du mir schon zeigen, was du gemacht hast.
AW: Marko auf best. Bereiche mit B-Schutz
02.02.2021 11:56:27
Anne
Hi Daniel,
hier mein Versuch den eine Code einzufügen.In Zeile 5 habe ich .specialcell…. eingefügt
Sub test()
Worksheets("Konzentrationsberechnung").Unprotect Password:="ICP"
Dim Cells As Range
soll = 3 'die soll-Anzahl der signifikanten stellen
anzZeil = Selection.Cells.Count 'Zellenanzahl ermitteln
For Each Cells In Range("H10:I53,K10:L53,N10:O53").SpecialCells(xlCellTypeConstants, 1) ' _
Schleifenstart von zelle 1 bis letzte Zelle
tmp = Cells 'einlesen neuer Zelle
If tmp 1 dann trenne die Zahl bei , und _
sag mir wie lang sie ist
'bei Amerikanischer einstellung muss hier das , duch einen . ersetzt werden
'aus 152,5648 mach er hier 152 = 3 Stellen vor dem ,
End If
If anzNach  ?0.000
End If
Next Cells
Worksheets("Konzentrationsberechnung").Protect Password:="ICP"
End Sub

Anzeige
AW: Marko auf best. Bereiche mit B-Schutz
02.02.2021 12:08:41
Daniel
Bitte setze das was ich geschrieben habe auch um.
verwende keine feststehenden VBA-Begriffe wie "Cells" als Variablennamen.
Mach das bitte, dann schau ich mir auch den weiteren Code an.
Gruß Daniel
AW: Marko auf best. Bereiche mit B-Schutz
02.02.2021 17:50:13
Anne
Hallo Daniel,
ich hab jetzt das Marko angepasst und es funktioniert.
Vielen Dank für die Unterstützung.
Gruß
Anne
Sub test()
Worksheets("Konzentrationsberechnung").Unprotect Password:="ICP"
Dim Cells As Range
soll = 3 'die soll-Anzahl der signifikanten stellen
anzZeil = Selection.Cells.Count 'Zellenanzahl ermitteln
For Each Cells In Range("H10:I53,K10:L53,N10:O53").SpecialCells(xlCellTypeFormulas,  _
xlNumbers) 'Schleifenstart von zelle 1 bis letzte Zelle
tmp = Cells 'einlesen neuer Zelle
If tmp 1 dann trenne die Zahl bei , und _
sag mir wie lang sie ist
'bei Amerikanischer einstellung muss hier das , duch einen . ersetzt werden
'aus 152,5648 mach er hier 152 = 3 Stellen vor dem ,
End If
If anzNach  ?0.000
End If
Next Cells
Worksheets("Konzentrationsberechnung").Protect Password:="ICP"
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige