Microsoft Excel

Herbers Excel/VBA-Archiv

vor Ausführung einer UDF Zwischenspeicher "retten"

Betrifft: vor Ausführung einer UDF Zwischenspeicher "retten" von: Peter
Geschrieben am: 25.06.2008 15:26:24

Guten Tag
Ich habe folgendes Problem:
Ich kopiere in einer Tabelle eine UDF in eine andere Zelle. Diese wird berechnet und gleichzeitig wir die Zwischenspeicher gelöscht.

Ist es möglich, dass vor Ausführung der eigentlichen Funktion zuerst der Zwischenspeicher einer Variable übergeben wird und am Ende die Variable wieder dem Zwischenspeicher zugewiesen wird? Wie müsste das geschehen`

Danke für eine Antwort.

Gruss, Peter

Public Function abc(defA As Variant, Periode As String, Positiv As Boolean) As Variant
Dim Zwischenspeicher as ???
Zwischenspeicher = ?????
....
...
????? = Zwischenspeicher
End Function


  

Betrifft: AW: vor Ausführung einer UDF Zwischenspeicher "retten" von: Tino
Geschrieben am: 26.06.2008 00:46:09

Hallo,
hier mal ein kleines Beispiel um in die Zwischenablage zu schreiben und auch wieder zu lesen.

'erordert Verweis: Microsoft Forms 2.0 Object Library!!!!

Sub TestZW()
Dim MyData As New DataObject
Dim MeTXT$
'Info: ZW = Zwischenablage
With MyData
    .Clear 'lösche ZW

    'schreibe in ZW
    .SetText Range("A1")
    MyData.PutInClipboard
   
    'Lese von ZW
    .GetFromClipboard
    MeTXT = .GetText(1)
End With
End Sub




Gruß Tino

http://www.VBA-Excel.de




  

Betrifft: AW: vor Ausführung einer UDF Zwischenspeicher "retten" von: Peter
Geschrieben am: 26.06.2008 09:14:31

Hallo Tino
Vielen Dank für deine Antwort. Mir ist noch nicht ganz klar, wie ich deinen Code in meine Funktion integrieren kann. Kannst du mir da weiterhelfen?
Ich habe eine vereinfachte Beispielmappe hochgeladen. Ich möchte gerne den Bereich B3:C3 nach B5:C5 und dann nach B7:C7 und dann nach B9:C9 kopieren. Je nach Umgebung (via Citrix oder lokal) wird mir der Zwischenspeicher nach dem Kopieren der Formeln gelöscht (Citrix) resp. nicht gelöscht (zu dieser "Ungleichbehandlung" starte ich einen separten Eintrag um nicht zwei Probleme im gleichen Thread zu schleppen).

Oder muss ich deinen Code in in den untenstehenden Ereigniscode ( </p><pre>Private Sub Workbook_SheetChange )integrieren, weil ja dieser letztendlich das Zwischenergebnis löscht?

Vielen Dank, Peter

https://www.herber.de/bbs/user/53365.xls


Option Explicit
Dim bUndo As Boolean
</p><pre>Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
Application.Calculate
If Sh.Name <> ActiveSheet.Name Then
With Application
.EnableEvents = False
If Not bUndo Then .Undo
.EnableEvents = True
End With
bUndo = True
Exit Sub
End If
bUndo = False
End Sub</pre><p>


  

Betrifft: AW: vor Ausführung einer UDF Zwischenspeicher "retten" von: Tino
Geschrieben am: 26.06.2008 10:14:44

Hallo,
irgendwie verstehe ich es nicht, habe eben sembliche Varianten durchgetestet.
Bereich B3:C3 kopiert und glaube 20mal irgendwo bzw. auch in Deine benannten Bereiche eingefügt.
Kannst Du mir kurz nochmal schildern, wann diese Office Zwischenablage bei welcher Aktion gelöscht wird und dies aber nicht machen soll oder darf.
Weil die Win Zwischenablage nicht gerade komfortabel ist und zum Bsp. Zellformatierungen nicht
übernehmen kann, würde ich erst mal nach einer Alternative suchen.

Gruß Tino

www.VBA-Excel.de




  

Betrifft: AW: vor Ausführung einer UDF Zwischenspeicher "retten" von: Peter
Geschrieben am: 26.06.2008 10:41:27

Hallo Tino
Auf meiner lokalen Maschine funktioniert das Kopieren wunderbar. Wenn die Datei auf dem Server gespeichert ist geht die Zwischenablage verloren, wenn der Code Private Sub Workbook_SheetChange nicht deaktiviert ist. Dieses Problem habe ich in einem neuen Beitrag beschrieben:

https://www.herber.de/forum/messages/988888.html

Leider habe ich keine Ahnung, weshalb die gleiche Datei in diesen unterschiedlichen Umgebungen so unterschiedliche Ergebnisse gibt.

Gruss, Peter


  

Betrifft: AW: vor Ausführung einer UDF Zwischenspeicher "retten" von: Tino
Geschrieben am: 26.06.2008 11:21:25

Hallo,
also habe nochmal etwas getestet, der Office Zwischenspeicher wird zum Beispiel durch doppelklick in eine Zelle geleert.
Aber dies hat nichts mit Deinem SheetChange Ereignis zu tun, also daran kann es nicht liegen!
Diesen doppelklick kann man aber abfangen, zum Bsp. wenn der doppelklick außerhalb von der Spalte B bis D ausgeführt wird, so wird dieser unterbunden.

Als Code ins Tabellenblatt:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim sbereich As Range
If Intersect(Target, Range("B:D")) Is Nothing Then
 Cancel = True
End If
End Sub




Gruß Tino

www.VBA-Excel.de




 

Beiträge aus den Excel-Beispielen zum Thema "vor Ausführung einer UDF Zwischenspeicher "retten&"