(Excel) Speichern verbieten / HTML-Code kopieren

  • #1
J

Jenz

Mitglied
Themenersteller
Dabei seit
01.03.2005
Beiträge
20
Reaktionspunkte
0
Ort
Thüringen
Hallo zusammen,

ich bastele gerade exzessiv mit Excel herum, und bin dabei auf 2 Punkte gestoßen, an denen ich nicht weiter weiß.

1. Speichern (überschreiben) verbieten
Ist es möglich eine Arbeitsmappe per Makro dahingehend zu schützen, dass sie nicht gespeichert, und damit überschrieben werden kann, sondern sich nur unter anderem Namen speichern lässt, dessen Vorschlag ich vorgeben kann?

2. HTML-Code aus Zellen in Zwischenablage kopieren
Ich habe Zahlenwerte und Quelltext-Strings aus verschiedenen Zellen per VERKETTEN zu einem HTML-Brocken zusammengefügt, welcher jetzt in einer einzigen Zelle ist. Zunächst mal lässt sich diese Zelle schlecht handeln, da sie per Eingabeleiste oben den ganzen Bildschirm füllt, aber das Hauptproblem ist: Sobald ich diese Zelle einfach kopiere, und in ein anderes Programm - und sei es nur notepad - einfüge, dann ist jedes verdoppelt.
Aus height=10 wird also height=10. Wenn ich den Inhalt dieser Zelle jedoch ein der Eingabeleiste markiere und dann kopiere, bleibt alles normal.
Ich möchte den Zellinhalt möglichst bequem per CommandButton in die Zwischenablage befördern, nun kenne ich mich aber mit Makros noch nicht soweit aus, dass ich das hinbekomme, und die Makro-Aufzeichnung bricht ab, sobald ich in der Eingabeleiste hantiere... Wie kann ich das am besten lösen?

Kann mir da jemand helfen? ???
 
  • #2
1. Ja, aktiviere den Schreibschutz für die Datei.
2. Passe, da müssen die Office-Gurus ran ;D

Cheers,
Joshua
 
  • #3
*aarg* da hätt ich auch selber drauf kommen können. :-[ danke PCDjoshua
lässt sich der name trotzdem noch irgendwie aus bestimmen zellen/variablen der mappe vorgeben?
 
  • #4
Hi Jenz,

für das Problem 2 die folgenden 2 Makros. In der Symbolleiste kannst Du die zwei neue Button anlegen und die Makros zuweisen. So kannst du sie jederzeit aufrufen.
Code:
Public Sub InhaltEinerZelleAlsTextInsClipboard()
  Dim myDataObj As DataObject, s_tmp As String
 ->eine Zelle selektiert ?
  If Selection.Count = 1 Then
    Set myDataObj = New DataObject
   ->als Text ins DataObj
    s_tmp = Selection.Value
    myDataObj.SetText s_tmp, 1
   ->DatObj ins Clipboard
    myDataObj.PutInClipboard
    Set myDataObj = Nothing
  Else
    MsgBox (Mehr als eine Zelle selektiert.)
  End If
End Sub
Public Sub InhaltClipboardAlsTextInEineZelle()
  Dim myDataObj As DataObject, s_tmp As String
 ->eine Zelle selektiert ?
  If Selection.Count = 1 Then
   ->DatObj ins Clipboard
    Set myDataObj = New DataObject
    myDataObj.GetFromClipboard
   ->als Text aus DataObj
    s_tmp = myDataObj.GetText(1)
    Selection.Value = s_tmp
    Set myDataObj = Nothing
  Else
    MsgBox (Mehr als eine Zelle selektiert.)
  End If
End Sub

zum Problem 1:
Abfangen kannst Du das Speichern-Ereignis mit einem Makro in der Code-Seite->DieseArbeitsmappe'.
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  
  If Not SaveAsUI Then
    MsgBox ( _
      Bitte benutzen Sie den SpeichernUnter und geben Sie der Datei den Namen xxxx.)
    Cancel = True
  End If
End Sub

Um den Datei-Namen zu kontrollieren, müßtest du den Windows-Speichern-Dialog aufrufen (API nicht Excel) und dessen Rückgabe (Pfad/Dateiname) auswerten und bei zulässigem Dateinamen dann selbst speichern. Das ist etwas aufwendiger ...


Gruß Matjes  :)
 
  • #5
Hey Super! Das ist genau das, was ich brauchte! Vielen Dank Matjes!

nochmal zum (gelösten) 2. Problem: Kann ich das Selection.Value auch durch eine ganz bestimmte Zelle einer Tabelle - nicht selektiert - ändern? Und, wie?

Dass der riesen Zellinhalt mir beim selektieren nicht mehr den ganzen Bildschirm verdeckt hab ich jetzt auch per ausblenden im geschützen Arbeitsblatt hinbekommen.

und zum 1.: Danke dir auch für dieses Makro. Wenn da erst n API benötigt wird werde ich mich wohl mit dem guten alten Schreibschutz zufriedengeben. Kann ich im Makro ohne API den aktuellen Dateinamen abrufen? Sozusagen: IF Dateiname=Standart THEN SaveAs-Prüfung ELSE Speichern lassen. So dass also, wenn der Dateiname bereits nicht mehr dem Original entspricht gespeichert werden darf?

jenz.
 
  • #6
Hallo Jenz,

Code:
Selection.Value
kannst durch
Code:
Activesheet.cells(z,sp).value
ersetzen. z ist dabei durch die Zeilennummer zu ersetzen, sp durch die Spaltennummer (sp = 3 entspricht z.B. C).

Zum Speichern Problem:
Zum Zeitpunkt des Ereignisses Workbook_BeforeSave steht ja der Name noch nicht fest. Er soll ja erst ausgewählt werden. Das Ereignis, welches du suchst, wäre Workbook_NachDateinamenAussuchen - und das gibt es nicht. :'( Wäre nur mit API machbar.

Noch eine Bemerkung: wenn jemand beim Aufruf der Datei die Makros deaktiviert, kann er sowieso machen was er will. So ein allgemeiner Grundsatz ist: Gegen Sabotage kann man sich nicht vollkommen schützen. Also sollte eigentlich ein Hinweis ausreichen.

Gruß Matjes  :)
 
  • #7
Alles klar, habs so gebastelt
Code:
s_tmp = ActiveWorkbook.Sheets(Tabelle2).Cells(21, 3).Value

Wegen dem Speichern: Es handelt sich ja um ein Workbook, welches bereits abgespeichert ist - also schon einen Dateinamen hat. Sprich: ein leeres Formular als Vorlage. Das soll dann nur unter anderem Namen gespeichert werden als die Vorlage. Wenn allerdings schon nicht mehr das Original bearbeitet wird, sondern eine Kopie mit anderem Namen, dann darf gespeichert werden. Ich suche also Workbook_CheckOriginal oder so ;)
 
  • #8
also als Beispiel für eine Datei namen test.xls:
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  If Not SaveAsUI Then
    If ActiveWorkbook.Name = test.xls Then
      MsgBox ( _
        Bitte benutzen Sie den SpeichernUnter und geben Sie der Datei den Namen xxxx.)
      Cancel = True->hiermit wird Save abgebrochen
    End If
  End If
End Sub

Nachteilig ist, daß beim SpeichernUnter der alte Dateiname als Vorgabe dient.  :mad:
Gruß Matjes  :)
 
  • #9
ja, genau so passt das! :)
Mit dem kleinen Nachteil kann ich leben.

Tausend Dank Matjes!
 
Thema:

(Excel) Speichern verbieten / HTML-Code kopieren

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben