Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1084to1088
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Script dynamisch mittels Add-In erstellen

Script dynamisch mittels Add-In erstellen
vetsch
Hallo zusammen
Ich programmiere seit einiger Zeit an einem Makro, dass aus externen Datenquellen schlussendlich ein übersichtliches Excel Workbook anzeigt. Das ganze habe ich als Add-In gespeichert, es funktioniert auch schon recht gut.
Jetzt möchte ich aber beim automatisch erstellten Excel Workbook einen "Worksheet_BeforeDoubleClick" Event nutzen, indem ich bei einem Doppelklick auf bestimmte Zellen ein Neues Sheet erstelle mit gewissen Informationen.
Das Problem ist, dass dieser Event nur als Makro direkt am Worksheet funktioniert und nicht als funktion im Add-In.
Nach langer Zeit habe ich dann dieses Objekt gefunden:
ActiveWorkbook.Sheets(1).Scripts
Die Eigenschaft .ScriptText sollte ich definieren können, was im Makrobereich für das Worksheet steht. Dachte ich jedefalls...
Ich glaube es liegt daran, dass überhaupt kein Objekt Script instanziert wurde, leider finde ich aber keine Methode "Add".
Hat jemand Erfahrung in diesem Bereich? Bin ich mit diesem Scripts Object auf der falschen Spur oder habe ich nur etwas übersehen? Wie kann ich diesen Event mit einer Funktion verknüpfen?
Grüsse Mathias

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
mit Klassenprogrammierung
03.07.2009 16:07:33
Tino
Hallo,
Du müsstest etwas Klassenprogrammierung veranstalten.
Hier ein Beispiel:
kommt als Code in DieseArbeitsmappe
Option Explicit 
 
Dim KlExcel As Klasse1 
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
   Set KlExcel = Nothing 
End Sub 
 
Private Sub Workbook_Open() 
    Set KlExcel = New Klasse1 
    Set KlExcel.ExcelWatch = Application 
End Sub 
 
 
 

Klassenmodul Klasse1

Option Explicit 
 
'in das Klassenmodul 
Public WithEvents ExcelWatch As Application 
 
Private Sub ExcelWatch_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 
Dim iAntwort As Integer 
 iAntwort = MsgBox("Sie haben einen Doppelklick in der" & vbLf & _
 "Tabelle: " & Sh.Name & vbLf & _
 "Zelle: " & Target.Address & vbLf & _
 "ausgeführt" & vbLf & vbLf & _
 "Soll diese Zelle bearbeitet werden?", vbYesNo, "Doppelklick- Ereignis") 
 
If iAntwort = vbNo Then Cancel = True 
   
End Sub 


Gruß Tino

Anzeige
Das ist doch gar nicht so schwer,...
04.07.2009 12:59:33
Luc:-?
...Mathias,
du musst doch nur die entsprechenden Routinen im betreffenden Dokumentklassenmodul installieren — und zwar nicht mit ...Add, sondern bspw so...

With ActiveWorkbook.VBProject
For Each cp In .VBComponents
If cp.Type = vbext_ct_Document Then j = j + 1
If j = ws.Index Then
With cp.CodeModule
If IsError(.ProcCountLines("Worksheet_Change", vbext_pk_Proc)) Then _
.CreateEventProc "Change", "Worksheet": ec = False
While .Lines(.ProcStartLine("Worksheet_Change", _
vbext_pk_Proc) + pz, 1)  "End Sub": pz = pz + 1: Wend
If ec Then
If InStr(.Lines(.ProcStartLine("Worksheet_Change", _
vbext_pk_Proc), pz), "MathiasProc") = 0 Then
.InsertLines .ProcStartLine("Worksheet_Change", vbext_pk_Proc) + _
pz, _
"    Rem --- Line inserted by MathiasProc on " & Date & " -- _
-" & _
vbLf & "    Rem --- Locate right following lines & activate  _
by " & _
"removing ""'""! ---" & vbLf & "'    With Target" & vbLf &  _
_
"'        If .HasArray Or (.Cells.Count = 1 And .HasFormula) _
" & _
" Then Run ""ProcXYZ"", Target" & vbLf & "'    End With"
End If
Else: .ReplaceLine .ProcStartLine("Worksheet_Change", vbext_pk_Proc) +  _
pz - 1, _
"    Rem --- Procedure generated by MathiasProc on " & Date & "  _
---" & _
vbLf & "    With Target" & vbLf & "        If .HasArray Or (. _
Cells" & _
".Count = 1 And .HasFormula) Then Run ""ProcXYZ"", Target" & _
vbLf & "    End With" & vbLf & "    Set Target = Nothing"
End If
End With
End If
...


Gruß + schöWE, Luc :-?

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige