Ich habe im Forum durchaus Hilfe gefunden, aber hänge trotzdem noch.
Ich will eine Datenbank auf Excel Basis erstellen.
Dabei soll eine angegebene Zeichnungs-Nr. von einem Bauteil angeklickt werden können.
Durch den Klick, soll sich das Programm öffnen, in dem die Zeichnung betrachtet werden kann.
Zeitgleich soll auch die Zeichnungsnummer, welche in der Spalte hinterlegt ist, in die Zeile des Betrachtungsprogramms eingefügt werden.
Bin momentan soweit:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 3 Or Target.Column = 4 Then
Shell "C:\apps\KView\DE\kview.exe " & Cells(Target.Row, 1) & „“, vbNormalFocus
Cancel = True
End If
End Sub
Die Frage ist jetzt nur, wie die Zeichnungsnummer von Excel rauskopiert und in das andere Programm übernommen wird!
das wird so sicherlich nicht funktionieren. Du kannst im VBA editor mal schauen, ob du bei „extras“ --> „verweise“ das Programm findest, du als bibliothek einbinden kannst. dann kannst du eventuell aus dem VBA das Programm mit Parametern starten. siehe dazu dann objektbibliothek (F2)
um die Daten in ein Anderes Programm hinzuzufügen musst du das Programm als Objekt in Excel erstellen können (CreateObject „kview.IrgenEtwas“). Mit dem Shell Aufruf übergibst du die Erstellung an das Betriebssystem und hast keine Eingriffsmöglichkeiten mehr!
Durch den Klick, soll sich das Programm öffnen, in dem die
Zeichnung betrachtet werden kann.
Zeitgleich soll auch die Zeichnungsnummer, welche in der
Spalte hinterlegt ist, in die Zeile des Betrachtungsprogramms
eingefügt werden.
Die Frage ist jetzt nur, wie die Zeichnungsnummer von Excel
rauskopiert und in das andere Programm übernommen wird!
Hat das Programm denn eine Art ‚Import-Schnittstelle‘ um diese Nummer entgegenzunehmen?
Ev. wäre SendKeys eine - wenn auch unsichere - Methode.
Hallo Barney_S
Da ist halt auch der Hacken. Das Programm muss „automatisierbar“ sein. Es muss also ein interface für andere Programme bereitstellen, über das dann die Funktionalität genutzt werden kann.
Du musst eine Referenz auf kview in Excel hizufügen (können). Falls es geht, muss man sich mit dem Objektmodell von kview auseinandersetzen um die Zeichnungsnummer-Property zu finden.
meines Wissens nach, funktioniert das nicht, da es sich bei KView nicht um ein Microsoft-Produkt handelt.
Was allerdings möglich wäre, wenn Du die einzelnen Grafiken mit der Nummer bezeichnest und dann versuchst, erst das Programm und dann die Datei zu öffnen, also z.B. so:
Sub StarteDatei(strDateiname)
Dim myShell As Object
'angenommen im Blatt „Zeichnungen“ stehen Deine Nummern
'und der Focus liegt auf der entspr. Nummer
Sheets(„Nummern“).select
'Die Nummer in die Variable „Zeichung“ schreiben
Zeichnung = ActiveCell.value
'Die Anwendung KView starten
Set myShell = CreateObject(„KView.Shell“)
'Die Datei öffnen
myShell.Run „C:\Dein\Ordner“ & Zeichnung & „.jpg“
Set myShell = Nothing
End Sub
Probier es mal.
Feedback wäre schön !
Gruß,
Jochen
Puh,
das lässt sich ohne Kenntnis des gestarteten Programmes nicht beantworten! Vielleicht hat es ja ein command line interface, so das man das als Startparameter mitgeben kann. Eine andere Möglichkeit sehe ich nicht (das gestartete Programm ist ja wohl ein Fremdprogramm in das man nicht eingreifen kann?).
Rainer
100% hab ich deine Frage jetzt nicht verstanden-speziell: Inhalt welcher Zelle soll kopiert werden.
Ich hab jetzt 2 Möglichkeiten gefunden, wie du den Dateinamen/ZeichnungsNr in die Zwischenablage bekommst.
Variante 1: Der Text in der Zelle mit der Zeichnungsnummer wird in die Zwischenablage übertragen.
Variante 2: Die Zelle mit der Zeichnungsnummer wird vor der Anzeige der Zeichnung im Viewer kopiert.
Je nach Fähigkeiten der Anwendung wird die kopierte Zelle bzw. ihr Inhalt unterschiedlich eingefügt.
Das Einfügen im Viewer muss du dann manuell machen.
Getestet hab ich mit einem Texteditor. Ich hoffe das funktioniert auch mit KView.
Da es ggf. zu Fehlern im Makro-Ablauf kommen kann, hab ich einige Prüfungen eingefügt. Bei einigen Programmaufrufen per „Shell“ müssen die Parameter (Dateiname etc.) in Anführungszeichen gesetzt werden. Dies hab ich auch ergänzt.
Gruß
Franz
'Erstellt unter WindowsVista, Excel 2007
'Variante 1 - Dateiname in Zelle wird als Text in Zwischenablage übertragen
Private Sub Worksheet\_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Im VBA-Editor muss für die Datei über Extras---Verweise der Verweis auf \_
MS Forms2.0 Object Library
'gesetzt sein, da sonst Fehlermeldung bei Dim objData as DataObject
Dim objData As DataObject
If Target.Column = 3 Or Target.Column = 4 Then
If Cells(Target.Row, 1) = "" Then
MsgBox "Kein Dateiname in Spalte A eingetragen"
ElseIf Dir(Cells(Target.Row, 1)) "" Then
'Dateiname/Zeichnungs-Nr. wird in Zwischenablage geschrieben
Set objData = New DataObject
objData.SetText Cells(Target.Row, 1).Text
objData.PutInClipboard
Set objData = Nothing
Shell "C:\apps\KView\DE\kview.exe """ & Cells(Target.Row, 1) & """", vbNormalFocus
Cancel = True
Else
MsgBox "Datei """ & Cells(Target.Row, 1) & """ nicht gefunden"
End If
End If
End Sub
'Variante 2 - Zelle mi Dateiname kopieren vor Aufrufen des Viewers
Private Sub Worksheet\_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 3 Or Target.Column = 4 Then
If Cells(Target.Row, 1) = "" Then
MsgBox "Kein Dateiname in Spalte A eingetragen"
ElseIf Dir(Cells(Target.Row, 1)) "" Then
'Zelle mit Dateiname/Zeichnungs-Nr kopieren
Cells(Target.Row, 1).Copy
Shell "C:\apps\KView\DE\kview.exe """ & Cells(Target.Row, 1) & """", vbNormalFocus
Cancel = True
Else
MsgBox "Datei """ & Cells(Target.Row, 1) & """ nicht gefunden"
End If
End If
End Sub
es gibt bestimmt Möglichkeiten, über eine Schnittstelle mit anderen Programmen zu kommunizieren.
Für Export nach Outlook hatte ich mal was geschrieben.
Hier ein kleiner Einblick, vielleicht hilft das weiter.
Sub Export()
’ Die Arbeitsmappe heißt ‚Test1.xls‘
’ Die Tabelle heißt ‚Tabelle1‘
’ In Spalte-A1 steht z.B. die Zeichnungsnummer.
Dim Wert As String
Sheets(„Tabelle1“).Activate
Wert = Cells(1, 1)
’ Datei für Senden an Oulook vorbereiten und
’ temporär abspeichern
ActiveWorkbook.SaveAs „Test2.xls“
Application.Dialogs(xlDialogSendMail).Show Empfänger, "Zeichnungsnummer: " & Wert
End Sub
Sonst kann ich dir leider nichts anbieten, da ich mit Schnittstellen programmieren nichts am Hut habe.