Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema ScrollBar
BildScreenshot zu ScrollBar ScrollBar-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Textfelder sperren für einige Zugriffe

Betrifft: Textfelder sperren für einige Zugriffe von: Mirko
Geschrieben am: 26.08.2014 10:04:35

Hallo zusammen,

ich habe mal wieder eine Frage:
1. ich habe eine Datei mit Textfeldern versehen die per Klick auf andere Tabellenblätter per Makro zugreifen.
2. Dort möchte ich gerne das nur bestimmte Leute auf bestimmte Textfelder zugreifen können. Ist dies möglich ohne ein riesen Hexenwerk daraus zu machen?
Die Datei erkennt bereits den User über die Anmeldung am Rechner. Kann man die ggf. nutzen?

Vielen Dank im voraus
VG Mirko

  

Betrifft: AW: Textfelder sperren für einige Zugriffe von: Klaus M.vdT.
Geschrieben am: 26.08.2014 10:16:30

Hallo Mirko,

im Prinzip so:

Private Sub Workbook_Open()
Dim YouSeeMe As Boolean

Select Case Environ("Username")
Case "Hans.Wurst"
    YouSeeMe = True
Case "Frank.Schmidt"
    YouSeeMe = True
Case "Anna.Log"
    YouSeeMe = True
Case Else
    YouSeeMe = False
End Select

Sheets("Tabelle1").Shapes.Range(Array("TextBox 1")).Visible = YouSeeMe
End Sub
Grüße,
Klaus M.vdT.


  

Betrifft: AW: Textfelder sperren für einige Zugriffe von: Mirko
Geschrieben am: 26.08.2014 10:32:29

Hallo KLaus,
danke für die schnelle Rückmeldung
dies schreibe ich in "diese Arbeitsmappe" oder?

DANKE und Gruss Mirko


  

Betrifft: AW: Textfelder sperren für einige Zugriffe von: Klaus M.vdT.
Geschrieben am: 26.08.2014 11:50:14

Hallo Mirko,

wenn du das Makro inklusive "Workbook Open" verwenden willst, und es noch kein anderes Makro "Workbook Open" bei dir gibt, dann lautet die Antwort ja.

Sinnigerweise bringst du den Code dort unter, wo er gebraucht wird. Ich fände es am einfachsten, beim Mappenstart zu prüfen wer an der Mappe dran ist, darum mein Beispiel. Da ich deine Datei und deine Makros nicht kenne, kann ich nur generelle Tipps geben. Dass du die Tabellen und TextBoxen, und natürlich die Usernamen, noch ändern musst ist klar, oder?

Grüße,
Klaus M.vdT.


  

Betrifft: AW: Textfelder sperren für einige Zugriffe von: Mirko
Geschrieben am: 27.08.2014 13:14:58

Hallo Klaus,

danke für die Antwort:
Sinnigerweise bringst du den Code dort unter, wo er gebraucht wird. -- "OK verstanden"
Ich fände es am einfachsten, beim Mappenstart zu prüfen wer an der Mappe dran ist, darum mein Beispiel. -- "Dies habe ich bereits als Code -- heisst es wird schon geprüft wer die Mappe öffnet und dann wird von demjenigen immer die Signatur mit angefügt - beim Kopieren und einfügen"
Da ich deine Datei und deine Makros nicht kenne, kann ich nur generelle Tipps geben. -- "ich hänge dir mal ein Beispiel mit an.."
https://www.herber.de/bbs/user/92318.xlsm

Dass du die Tabellen und TextBoxen, und natürlich die Usernamen, noch ändern musst ist klar, oder? - "ist auch klar"

Nun habe ich noch eine Frage: - wie in meinem Beispiel zu finden darf nur ein bestimmter Personenkreis drück 1 klicken können, aber alle dürfen Drück 2 und 3 klicken.
Ich hoffe du kannst mir helfen..
VG Mirko


  

Betrifft: AW: Textfelder sperren für einige Zugriffe von: Klaus M.vdT.
Geschrieben am: 27.08.2014 13:25:02

Hallo Mirko,
einfach in deinen Code eingebaut, so:
folgt der gleichen Logik wie die anderen sperren - es wird erst alles erlaubt, und dann wieder verboten falls der User nicht "soundso" heisst.

Private Sub Workbook_Open()
 Tabelle6.Cells(2, 1).Value = Environ("username")
 Worksheets("Tabelle6").Range("R1").Value = Environ("username")

ActiveWindow.DisplayWorkbookTabs = True
ActiveWindow.DisplayHorizontalScrollBar = True
Sheets("Tabelle1").Shapes.Range(Array("TextBox 1")).Visible = True

If Worksheets("Tabelle6").Range("R1").Value <> "pfoh02" _
    And Worksheets("Tabelle6").Range("R1").Value <> "musik01" _
    And Worksheets("Tabelle6").Range("R1").Value <> "jendr02" _
    And Worksheets("Tabelle6").Range("R1").Value <> "Pfoh.M" _
    And Worksheets("Tabelle6").Range("R1").Value <> "" Then
        ActiveWindow.DisplayWorkbookTabs = False
        ActiveWindow.DisplayHorizontalScrollBar = False
        Sheets("Tabelle1").Shapes.Range(Array("TextBox 1")).Visible = False
End If

End Sub

Übrigens: Die Datei hatte mich zunächst ausgesperrt, da ich natürlich nicht in der User-Liste stand. Ich habe etwa 17 Sekunden gebraucht um das zu "hacken" (mit Absicht in Anführungsstrichen). Nur damit du dir klar bist wie sicher eine solche Schutzmaßnahme ist: nicht sehr.

Oh eine Kleinigkeit noch: füge auch dieses Makro ein.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWindow.DisplayWorkbookTabs = False
ActiveWindow.DisplayHorizontalScrollBar = False
Sheets("Tabelle1").Shapes.Range(Array("TextBox 1")).Visible = False
End Sub

Dadurch verhinderst du, dass dein Schutz ganz simpel durch "ohne Makros starten" umgangen wird. Macht das ganze einen mü sicherer :-)

Grüße,
Klaus M.vdT.


  

Betrifft: AW: Textfelder sperren für einige Zugriffe von: Mirko
Geschrieben am: 27.08.2014 14:02:26

Hallo Klaus,

danke für die sehr schnelle Hilfe -- aber irgendwie komme ich nicht ganz weiter.
- Muss ich dies "TextBox 1" umbenennen? in "Drück 1"? er bringt mir imer folgende Zeiole als Fehler:
...Sheets("Tabelle1").Shapes.Range(Array("TextBox 1")).Visible = False...
Die Buttons sind ja nur Textfelder mit zugewiesenen Makros liegt die vielleicht daran?

VG Mirko


  

Betrifft: AW: Textfelder sperren für einige Zugriffe von: Klaus M.vdT.
Geschrieben am: 27.08.2014 15:39:07

Hallo Mirko,
bei mir hat es in der Musterdatei funktioniert! "Drück 1" ist doch nur der Text der oben drauf steht, du musst natürlich in den NAMEN des Feldes umbenennen. Diesen findest du am einfachsten heraus, indem du den Makrorekorder startest und dann irgendwas mit "Drück 1" anstellst (ich habe es einfach etwas in der Gegend herum bewegt):

Sub Makro1()
'
' Makro1 Makro
'

'
    ActiveSheet.Shapes.Range(Array("TextBox 1")).Select
    Selection.ShapeRange.IncrementLeft 29.25
    Selection.ShapeRange.IncrementTop 25.5
End Sub

In deiner Musterdatei heisst es "TextBox 1", demnach
Sheets("Tabelle1").Shapes.Range(Array("TextBox 1")).Visible = False
Wenn das Ding in deiner Musterdatei aus irgendeinem Grund "IchMagKatzen" heisst statt "TextBox 1", dann ist der Code natürlich
Sheets("Tabelle1").Shapes.Range(Array("IchMagKatzen")).Visible = False
ausserdem, auch daran könnte es liegen, musst du dich natürlich auf Tabelle1 beziehen - so heisst der Reiter in deiner Musterdatei! Wenn der erste Reiter in deinem Master in Wahrheit "Navigation" heisst, dann muss der Code natürlich so aussehen:
Sheets("Navigation").Shapes.Range(Array("IchMagKatzen")).Visible = False
bzw. Sheets("Navigation").Shapes.Range(Array("TextBox 1")).Visible = False

Generell gilt hier wieder: Wenn dein Muster und dein Master unterschiedlich sind, bist du selber schuld dass es nicht sofort die richtige Lösung gibt :-)

Grüße,
Klaus M.vdT.


  

Betrifft: AW: Textfelder sperren für einige Zugriffe von: Mirko
Geschrieben am: 28.08.2014 08:43:25

Guten Morgen Klaus,

erst mal vielen dank für deine Geduld..
ich habe dies so gemacht wie du beschrieben hast, aber...

bei mir funktioniert dies nicht.

Ich habe den Code "in diese Arbeitsmappe" eingetragen.
Ich bin immer noch in der Test Datei... :(

Aber ich bekomme immer eine Laufteitfehler wo die fett gedruckte Zeile gelb ist:
ActiveWindow.DisplayWorkbookTabs = True
ActiveWindow.DisplayHorizontalScrollBar = True
Sheets("Tabelle1").Shapes.Range(Array("TextBox 1")).Visible = True

beim speichern ist dies diese hier:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWindow.DisplayWorkbookTabs = False
ActiveWindow.DisplayHorizontalScrollBar = False
Sheets("Tabelle1").Shapes.Range(Array("Textbox 1")).Visible = False
End Sub
DANKE und VG Mirko


  

Betrifft: Version? von: Klaus M.vdT.
Geschrieben am: 28.08.2014 10:15:23

Hallo Mirko,

nochmal - bei mir in der Testdatei funktioniert es.
Bleiben 2 Möglichkeiten:

1) du hast einen Fehler eingebaut, Sheetname oder so. Unwahrscheinlich da du auch in der Musterdatei getestest hast, hoffe ich.
2) ein Versionsproblem. Ich sehe du hast xl2007, ich nutze xl2010. Das dürfte eigentlich kein Problem sein, aber dafür lege ich die Hand nicht ins Feuer ... hast du die Möglichkeit, mal auf 2010 zu testen? Ich komme leider nicht an eine 2007er Version.

mfg,
Klaus


  

Betrifft: AW: Version? von: Mirko
Geschrieben am: 28.08.2014 10:26:34

Hallo Klaus,

1. ja bin auch in der Musterdatei --
2. nein habe hier keinen der 2010 nutzt :(

ich probiere noch ein bischen -- muss doch irgendwie klappen..
Melde mich dann noch mal..

VG Mirko


  

Betrifft: AW: Version? von: Mirko
Geschrieben am: 28.08.2014 11:47:27

Hallo Klaus,

ich glaube den Fehler gefunden zu haben.
Bei mir heißt dies "Textfeld" und dann ist das Textfeld ausgeblendet korrekt??

VG Mirko


  

Betrifft: AW: Version? von: Mirko
Geschrieben am: 28.08.2014 12:14:47

Hallo Klaus,

in meiner Masterdatei habe ich ziemlich viele Tabellen Blätter mit vielen Textfeldern daher bekomme ich jetzt dadurch ein paar Schwierigkeiten. Gibt es eine Möglichkeit dies Textfeld nicht unbedingt auszublenden sondern nur das Makro ausschalten damit die Verlinkung zu den anderen Tabellen Blättern nicht funktioniert.
VG Mirko


  

Betrifft: AW: Version? von: Klaus M.vdT.
Geschrieben am: 01.09.2014 08:55:35

Hallo Mirko,
ich wundere mich eh, warum du Textfelder benutzt. Für deine Zwecke wären Buttons doch viel sinnvoller.

Bei einem Button kannst du, statt ".visible", die ".enabled" Eigenschaft verändern. Bei ".enabled = false" wird der Button so grau dargestellt wie du es aus den Windowsmenüs kennst und unclickbar.

Aber du hast, statt Buttons, ja Textfelder. Da würde ich einfach ein wenig schummeln. Lass das Workbook_Open Makro in einen ausgebendete Reiter in eine freie Zelle das Wort "Ja" schreiben, wenn der richtige Anmeldename benutzt wurde - ansonsten das Wort "nein". Sagen wir mal, in Tabelle6-A1.
Deine Makros schreibst du jetzt alle so um:

Sub DeinMarkro()
If Sheets("Tabelle6").Range("A1").value = "nein" then
 Msgbox ("Keine Berechtigung!")
else
  [... dein restlicher Makrocode ...]
end if
End Sub

(beachte, dass das gesamte Makro in den else-endif Block kommt!

Kannst dir jetzt aussuchen, welchen Weg du gehst. Der Weg mit den Buttons ist auf jedem Fall eleganter und Enduser-Freundlicher, ich befürchte aber etwas über deinem VBA-Level?

Grüße,
Klaus M.vdT.


 

Beiträge aus den Excel-Beispielen zum Thema "Textfelder sperren für einige Zugriffe"