Programme in Excel öffnen

Servus miteinander.

Ich habe ein Problem.

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!

Danke schon mal im voraus!

Grüße

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)

mfg

OVM

Hallo Barney_S

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!

MfG.
W.W.

Grüezi Barney

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.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Wie gehts es dann weiter mit CreateObject?
Irgendwie muss das Programm ja trotzdem mit dem Doppelklick starten?

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.

MfG.
W.W.

Hallo Barney,

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

sorry, ich weiß nicht mehr als die antworten, die jetzt schon vorliegen.

viel erfolg!

Hallo Barney

Leider kenn ich mich mit Datenbanken nicht so gut aus.
Da kann ich dir leider nicht weiterhelfen.

MFG

Hallo,

habe ich noch nicht gemacht,

Gruß

Hallo Barney,

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

Lösung und weiteres Problem
Servus miteinander.

ich hab das Problem jetzt gelöst:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

txt = ActiveCell.Value
If Len(txt) = 7 And IsNumeric(Mid(txt, 2)) Then
txt = „0“ & txt
End If

If Len(txt) = 8 And IsNumeric(Mid(txt, 3)) Then
i_SystemDrive = Environ(„systemdrive“)
ChDrive i_SystemDrive
ChDir ("\apps\KVIEW\DE")
TaskID = Shell("kview.exe " & txt, 1)

End If

If Len(txt) = 9 And IsNumeric(Mid(txt, 2)) Then
i_SystemDrive = Environ(„systemdrive“)
ChDrive i_SystemDrive
ChDir ("\apps\KVIEW\DE")
TaskID = Shell(„kview.exe 0“ & txt, 1)

End If

If Len(txt) = 10 And IsNumeric(Mid(txt, 8)) Then
i_SystemDrive = Environ(„systemdrive“)
ChDrive i_SystemDrive
ChDir ("\apps\KVIEW\DE")
TaskID = Shell("kview.exe " & txt, 1)

End If

End Sub

in der Tabelle sind 3 Zeichnungsnummern enthalten, deswegen 3 mal die If-Schleife.

Wo ich allerdings wieder hänge:

Ich hätte gerne, dass wenn ich alle 3 Zeichnungen anklicke, das Programm 3 mal offen ist.
Momentan überschreibt die eine Zeichnung immer die andere.

Gibt es eine solche Anweisung?

Grüße

Hallo Barney_S,

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.

mfg
Softoldi

Hallo Barney_S,

das ist sehr speziell und übersteigt meine Kenntnisse.
Da kann ich leider nicht helfen.

Gruß Hugo