2016-07-15 10 views
1

Ich versuche ein Makro zu automatisieren, das eine Excel-Tabelle mit einem anderen einfachen Makro in LaTeX-Quellcode konvertiert. Im Grunde möchte ich das Benutzerformular nicht verwenden, also versuche ich, den Knopfklick der gewünschten Ausgabe aufzurufen, aber ich habe Probleme.Klicken auf eine Schaltfläche in einem Benutzerformular (Aufruf des Klickereignisses)

Es ist das Excel2Latex Makro auf ctan.org

Userform here

Project layout here

Hier ist die Hauptunter, wie Sie alle sehen können meine kommentierte Teile sind die verschiedenen Dinge, die ich habe versucht, nach der Suche nach Hilfe.

Sub latex() 
With NewController 
    Set .View = NewView 
    Set .Model = NewDefaultModel 
    Set .Storage = NewStorage 
    .Run 
    Application.Wait Now + TimeValue("00:00:02") 
    frmConvert.cmdSave.Object.Value = True 

    'UserForm2.CommandButton1.Object.Value = True 


    'frmConvert!cmdSave.SetFocus 

    'SendKeys "{Enter}" 

    'Call frmConvert.cmdCopy_Click 
    'Call frmConvert.cmdSv 
    'Call frmConvert.cmdCopy_Click 
    'Call Memento.SaveConversionResultToFile 
    'Application.Wait Now + TimeValue("00:00:03") 
    'Application.Run "frmConvert.cmdCopy_Click", txtResult 
    'frmConvert.cmdCopy = True 
    'frmConvert.cmdCopy = vbClick 
    'frm 'Application.Run frmConvert.cmdSave 
    'Call frmConvert.cmdCopy_Click 
    'frmConvert.cmdSave = vbClick 

End With 



End Sub 

Der Code hinter der Schaltfläche ich will, ist ein Privater Sub

Private Sub cmdSave_Click() 
    SaveConversionResultToFile mModel 
    Hide 
End Sub 

Wenn ich versuche, die cmdSave_Click Unter nennen Zeitfehler 91 lief Returns, Variablen oder mit Blockvariablen gesetzt nicht widersprechen. Ich habe versucht, das Sub zu Public zu setzen.

Das meiste Glück, das ich bisher hatte, ist die Aktivierung der Kopie in die Zwischenablage Schaltfläche auf dem Benutzerformular, aber es kopiert nur den Standardtext im Benutzerformular, nicht die LaTeX-Tabelle, die im Fenster generiert wird.

Irgendwelche Vorschläge?

Public Sub SaveConversionResultToFile(ByVal pModel As IModel) 
Dim sFileName As String 
sFileName = pModel.AbsoluteFileName 
If sFileName = "" Then Exit Sub 

Open sFileName For Output As 1 
Print #1, pModel.GetConversionResult; 
Close #1 
End Sub 

ich den Fehler auf der sFileName = pModel.AbsoluteFileName Linie in Bezug auf MatthewD Frage.

+0

Anstatt einen Versuch zu machen, das Ereignis aufzurufen, legen Sie die Funktionen des Ereignisses in ein öffentliches "Sub" und rufen es dann auf. – cyboashu

+0

Ich habe das auch versucht, ich werde mit dem genauen Fehler zurück melden – zpb21

+0

Hat es etwas damit zu tun, eine modelose Benutzerform zu sein? – zpb21

Antwort

0

Rufen Sie einfach das Steuerelement Ereignis.

Sub latex() 
    With NewController 
     Set .View = NewView 
     Set .Model = NewDefaultModel 
     Set .Storage = NewStorage 
     .Run 
     Application.Wait Now + TimeValue("00:00:02") 

     cmdCopy_Click 
     cmdSave_Click 

    End With 
End Sub 
+0

Es gibt immer noch eine Laufzeit 91 Fehler, Objektvariable oder mit Blockvariable nicht gesetzt – zpb21

+0

Woher bekommen Sie der Fehler? Eventuell möchten Sie die Ereignisaufrufe außerhalb des with-Blocks verschieben. – MatthewD

+0

Ich bekomme den Fehler in einer anderen Unterroutine, ich habe meinen Beitrag bearbeitet, um ihn einzuschließen. – zpb21

Verwandte Themen