Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Daneli am Januar 22, 2020, 19:28:57

Titel: Zwischenablage einfügen
Beitrag von: Daneli am Januar 22, 2020, 19:28:57
Hallo an Alle ich bin neu hier
Ich habe ein Problem mit dem Einfügen der Zwischenablage in ein Access Textfeld
Ich rufe aus einem Textfeld Excel auf um dort berechnungen zu machen, das Resultat copiere ich mit VBA in die Zwischenablage und beenden dann Excel
Das funktioniert soweit sehr gut.
Wenn ich das Resultat nun im Accesss Textfeld einfügen will, erhalte ich eine Fehlermeldung dass das Einfügen nicht möglich ist, oder es wird der zweitletzte Wert der Zwischenablage eingefügt. Wenn ich aber Ctrl+V drücke wird der Korrekte Wert eingetragen.
Hat jemand einen Rat?
Hier noch den Code den ich verwende:

    FollowHyperlink "C:\Daten\Home\KRD\Eigene Daten\Hühnerhaltung\Berechnungen\Einzeleier.xlsm"
    Call ZwischenAblage2String

Function ZwischenAblage2String() As String
' Zwischenablage auf Variable ausgeben
' Ein Verweis auf Microsoft Forms 2.X Object Library
' muss gesetzt sein
    Dim TestDaten As DataObject
    Set TestDaten = New DataObject
    Call TestDaten.GetFromClipboard
    Eiertotal = TestDaten.GetText(1)
    Set TestDaten = Nothing
End Function

     Me!EndbestandEier = Eiertotal
Titel: Re: Zwischenablage einfügen
Beitrag von: Beaker s.a. am Januar 22, 2020, 21:59:02
Hallo Daneli,
Du wirst wohl eine Warteschleife zwischen dem Öffnen der Excel-Datei und
den Abruf der Zwischenablage einbauen müssen, denn bevor in Excel die
Zwischenablage gefüllt wird, kannst du in Access noch nicht auf diesen Eintrag
zugreifen.
gruss ekkehard
Titel: Re: Zwischenablage einfügen
Beitrag von: Daneli am Januar 23, 2020, 00:44:38
Danke, Beaker
Könnte funktionieren, ich werde es einmal ausprobieren
Titel: Re: Zwischenablage einfügen
Beitrag von: Daneli am Januar 23, 2020, 01:05:23
Hallo Beaker
Die Warteschlaufe hat auch nichts gebracht.
Es ist immer noch das gleiche Problem:
Manuell wir der aktuelle(korrekte) Wert eingetragen
und mit VBA der vorherige Wert
Titel: Re: Zwischenablage einfügen
Beitrag von: ebs17 am Januar 23, 2020, 08:41:20
FollowHyperlink öffnet zwar eine Datei, man bekommt aber dadurch keine Referenz auf dieses Objekt. Wie will man das erfassen, was man gerade wünscht?

Daneben: Arbeit mit Zwischenablage ist fehleranfällig, weil da der User mit seiner "Kreativität" eingebunden wird und weil die Zwischenablage von anderen Prozessen genutzt werden kann und somit im Moment etwas ganz anderes als gedacht enthalten kann.

Kopieren:
Tabellen, Formulare und deren Felder sind Objekte und als solche genau adressierbar.
Also heißt richtiges Kopieren:
Nimm von der Quelladresse den Inhalt + übergib diesen an die Zieladresse. Da man hier nicht extra selektieren und fokussieren muss und die Zwischenablage nicht bemühen muss, kann man das sauber und deutlich weniger fehleranfällig per VBA automatisieren.

Titel: Re: Zwischenablage einfügen
Beitrag von: DF6GL am Januar 23, 2020, 09:41:09
Hallo,

Excel-Automation ist hier der einzig richtige Weg.



Trotzdem Vorschlag zur Lösung der Warteschleife-Problematik:

Anstelle mit Code zu "warten", zeige eine MsgBox an ("Sind Daten kopiert?"), die nach dem Kopieren in die ZA mit OK bestätigt wird und dann die Funktion aufruft.
Titel: Re: Zwischenablage einfügen
Beitrag von: Daneli am Januar 26, 2020, 12:56:29
Hallo an alle die mir geholfen haben
Das Problem ist, dass dass der VBA Code nach dem öffnen  der Excel-Datei weiter ausgeführt wird. Ich habe das Problem gelöst indem ich eine Abfrage gestartet habe ob Excel und die Datei noch geöffnet sind.
Jetzt funktioniert das  Ganze einwandfrei. Hier noch den Code:

Private Sub EndbestandEier_GotFocus()
On Error GoTo Fehler
ClearClipboard = True
CloseClipboard
FollowHyperlink "C:\Daten\Home\KRD\Eigene Daten\Hühnerhaltung\Berechnungen\Einzeleier.xlsm"
    Dim datExitTime As Date 'Warteschlaufe beginnen
    datExitTime = Now + TimeSerial(0, 0, 2)
    Do
      If Now > datExitTime Then Exit Do
    Loop
Call IstExcelGeöffnet   'Kontrolle ob Excel noch geöffnet ist
EndbestandEier = Eiertotal
Forms!Herden.ProduktionsDaten.Form.Bodeneier.SetFocus
Exit Sub
Fehler:
MsgBox "Unerwarteter Fehler ist aufgetreten"
End Sub


Sub IstExcelGeöffnet() 'prüfen ob excel geöffnet ist
Dim XL1 As Object
On Error Resume Next
Set XL1 = GetObject(, "Excel.Application")
If Err <> 0 Then
MsgBox "Excel ist nicht geöffnet"
Exit Sub
Else
Call IstMappeGeöffnet
Exit Sub
End If
On Error GoTo 0
End Sub


Sub IstMappeGeöffnet() ' prüfen, ob eine bestimmte Excel-Datei geöffnet ist:
Start:
On Error GoTo Start
On Error Resume Next
Open "C:\Daten\Home\KRD\Eigene Daten\Hühnerhaltung\Berechnungen\Einzeleier.xlsm" For Binary Access _
Read Lock Read As 1
Close #1
If Err.Number <> 0 Then
GoTo Start
'MsgBox "Datei ist bereits offen"
Else
Close #1
Call GetClipboard
'MsgBox "Datei ist nicht in Bearbeitung"
End If
End Sub


Sub GetClipboard()
Dim MyData As New DataObject
Dim strText As String
MyData.GetFromClipboard
strText = MyData.GetText
Eiertotal = strText
End Sub


Excel Prüfung und Dateiprüfung könnte mann in einer einzigen SUB verarbeiten
Nochmal herzlichen Dank und alles Gute