ich habe ein Problem. Um Adressen aus Outlook meinen Excel Rechnungen
hinzuzufügen habe ich ein Add-in installiert und auch auf verweis aktiviert.
Es klappt ganz gut wenn ich es über das eigene Tab öffne. Ich möchte jedoch,
dass dieses add in per kick auf einen knopf über ein modul ausgeführt wird.
ich weiss wie man word öffnet, hab aber keine ahnung bei diesem programm.
Wisst ihr vielleicht was ich machen kann?
Viele Grüße,
René
>Wisst ihr vielleicht was ich machen kann?
Ein AddIn liefert Funktionen. Du musst einen Button benutzen und bei
Klick auf den Button eine Funktion des AddIns aufrufen, die das tut,
was du m�chtest. Leider kennen wir weder dein AddIn noch dessen
Wirkungsweise.
Martin
--
So auch ihr: wenn ihr in Zungen redet und nicht mit deutlichen Worten, wie kann
man wissen, was gemeint ist? Ihr werdet in den Wind reden. ...Wenn ich nun die
Bedeutung der Sprache nicht kenne, werde ich den nicht verstehen, der redet,
und der redet, wird mich nicht verstehen. [1. Kor 14, 9 - 11]
Hier ist das Add-in http://www.add-in-world.com/katalog/outlook-to-xl/
Ich möchte nur dass es aufgerufen wird - dass also nix anderes geschieht als
wie wenn der knopf im menu gedrückt würde.
Viele Grüße.
René
"Martin Hentrich" schrieb:
> On Sat, 6 Jun 2009 06:13:06 -0700, RenetheRhino
> <Reneth...@discussions.microsoft.com> wrote:
>
> >Wisst ihr vielleicht was ich machen kann?
>
> Ein AddIn liefert Funktionen. Du musst einen Button benutzen und bei
> Klick auf den Button eine Funktion des AddIns aufrufen, die das tut,
> was du möchtest. Leider kennen wir weder dein AddIn noch dessen
>Hier ist das Add-in http://www.add-in-world.com/katalog/outlook-to-xl/
>Ich m�chte nur dass es aufgerufen wird - dass also nix anderes geschieht als
>wie wenn der knopf im menu gedr�ckt w�rde.
Da das ein kommerzielles, wenn auch kostenloses Tool ist, warum
wendest du dich nicht an den Hersteller?
Auf der von dir zitierten Seite steht:
Bei Fragen oder Problemen wenden Sie sich bitte an
sup...@add-in-world.com
Ich war der Meinung, dass du das AddIn selbst gebastelt hast.
Martin
--
Eure Rede aber sei: Ja, ja; nein, nein.
Was dar�ber ist, das ist vom �bel.
[Mt. 5, 37]
Viele Grüße,
René
"Martin Hentrich" schrieb:
> On Sat, 6 Jun 2009 10:55:01 -0700, RenetheRhino
> <Reneth...@discussions.microsoft.com> wrote:
>
> >Hier ist das Add-in http://www.add-in-world.com/katalog/outlook-to-xl/
> >Ich möchte nur dass es aufgerufen wird - dass also nix anderes geschieht als
> >wie wenn der knopf im menu gedrückt würde.
>
> Da das ein kommerzielles, wenn auch kostenloses Tool ist, warum
> wendest du dich nicht an den Hersteller?
>
> Auf der von dir zitierten Seite steht:
> Bei Fragen oder Problemen wenden Sie sich bitte an
> sup...@add-in-world.com
>
> Ich war der Meinung, dass du das AddIn selbst gebastelt hast.
>
> Martin
> --
> Eure Rede aber sei: Ja, ja; nein, nein.
> Was darüber ist, das ist vom Übel.
> [Mt. 5, 37]
>
Application.CommandBars(1).Controls("Einfügen").Controls("Outlook-
Adresse...").Execute
oder
Application.CommandBars(1).Controls(4).Controls(7).Execute
das entspricht dem klicken auf Einfügen/Outlook-Adresse
Gruß
stefan
vielen Dank für die Hilfe, das werd ich heute Abend zuHause gleich mal
ausprobieren.
Ein frage, greift man mit dem Befehl auf die Ribbon zu oder auf die Pulldown
Menus von Excel?
Viele Grüße & nochmals danke,
René
"stefan onken" schrieb:
>Ein frage, greift man mit dem Befehl auf die Ribbon zu oder auf die Pulldown
>Menus von Excel?
Du meinst Excel in der Version 2007?
Martin
hallo René,
mit CommandBars() und Controls() greift man auf die Symbolleisten und
deren Befehle zu, wie es sie bis XL03 gab.
In XL07 werden per Code erstellte Commandbars / Controls zwar im Add-
Ins-Tab des ribbon angezeigt, aber der Aufruf über Controls().Execute
funktioniert weiterhin.
Allerdings ist auf der Seite des Add-In zu lesen, dass es eine XL07-
Unterstützung gibt. Ich kann das Add-In derzeit nicht runterladen.
Wenn diese Unterstützung die Erstellung eines ribbon-Eintrages
umfasst, funktioniert Controls().Execeute nicht mehr.
Gruß
stefan
gibt es einen befehl mit dem ich auf die ribbon zugreifen kann?
Grüße,
René
"stefan onken" schrieb:
Befehle des ribbon kann man mit Application.CommandBars.ExecuteMso
auslösen, aber anscheinend nur exceleigene Befehle.
Für Befehle des Add-In habe ich nur SendKeys: drücke Alt, dann siehst
du die Tastenkombination für das Tab des Add-In und auch für Adresse
einfügen.
Per VBA löst bei mir dieser Code das Add-In aus:
SendKeys "%Y3Y1"
Das kann/wird bei dir aber anders sein.
Vor SendKeys wird immer gewarnt, da es sich auf die aktive Anwendung
auswirkt, die versehentlich ja nicht Excel sein kann.
Ansonsten hilft wohl nur selbermachen. Hier ist ein Codebsp, um
Outlook-Kontakte in ein UserForm einzulesen.
http://www.office.gmxhome.de/_excel_outlook.htm#Einlesen von Outlook
Kontakten in eine Listbox
Gruß
stefan
>Vor SendKeys wird immer gewarnt,...
IMHO ist SendKeys in VISTA deaktiviert und l�st eine Fehlermeldung
aus, jedenfalls in VB und VBA.
Martin
hallo Martin,
ah, danke für den Hinweis. Die Benutzerkontensteuerung also sorgt
dafür, das SendKeys nicht geht.
Du suchtest nach einer Alternative http://tinyurl.com/l4hn9o, hast du
was gefunden?
Ich hab mal http://www.vbforums.com/showthread.php?t=412021 probiert,
das funktioniert hier um die Hilfe aufzurufen (aber hier geht ja auch
SendKeys).
Ich habe aber keine Idee, wie man Alt-Tastenkombinationen damit
sendet.
Gruß
stefan
Option Explicit
Private Const KEYEVENTF_KEYUP = &H2
Private Const INPUT_KEYBOARD = 1
Private Type KEYBDINPUT
wVk As Integer
wScan As Integer
dwFlags As Long
time As Long
dwExtraInfo As Long
End Type
Private Type GENERALINPUT
dwType As Long
xi(0 To 23) As Byte
End Type
Private Declare Function SendInput Lib "user32.dll" _
(ByVal nInputs As Long, pInputs As GENERALINPUT, _
ByVal cbSize As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Public Function SendKeysA(ByVal vKey As Integer, _
Optional booDown As Boolean = False)
'http://www.vbforums.com/showthread.php?t=412021
Dim GInput(0) As GENERALINPUT
Dim KInput As KEYBDINPUT
KInput.wVk = vKey
If Not booDown Then
KInput.dwFlags = KEYEVENTF_KEYUP
End If
GInput(0).dwType = INPUT_KEYBOARD
CopyMemory GInput(0).xi(0), KInput, Len(KInput)
Call SendInput(1, GInput(0), Len(GInput(0)))
End Sub
Sub sk()
SendKeysA vbKeyF1
End Sub
>Du suchtest nach einer Alternative http://tinyurl.com/l4hn9o, hast du
>was gefunden?
Ja, ich habe mir hier den Code gekauft. Klappt damit prima:
http://m8software.com/developer/keysend/sendkey.htm
Wenn man gugelt und nach sendkeys replacement schaut, findet man
eventuell auch freien Code.
Martin
Viele Grüße,
René
"Martin Hentrich" schrieb:
> On Wed, 10 Jun 2009 03:11:39 -0700 (PDT), stefan onken
Am Wed, 10 Jun 2009 12:25:00 +0200 schrieb Martin Hentrich:
>>Du suchtest nach einer Alternative http://tinyurl.com/l4hn9o, hast du
>>was gefunden?
> Ja, ich habe mir hier den Code gekauft. Klappt damit prima:
> http://m8software.com/developer/keysend/sendkey.htm
> Wenn man gugelt und nach sendkeys replacement schaut, findet man
> eventuell auch freien Code.
SendKeys ist in den meisten F�llen viel zu gef�hrlich. Wenn es unter Vista
nicht geht, um so besser. Auch die Simulation w�rde ich nicht einsetzen und
schon gar kein Geld daf�r ausgeben. Die beschreiben das Problem ja wie
folgt:
The send buttons send to whichever window had the focus immediately
Ich habe es jetzt nicht unter Vista, nur unter XP getestet, aber um in der
Ribbon-Leiste 'Men�punkte' anzusprechen, kann man folgendes machen:
Option Explicit
Private Declare Function GetClassName _
Lib "user32" Alias "GetClassNameA" ( _
ByVal hwnd As Long, _
ByVal lpClassName As String, _
ByVal nMaxCount As Long _
) As Long
Private Declare Function GetWindow _
Lib "user32" ( _
ByVal hwnd As Long, _
ByVal wCmd As Long _
) As Long
Private Declare Function GetWindowText _
Lib "user32" Alias "GetWindowTextA" ( _
ByVal hwnd As Long, _
ByVal lpString As String, _
ByVal cch As Long _
) As Long
Private Declare Function GetDesktopWindow _
Lib "user32" () As Long
Private Declare Function PostMessage _
Lib "user32" Alias "PostMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any _
) As Long
Private Const GW_CHILD As Long = 5
Private Const GW_HWNDNEXT As Long = 2
Private Const WM_KEYDOWN As Long = &H100
Private Const WM_KEYUP As Long = &H101
Private Const WM_SYSKEYDOWN As Long = &H104
Private Const WM_SYSKEYUP As Long = &H105
Public Sub OpenRibbon() ' Excel 2007 only
Dim lngHwnd As Long
' Alt-Taste + Taste F f�r den Tabellenreiter Ansicht
PostMessage Application.hwnd, WM_SYSKEYDOWN, vbKeyF, 2 ^ 29
' Ribbonfenster suchen, an welches die folgenden Tastenanschl�ge
' gesendet werden sollen
lngHwnd = FindChildWindowEx(Application.hwnd, "", "NetUIHWND")
' Taste Q f�r Zoom senden
PostMessage lngHwnd, WM_KEYDOWN, ByVal vbKeyQ, 0&
' PostMessage lngHwnd, WM_KEYUP, ByVal vbKeyQ, 0&
End Sub
Private Function FindChildWindowEx( _
ByVal HwndParent As Long, _
ByVal Caption As String, _
ByVal ClassName As String _
) As Long
Dim lngHwnd As Long
Dim lngChild As Long
Dim lngRet As Long
Dim varDummy As Variant
Dim strClass As String
Dim strCaption As String
Dim colParent As New Collection
' On Error Resume Next
If HwndParent = 0 Then HwndParent = GetDesktopWindow
' Ein Handle auf ein Kindfenster holen
lngHwnd = GetWindow(HwndParent, GW_CHILD)
Do
'Buffer f�r Klassenname anlegen
strClass = String(255, 0)
'Klassenname holen
lngRet = GetClassName(lngHwnd, strClass, 250)
strClass = left(strClass, lngRet)
If (LCase(ClassName) = LCase(strClass)) Or ClassName = "" Then
' Gesuchte Klasse gefunden
'Buffer f�r Fenstertext anlegen
strCaption = String(255, 0)
'Fenstertext holen
lngRet = GetWindowText(lngHwnd, strCaption, 250)
strCaption = left(strCaption, lngRet)
If (LCase(Caption) = LCase(strCaption)) Or ClassName = "" Then
FindChildWindowEx = lngHwnd
Exit Function
End If
End If
' Handle in Collection speichern
colParent.Add lngHwnd
'N�chstes Fenster auf gleicher Ebene holen
lngHwnd = GetWindow(lngHwnd, GW_HWNDNEXT)
Loop While lngHwnd <> 0
For Each varDummy In colParent
lngChild = GetWindow(CLng(varDummy), GW_CHILD)
If lngChild <> 0 Then
FindChildWindowEx = FindChildWindowEx( _
CLng(varDummy), Caption, ClassName)
If FindChildWindowEx <> 0 Then Exit For
End If
Next
End Function
Der Code simuliert die Tastenkombination Alt+F f�r den Tabellenreiter
Ansicht, anschlie�end einen Druck auf die Taste Q. Damit wird der Dialog
zum Einstellen des Zooms aufgerufen.
Solange du also einen Punkt �ber einen Tastendruck ausw�hlen kannst, sollte
das funktionieren.
Die KeyCode-Konstanten kannst du im Objektkatalog nachschlagen. Ich habe es
aber noch nicht ausgiebig getestet.
Viele Gr��e
Michael
--
http://michael-schwimmer.de
Masterclass Excel VBA ISBN-10: 3827325250
Das Excel-VBA Codebook ISBN-10: 3827324718
Microsoft Office Excel 2007-Programmierung ISBN-10: 3866454139
If (LCase(Caption) = LCase(strCaption)) Or Caption = "" Then
Hier noch einmal der vollst�ndige Code:
If (LCase(Caption) = LCase(strCaption)) Or Caption = "" Then
FindChildWindowEx = lngHwnd
Exit Function
End If
End If
' Handle in Collection speichern
colParent.Add lngHwnd
'N�chstes Fenster auf gleicher Ebene holen
lngHwnd = GetWindow(lngHwnd, GW_HWNDNEXT)
Loop While lngHwnd <> 0
For Each varDummy In colParent
lngChild = GetWindow(CLng(varDummy), GW_CHILD)
If lngChild <> 0 Then
FindChildWindowEx = FindChildWindowEx( _
CLng(varDummy), Caption, ClassName)
If FindChildWindowEx <> 0 Then Exit For
End If
Next
End Function
Viele Gr��e