Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

aus Zwischenablage einfügen
#1
Hallo!

Wir nutzen zur Rechnungsstellung Excel. Haben dort mittlerweile viele verschiedene Makros zum Anpassen und drucken, speichern usw...
Ein Makro ruft eine andere Datei auf, die widerrum eine fortlaufende Rechnungsnummer generiert, diese kopiert und sich dann auch 
selbstständig schließt.
Dann muss man allerdings händisch noch die Rechnungsnummer einfügen, also z.B. über Strg+V
Diesen Schritt möchten wir aber nun auch noch automatisieren.
Da die Rechnungsnummern-Datei aber auch noch geschlossen werden muss, gehe ich davon aus, dass der Befehl
Strg+V ca. 3-5 Sekunden zeitverzögert ausgeführt werden müssten.

Haben dies jetzt schon über Application.OnTime versucht, wissen aber nicht ob wir dies nicht richtig einsetzen bzw.
ob es noch eine andere Möglichkeit gibt.


Hier ist einmal der ganze Ablauf:
1. Rechnungsvorlage wird befüllt mit Kundendaten und Artikeln

2. Rechnungsnummermakro wird gestartet: 
- die gewünschte Zelle wird ausgewählt
- die Rechnungsnummerdatei wird geöffnet, die vorhandene Rechnungsnummer wird +1 erzeugt und über Strg+C kopiert, die Datei wird geschlossen


3. Wir müssen händisch die generierte Rechnungsnummer (aus dem Zwischenspeicher) einfügen (über Strg+V)


Über jegliche Hilfe sind wir dankbar!
Viele Grüße, Christopher (vom Saxophon-Service)
Antworten Top
#2
Hallo

da ist mir so einiges unklar, ich habe es bei ähnlichen Anfragen mehrfach so gemacht:
Vorlage öffnen, neue Rechnungs-Nr in Vorlage und Rechnungs Nr. Datei einfügen. 
Rechnungs Nr. Datei speichern und schliessen. Da ist kein Strg-V erforderlich!!

Lade doch mal die Makros oder Beispieldatei hoch, die ihr jtzt verwendet, und wo die Rechnung Nr. hochgezählt wird.
Vielleicht können wir euer Makro einfach um diese Aktion erweitern. Dann wäre das Problem gelöst.
Ohne eure Datei und eure Makros zu kennen können wir dazu keinen konkreten Tipp geben.

mfg Gast 123
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • Saxophon-Service
Antworten Top
#3
Hallo Gast 123!

Ja, genau diesen manuellen Schritt des kopieren und einfügens wollen wir ja nicht.
Die Rechnungsnummerdatei wird nach dem generieren und kopieren der neuen rechnungsnummer
ja sofort geschlossen, damit auch von zwei anderen Rechner nur sehr selten ein paralleler Zugriff 
auf die Datei passiert.

Wir brauchen also "nur" Hilfe dabei, die Rechnungsnummer (vielleicht über die Zwischenablage)
dann in die automatisch angewählte Excel-Datei bzw. das  angewählte Tabellenblatt einzufügen...

Hilft das?
Antworten Top
#4
Hallöchen,

wenn Du schon mit Makros arbeitest, brauchst Du die Rechnungsnummer nur einer Variable in der aufrufenden Datei zuordnen und da ist dann der "Öffnungsstand" Smile der Nummerndatei egal Smile Ich vermute jetzt mal, dass in der Nummerndatei die Nummer nur "steht" und von der aufrufenden Datei die neue Nummer eingetragen wird?

Im Prinzip steht dann wahrscheinlich im aufrufenden Makro so etwas wie
...Range("A1") = ...Range("A1")+1 'Punkte stehen für Datei + Blatt, sofern erforderlich
(eventuell nicht ganz so simpel, falls die "Nummer" alphanumerisch ist und nicht nur numerisch)

Du könntest dann als nächste Zeile etwas derartiges programmieren:
lNeueNummer = ...Range("A1").Value

und diese Variable dann irgendwo zum Einfügen nutzen.

Ansonsten, wie Gast schon schrieb, die Dateien bis nach der Übernahme der Nummer offen halten, dann kannst Du das nach der Berechnung direkt übernehmen.
Im Prinzip
Workbooks("Nummernspeicher").Blatt("irgendeins").Range("A1").Value = Workbooks("Nummernspeicher").Blatt("irgendeins").Range("A1").Value + 1
Workbooks("Datei2").Blatt("irgendeins").Range("A1").Value = Workbooks("Nummernspeicher").Blatt("irgendeins").Range("A1").Value
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Saxophon-Service
Antworten Top
#5
Hey...

Nee, so habe ich es nicht gebaut.
Die Datei, die die Rechnungsnummer generiert hat in einer Zelle die aktuelle Rechnungsnummer.
Dann habe ich ein Makro gebaut, dass beim nächsten Öffnen der Datei diese +1 in die Zelle darunter legt.
Dann wird diese Zelle kopiert und die Datei gespeichert und geschlossen.

Bin evtl. jetzt auch schon einen Schritt weiter.
Haben die Microsoft Zwischenablage aktiviert.
Jetzt wäre also die Überlegung die kopierte Rechnungsnummer per VBA aus der Zwischenablage in die Zelle der
Rechnungsdatei einfügen zu können...

Mir platzt der Kopf   Huh
Antworten Top
#6
Hallöchen,

wie gesagt, kopieren brauchst Du nix ... Wo steht denn das Makro, dass die Nummer erhöht? (siehe meine Vermutung)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#7
Hey,

das Makro steht in der Rechnungsnummerdatei.
Aber wir wollen die Datei und das Prinzip der Nummerngenerierung auch nicht ändern.

Wir wollen "nur" den Schritt EINFÜGEN automatisieren, so dass wir nicht nach dem Makro direkt daran denken müssen,
bzw. wir danach direkt ein weiteres Makro ausführen lassen können...
Antworten Top
#8
Hallo!

Ich brauche bitte folgende Hilfe:

Ich möchte den letzten kopierten Zwischenablageninhalt (eine Zahl) per VBA in die ausgewählte Zelle einfügen.
Wenn ich einen Text, z.B. im Browser kopiere, dann funktioniert es gut hiermit:

Dim myData As DataObject
Set myData = New DataObject
myData.GetFromClipboard
Range("A1") = myData.GetText

wenn ich dies mit einer zelle aus excel mache, dann bekomme ich folgende Meldung
Laufzeitfehler '-2147221404 (80040064)':

DataObject:GetText Ungültige FORMATETC-Struktur


Hat jemand da die Lösung?

Danke!
Christopher
Antworten Top
#9
... wie gesagt, dann hole in das Makro der aufrufenden Datei vor dem Schließen der Nummerndatei den Inhalt der hochgezählten Zelle.
Ansonsten, Einfügen ist Paste oder PasteSpecial.
z.B.
Range("A1").Paste
Range("A1").PasteSpecial Paste:=xlValues

bzw. statt Range("A1") dann ActiveCell
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#10
Hallo Christopher,

Vorschlag von Nepumuk:
versuch es mal so: 

https://www.herber.de/forum/archiv/1076t...40064.html

Code:
Option Explicit

Private Const CF_TEXT As Long = 1

' Mit Fehlermeldung
Private Sub CommandButton5_Click()
    Dim objDataObject As DataObject
    Set objDataObject = New DataObject
    objDataObject.GetFromClipboard
    If objDataObject.GetFormat(CF_TEXT) Then
        Range("A1") = objDataObject.GetText
    Else
    MsgBox "Keine brauchbaren Daten im Zwischenspeicher"
    End If
    Set objDataObject = Nothing
End Sub

Code:
Option Explicit

Private Const CF_TEXT As Long = 1

' Oder ohne Fehlermeldung
Private Sub CommandButton6_Click()
    Dim objDataObject As DataObject
    Set objDataObject = New DataObject
    objDataObject.GetFromClipboard
    If objDataObject.GetFormat(CF_TEXT) Then Range("A1") = objDataObject.GetText
    Set objDataObject = Nothing
End Sub
Gruß Karl
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste