将宏分配给 excel 上的按钮时出错

问题描述 投票:0回答:1

我正在尝试使用通过按钮调用的宏。我遵循这个答案,有人想做同样的事情:https://stackoverflow.com/a/52882368/20824840

但是我在运行它时遇到错误(法语: 在此输入图片描述 它将翻译为: “无法运行宏 'compilateur.xlsm!'Browse 6, 3''。该宏可能在此工作簿中不可用,或者所有宏都已停用/禁用”

我所做的如下: 右键单击图片-->分配宏-->手动写入宏的名称并添加参数: 在此输入图片描述

这是代码:

Public Sub Browse(ByVal row As Integer, ByVal column As Integer) ' Procédure parcourir
    
        ' Décalartion des workbooks et worksheets
    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim ws As Worksheet: Set ws = wb.Worksheets(1)
        ' Déclaration de la variable contenant l'objet FileDialog (nécessaire pour ouvrir un fenêtre)
    Dim DialogBox As FileDialog
    Set DialogBox = Application.FileDialog(msoFileDialogOpen)
    Dim InputFileName As String: InputFileName = "erreur"
    
        ' Ajout des paramètres de séléction
    DialogBox.AllowMultiSelect = False
    DialogBox.Title = "Séléctionnez un fichier"
    DialogBox.InitialFileName = Application.ThisWorkbook.path
    DialogBox.Filters.Clear
        
        ' Ajout de filtres d'extension en fonction du type de fichier
    Dim vp As Boolean: vp = False
    Select Case row
        Case 6 To 8, 13 To 15, 20 To 22, 27 To 29
            DialogBox.Filters.Add "Composant", "*.xlsx; *.xlsm; *.xml", 1
        Case 9, 16, 23, 30
            DialogBox.Filters.Add "Fichier", "*.xlsx; *.xlsm", 1: vp = True
        Case Else
            MsgBox "Erreur"
            GoTo Endsub
    End Select
    
        ' Ouverture de la fenêtre et écriture du chemin
    If DialogBox.Show = -1 Then
        InputFileName = DialogBox.SelectedItems(1)
        ws.Cells(row, column).Value = InputFileName
    End If

    If vp Then
        SplittedInputFileName = Split(InputFileName, "\")
        Dim ExactNamefile As String: ExactNamefile = Split(SplittedInputFileName(UBound(SplittedInputFileName)), ".")(0)
        ws.Cells(row + 1, column).Value = ExactNamefile & ".xml"
    End If
Endsub:
End Sub

基本上,它是一个打开一个窗口的代码,我可以从中选择一个文件,并在单元格中输入完整路径以及应在按钮中输入的参数行和列: 在此输入图片描述

我尝试用另一种方法运行代码,使用以下代码:

Private Sub TestBrowse()
    Browse 9, 3
End Sub

并且运行得非常好

我还尝试手动分配 TestBrowse 方法(这是私有的),如下所示:在此处输入图像描述 而且效果也很好。

还有一件事是我使用两个独立的模块,彼此不交互。

excel vba
1个回答
0
投票

现在我明白你的问题了:你的宏名称与你的模块名称相同。 如果你真的想这样做,那么你必须这样调用你的宏:

compilateur.xlsm!'Browse.Browse 6, 3'

替代方法是使用不同的名称。

出现此行为的原因是 Excel 将模块排列在宏之上。 因此,如果有一个名为“浏览”的模块,并且您不采取任何措施来限定它,那么 Excel 会假定您正在引用该模块。 调用 Browse.Browse 表示,在名为 Browse 的模块中调用名为 Browse 的宏。

只要不会混淆,模块名称可以省略。

© www.soinside.com 2019 - 2024. All rights reserved.