"Ved å klikke" Command Button fra annen arbeidsbok

stemmer
1

Jeg prøver å skrive en makro som ville klikk en kommandoknapp som er i en annen arbeidsbok .. Ville det være mulig? Uten å endre noen av koden i den andre arbeidsboken?
Takk så mye!

Publisert på 24/09/2008 klokken 19:45
kilden bruker
På andre språk...                            


7 svar

stemmer
1

Du kan bruke Application.Runfor at:

Run "OtherWorkbook.xls!MyOtherMacro"
Svarte 24/09/2008 kl. 20:31
kilden bruker

stemmer
0

Du sikker på at du mener arbeidsbok og ikke arket? Anyways hvis du " ønsker å sløyfe gjennom alle arbeidsbøkene i en mappe og utføre en operasjon på hver av dem "

Hvis du vil ha tilgang til et annet ark det gjøres slik:

Worksheets("MySheet").YourMethod()
Svarte 24/09/2008 kl. 20:31
kilden bruker

stemmer
-1

Det er ikke en ren måte å gjøre dette gjennom koden, siden knappen er klikkhendelsen vil typisk være en privat metode for den andre arbeidsboken.

Men , kan du automatklikk VBA-kode ved å åpne arbeidsboken, finne den kontrollen du ønsker, og deretter aktivere det og sender det et mellomrom (tilsvarer å trykke på knappen).

Dette er nesten helt sikkert en forferdelig idé, og det vil trolig bringe deg og din ætt annet enn elendighet. Jeg vil oppfordre deg til å finne en bedre løsning, men i mellomtiden, synes dette å jobbe ...

Public Sub RunButton(workbookName As String, worksheetName As String, controlName As String)
    Dim wkb As Workbook
    Dim wks As Worksheet
    Set wkb = Workbooks.Open(workbookName)
    wkb.Activate
    Dim obj As OLEObject
    For Each wks In wkb.Worksheets
        If wks.Name = worksheetName Then
            wks.Activate
            For Each obj In wks.OLEObjects
                If (obj.Name = controlName) Then
                    obj.Activate
                    SendKeys (" ")
                End If
            Next obj
        End If
    Next wks
End Sub
Svarte 24/09/2008 kl. 20:53
kilden bruker

stemmer
1

I stedet for å prøve å auto Klikk på knappen er det mulig å kjøre makroen knyttet til knappen direkte fra koden.

Først må du finne navnet på makro som kjøres når knappen klikkes.

For å gjøre dette, åpner arbeidsboken som inneholder kommandoknappen.

Høyreklikk på kommandoknappen og velg 'Tilordne makro'

The 'Tilordne makro' dialogboksen vises.

Noter deg den fulle navn i 'Makronavn' boksen øverst i dialogboksen.

Klikk på OK -knappen.

Koden i arbeidsboken som må ringe koden skal være som følger.

Sub Run_Macro()

    Workbooks.Open Filename:="C:\Book1.xls"
'Open the workbook containing the command button
'Change  the path and filename as required

    Application.Run "Book1.xls!Macro1"
'Run the macro 
'Change the filename and macro name as required

'If the macro is attached to a worksheet rather than a module, the code would be
'Application.Run "Book1.xls!Sheet1.Macro1"

End Sub
Svarte 24/09/2008 kl. 21:55
kilden bruker

stemmer
0

NEI:

Dette er lett å gjøre:

  1. I regnearket ABC der du har Private Sub xyz_Click (), legge til en ny offentlig subrutine:

    Public Sub ForceClickOnBouttonXYZ() Call xyz_Click End Sub

  2. I den andre regneark eller modul, legg til koden:

    Sheets("ABC").Activate
    Call Sheets("ABC").ForceClickOnBouttonXYZ
    

DET ER DET!!! Hvis du ikke vil at skjermen flimrer eller vise noen aktivitet, setter Application.ScreenUpdating = False før du kaller Sheets ( "ABC"). ForceClickOnBouttonXYZ rutine og deretter sette Application.ScreenUpdating = True rett etter det.

Svarte 14/04/2010 kl. 17:29
kilden bruker

stemmer
0

Jeg hadde et lignende problem som ovenfor, og det tok en stund å finne ut, men dette er alt jeg måtte gjøre.

På Sheet1 jeg opprettet en knapp med følgende:

    Private Sub cmdRefreshAll_Click()
         Dim SheetName As String

         SheetName = "Mon"
         Worksheets(SheetName).Activate
         ActiveSheet.cmdRefresh_Click

         SheetName = "Tue"
         Worksheets(SheetName).Activate
         ActiveSheet.cmdRefresh_Click

'    "I repeated the above code to loop through a worksheet for every day of the week"

    End Sub

Deretter import litt for å få det til å fungere må du gå til koden på andre regneark og endre det fra privat til offentlig.

Så langt ingen bugs har dukket opp.

Svarte 01/10/2015 kl. 15:53
kilden bruker

stemmer
4

For en ActiveX-knappen i en annen arbeidsbok:

Workbooks("OtherBook").Worksheets("Sheet1").CommandButton1.Value = True

For en MSForms knapp i en annen arbeidsbok:

Application.Run Workbooks("OtherBook").Worksheets("Sheet1").Shapes("Button 1").OnAction
Svarte 26/10/2015 kl. 18:47
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more