在按钮下运行子程序 -

时间:2015-04-02 13:24:06

标签: vba excel-vba button procedure worksheet-function

如果我将它作为BeforeRightClick运行,我有这个子/宏。但是,我想改变它,所以我实际上可以使用我的右键单击并将宏放在按钮上
所以我试图从BeforeRightClick更改名称 我已尝试使用普通表单按钮和ActiveX 所有这些+更多代码发布在Sheet1下而不是模块

Dim tabA As Variant, tabM As Variant
Dim adrA As String, adrM As String

' Set columns (MDS tabel) where data should be copied to (APFtabel)
                'Post to
                'P1-6 divisions     ' Name adress, etc
Const APFtabel = "P1;P2;P3;P4;P5;P6;E9;E10;E13;E14;E23;N9;N10;N11;N12;N20"
                'Load data from
Const MDStabel = "N;O;P;Q;R;S;H;Y;Z;AB;W;AF;T;D;AA;V;"
Dim APF As Workbook
' APFilNavn is the name of the AP form
Const APFilNavn = "APForm_macro_pdf - test.xlsm"
' Const APFsti As String = ActiveWorkbook.Path
Const APFarkNavn = "Disposition of new supplier"
' APsti is the path of the folder
Dim sysXls As Object, APFSti As String

Dim ræk As Integer

Private Sub CommandButton1_Click()
APFormRun
End Sub

' Here I changed it from BeforeRightClick
Private Sub APFormRun(ByVal Target As Range, Cancel As Boolean)
Dim cc As Object
If Target.Column = 8 Then
APFSti = ActiveWorkbook.Path & "\"
    If Target.Address <> "" Then
        For Each cc In Selection.Rows
            Cancel = True
            ræk = cc.Row
            Set sysXls = ActiveWorkbook
            åbnAPF
            overførData
            opretFiler

            APF.Save
            APF.Close
            Set APF = Nothing

            Set sysXls = Nothing
        Next cc
    End If
End If
End Sub

Private Sub overførData()
Dim ix As Integer
    tabA = Split(APFtabel, ";")
    tabM = Split(MDStabel, ";")

    Application.ScreenUpdating = False

    For ix = 0 To UBound(tabM) - 1
        If Trim(tabM(ix)) <> "" Then
            adrM = tabM(ix) & ræk

            If tabA(ix) <> "" Then
                adrA = tabA(ix)
            End If

            With APF.ActiveSheet
                .Range(adrA).Value = sysXls.Sheets(1).Range(adrM).Value
            End With
        End If
    Next ix
End Sub

Private Sub opretFiler()
' Here I run some other macro exporting the files to Excel and PDF
    btnExcel
    btnExportPDF
End Sub

1 个答案:

答案 0 :(得分:0)

如果您将此代码放在Sheet1中,然后从按钮访问它,您需要将其名称(在按钮中)定义为Sheet1.APFormRun(我认为您需要将其设置为公共)。

如果您移动sub及其调用的所有内容(在执行Insert-&gt; Module之后),则不需要Excel Object Name前缀。

关于范围界定的详细说明见下面的链接。向下滚动到相应模块中的&#34;放置宏/子程序&#34;部分:http://www.globaliconnect.com/excel/index.php?option=com_content&view=article&id=162:excel-vba-calling-sub-procedures-a-functions-placement-in-modules&catid=79&Itemid=475

在上面的代码中,我不得不注释掉你所包含的所有子代码,只是为了让它编译以进行调试。

  1. 要使“宏”按钮可以访问“子”,或者“#34;分配宏...&#34;你必须公开
  2. 另外,为了使子可访问,它不能有任何传递的参数。
  3. 因此,您必须从Public Sub APFormRun()定义
  4. 中删除传递的参数
  5. 因此,您必须重新编写APFormRun的初始部分...目前您的APFormRun依赖于获取您右键单击的所选单元格的传递参数(目标)。按下按钮时,没有右键单击的单元格。它不是识别细胞的Excel事件。您必须通过Selection excel对象获取所选单元格。关于如何做到这一点,有很多StackOverflow答案。