Hallo
Ich versende ein geschütztes Excel Arbeitsblatt an Kunden und die sollten in der Lage sein, direkt auf dem Blatt die Verlinkung zu einem externen Blatt zu ändern. Der Befehl im Menu ist ja bei geschützten Blättern nicht möglich.
Wie kann ich so eine Dateiauswahlbox direkt auf dem Arbeitsblatt platzieren. Ich versteh leider von VBA gar nix, wäre also für eine pfannenfertige Lösung sehr dankbar.
Gruss aus Prag
Heinz
Hallo Heinz,
hier ist gar kein VBA vonnöten. Man kann nämlich den Schutz für einzelne Zellen in dem ansonsten geschützten Arbeitsblatt aufschließen, so dass diese beschrieben / bearbeitet werden können.
Vor dem Schutz der Arbeitsmappe bitte die Zelle oder den Zellbereich markieren, im Menü auf „Format“, dann „Zellen…“ klicken. Im Reiter „Schutz“ den Haken bei „Gesperrt“ entfernen.
Dann die Tabelle ganz normal schützen.
Gruß
Natator
Hier gibt es Tipps, keine Lösungen!
Hallo Waldemar
Klar, war ja auch nur ein Wunsch (so ganz ahnungslos bin ich nicht). Eine Dateiauswahlbox kreigte ich per VBA schon noch hin, aber ich brauche eben die spezeille für die externen Links?
Hier gibt es Tipps, keine Lösungen!
@Natator: Das was Du schreibst weiss ich schon, aber ich brauche wie gesagt, die Dateinauswahl für die externen Links auf dem Arbeitsblatt, nicht durch den Menubefehl, der ist gesperrt.
Dank für alle TIPPS!
Hallo Heinz Lyner,
ich weis nicht genau, welche ‚Verlinkung‘ du hier meinst.
Versuche doch mit dem Makro-Recorder. Zeichne Aktionen auf, die du per Makro ausführen möchtest und passe dieses aufgezeichnete Makro an.
Die meisten Menü-Befehle kann man auch im Makro ausführen (ohne die Menüleiste).
MfG.
W.W.
Hallo Heinz,
füge ein Textfeld in das Blatt und schreibe den Link in das Textfeld. Dann gehe auf >>Extras>>Schutz>>Blatt. Entferne das Häkchen bei „Objekte“ im Fenster Blatt schützen. Das Blatt ist geschützt, aber der Inhalt im Textfeld kann geändert werden.
Gruß, John.
Hallo John
Da alles ist mir ja klar, aber Du musste verstehen, dass ich von meinen Kunden nicht verlangen kann, dass sie dann dort den Pfad z.B. „E:/Dokumente/WeissWas für Ordner/UNterordner/excel.xls“ eintragen, das sind meist absolute Laien! Es muss eine Dateiauswahlbox hin.
Und Dein Vorschlag löste ja das Problem der Links nicht!
Gruss
Heinz
Hallo Heinz,
eine Pfannenfertige Version könnte ich nicht erstellen.
Auf länger Hinsicht könnte ich etwas in dieser Richtung erstellen. Das würde aber Zeit kosten, die ich aktuell nicht hätte.
Tut mir leid.
MfG
Michael
Hallo Heinz
Wennst nur eine Zelle frei geben willst zum verändern.
Dann markier das gesamte blatt.
dann rechte maustaste
auf zellen formatieren klicken
dann register blatt schutz auswählen.
das häckchen weg bei gesperrt.
die eine zelle mit den link.
rechte maustaste klicken
auf zellen formatieren klicken
dann register blatt schutz auswählen.
das häckchen setzen bei gesperrt.
dann hast die eine zelle mit den link freigeben zum bearbeiten.
der rest ist aber gesperrt.
lg fred
Hallo Heinz,
das Makro unten fragt in einem Dateiauswahldialog nach den Dateien, durch die die vorhandenenen Verknüpfungen ersetzt werden sollen.
Bei geschützten Tabellenblättern muss der Schutz vor dem Wechseln der Verknüpfungen aufgehoben werden.
Falls der Schutz mit Kennwort erfolgt, dann muss dieses im Code mit angegeben werden. In diesem Fall solltest du natürlich das VBA-Projekt ebenfalls per Kennwort schützen und die Anzeige des VBA-Projektes sperren (im VBA-Editor via Extras–> Eigenschaften VBA-Projekt). Wenn der Anwender das Kennwort kennt, dann kann man dieses natürlich auch abfragen. Dann wird das Makro etwas komplizierter, da eine entsprechende Input-Box eingebaut werden muss.
Zum Starten des Makros im Tabellenblatt eine Schaltfläche aus den Formular-Steuerelementen einfügen und das Makro zuweisen.
Gruß
Franz
'Erstellt unter Excel 2007
'Code in einem allgemeinen Modul
Sub Verknuepfung\_zu\_QuelleWechseln()
Dim wb As Workbook
Dim varVerknuepfung
Dim varVerknuepfungNeu
Dim varTab, intTab As Integer
Dim strVerzeichnisVerkn As String
Dim strPW As String
On Error GoTo Fehler
Set wb = ActiveWorkbook
strVerzeichnisVerkn = wb.Path & Application.PathSeparator
For Each varVerknuepfung In wb.LinkSources(Type:=xlExcelLinks)
With Application.FileDialog(msoFileDialogOpen)
.Title = "Andere Datei für Verknüpfung """ & varVerknuepfung & """ auswählen"
.InitialView = msoFileDialogViewDetails
.FilterIndex = 3 'ist in Excel normalerweise = Exceldateien
.InitialFileName = strVerzeichnisVerkn 'Startverzeichnis für Dateiauswahl
If .Show = -1 Then
varVerknuepfungNeu = .SelectedItems(1)
'Verzeichnis der Verknüpfung für ggf. weitere Vernüpfungen merken
strVerzeichnisVerkn = Left(varVerknuepfungNeu, \_
VBA.InStrRev(varVerknuepfungNeu, Application.PathSeparator))
If MsgBox("Alt: " & varVerknuepfung & vbLf \_
& "Neu: " & varVerknuepfungNeu, \_
vbQuestion + vbOKCancel, "Wechseln Verknüpfung") = vbOK Then
If varVerknuepfung varVerknuepfungNeu Then
'Für alle Tabellenblätter in denen die Verknüpfung vorkommt muss der \_
Blattschutz aufgehoben werden
'im Array Index-Nummern oder Namen (in Anführungszeichen) der Blätter angeben
varTab = Array(1)
strPW = "MyTest" 'hier ggf. Kennwort für Blattschutz angeben
For intTab = LBound(varTab) To UBound(varTab)
Worksheets(varTab(intTab)).Unprotect Password:=strPW
Next intTab
wb.ChangeLink Name:=varVerknuepfung, NewName:=varVerknuepfungNeu, \_
Type:=xlLinkTypeExcelLinks
'Tabellenblätter wieder schützen
For intTab = LBound(varTab) To UBound(varTab)
Worksheets(varTab(intTab)).Protect Password:=strPW
'Falls der Blattschutz mit bestimmten Optionen erfolgen soll, dann \_
müssen diese angegeben werden
' Worksheets(varTab(intTab)).Protect Password:=strPW, DrawingObjects:=True, \_
Contents:=True, Scenarios:=True, AllowInsertingRows:=True, AllowSorting:=True, \_
AllowFiltering:=True
Next intTab
End If
End If
Else
MsgBox "Die Verknüpfung """ & varVerknuepfung & """ wurde nicht geändert!", \_
vbInformation + vbOKOnly, "Wechseln Verknüpfung"
End If
End With
Next
Err.Clear
Fehler:
With Err
Select Case .Number
Case 0 'Alles OK
Case 9
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf & vbLf \_
& "Blatt mit " & IIf(VBA.TypeName(varTab(intTab)) = "String", "Name """, \_
"Index-Nummer """) & varTab(intTab) & """" & " ist in Datei nicht vorhanden"
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
End Sub
Hallo Herr Lyner,
wenn man ein Blatt schütz, kann man doch bestimmte aktionen zulassen. Wie ist es denn wenn SIe die Zelle mit einer Dropdown-Auswahlliste füllen?
Gruß Hugo
hallo Heinz,
leider kann ich dir nicht weiter helfen dazu müsste ich mehr wissen und sehen, wenn du möchtest kannst du mir ein Muster von dem Arbeitsblatt schicken,meine E-Mail lautet [email protected]
Gruß Bernd
Das war, was ich gesucht habe, danke!
Hallo,
habe leider keine schnelle Lösung.
Kp