Vba Excel从按钮运行宏问题

Vba Excel从按钮运行宏问题,vba,excel,button,Vba,Excel,Button,我制作了一个宏来处理一个目录中的多个文件,并生成CSV文件以将其作为数据库 当我从“宏”菜单或“单步执行”运行宏时,我没有问题。它遍历所有文件和(文件中的)所有行 但当我将宏指定给按钮时,它会遍历所有文件,但在某些行中失败,并且在CSV中的结果是不同的 工作 不起作用 好:D 错误的CSV D: 行数减少,格式错误 我不认为它应该成为宏的一部分,它在没有按钮的情况下可以完美工作,但我需要它 我试过了 Application.ScreenUpdating = False 及 对不起我的英语

我制作了一个宏来处理一个目录中的多个文件,并生成CSV文件以将其作为数据库

当我从“宏”菜单或“单步执行”运行宏时,我没有问题。它遍历所有文件和(文件中的)所有行

但当我将宏指定给按钮时,它会遍历所有文件,但在某些行中失败,并且在CSV中的结果是不同的

工作

不起作用

好:D

错误的CSV D:

行数减少,格式错误

我不认为它应该成为宏的一部分,它在没有按钮的情况下可以完美工作,但我需要它

我试过了

 Application.ScreenUpdating = False

对不起我的英语

编辑 我将按钮设置为另一个宏,以运行另一个宏,但结果相同。 开始工作表,没关系。(测试) 守则: (无需编辑)

Public子程序artodo()
Application.ScreenUpdating=False
Dim文件名,路径名为字符串
将wb设置为工作簿
路径名=ActiveWorkbook.path&“\Inscripciones\”
Exportpath=ActiveWorkbook.path&“\CSV\”
exportpath=ActiveWorkbook.path&“\CSV\u E”
Filename=Dir(路径名和“*.xls”)
答案=MsgBox(“Eliminar archivos de地毯CSV?”,vbYesNo+Vbiar问题,“VACIAR CSV”)
如果答案=是,则
出错时继续下一步
终止Exportpath&“*.csv”
终止ExportpathE&“*.csv”
错误转到0
如果结束
a=0
行数=0
rowsE=0
Dim数据(1到1)作为字符串
Dim Hojas(1到2)作为字符串
数据(1)=“Z”
Hojas(1)=“A”
Hojas(2)=“B”
etapa=3
文件名“”时执行此操作
设置wb=Workbooks.Open(路径名和文件名)
“我不存在地图集。”
Dim mySheetName作为字符串,mySheetName作为字符串
mySheetName=“Procesar”
出错时继续下一步
mySheetNameTest=工作表(mySheetName).name
如果Err.Number=0,则
工作表(mySheetName).Cells.Clear
其他的
呃,明白了
Worksheets.Add.name=mySheetName
如果结束
'此函数从文件名获取数据。
获取数据
n=1
对于Hojas中的每个Hoja
工作表(Hoja)。选择
对于i=单元格(9,7)。将值转换为单元格(9,9)。将值转换为步骤2
对于j=单元格(10,3)。值到单元格(10,5)。值
如果单元格(j,i).Value=“T”或单元格(j,i).Value=“T”或单元格(j,i).Value=“R”或单元格(j,i).Value=“R”,则
表(“Procesar”)。单元格(n,1)。值=表(Hoja)。单元格(j,2)。值
表(“程序”)。单元格(n,2)。值=相等
表(“Procesar”).单元格(n,3).值=表(Hoja).单元格(11,i).值
工作表(Hoja).单元格(j,i+1).复制
工作表(“过程”).单元格(n,4).粘贴特殊粘贴:=XLPasteValues和NumberFormats,操作:=_
xlNone,SkipBlanks:=False,转置:=False
表(“Procesar”).单元格(n,5).值=表(Hoja).单元格(j,i).值
表(“Procesar”)。单元格(n,6)。值=表(Hoja)。单元格(12,i)。值
n=n+1
如果结束
下一个j
接下来我
下一个Hoja
n=n-1
工作表(“程序”)。选择
范围(“H1”)。选择
设x=1

当x时,只有一种方法不起作用。这是你方法的错误位置

需要知道的一件事是您正在使用Active X control。因此,该按钮的单击方法必须在工作表的模块中具有。我的意思是,您将按钮放在Sheet1中,还需要将该按钮的事件方法放在Sheet1的模块中

方法名称也必须是私有子按钮name\u Click()。在这种情况下,按钮名称不应该是按钮标签(例如,在您的“procesarto”中)。它应该像“CommandButton1”。也可以在VBA编辑器的“属性”标记中更改该名称。如果更改名称,方法名称应为
Private Sub-ProcesarTodo\u Click()

所以,再次检查您的代码和模块。你们在你们的证据中隐藏了模块的名称,所以,我可以暗示你们。如果你表现清楚,我可以说得很准确

如果您不知道该怎么做,只需执行以下步骤:

  • 右击按钮
  • 从列表中选择“查看代码”
  • 因此,您可以看到按钮的正确方法,将所有方法体从旧方法体复制并粘贴到新方法体
  • 然后,测试一下。它将完美地工作

  • 听起来你的代码好像有问题,但是除非你发布,否则我们无法对问题的可能原因提出任何建议…显然我已经这么想了,但是如果不是通过按钮运行,为什么还要工作呢。按钮是否只运行宏?代码非常广泛,这就是我不发布的原因。由于我们看不到代码,您可以尝试:)制作另一个宏来调用第一个宏。然后设置按钮以运行该宏。我知道它似乎不应该做任何事情,但是VBA可能会有一些奇怪的事情发生。可能很简单,就像你的代码在启动时依赖某个工作表处于活动状态:如果按钮位于不同的工作表上,那么该工作表将始终是活动工作表。使用包含工作簿的工作表,以及包含工作簿的所有工作表引用。如果您这样做,您会发现您的代码运行更可靠。现在,在代码中的任何特定点上发生的事情都将取决于哪个工作簿处于活动状态,而预测或依赖它并不总是容易的
    NAME , GROUP1, 25,13
    NAME1, GROUP1, 25,17
    , GROUP2, 27,14
    , GROUP2, 23,12
    
     Application.ScreenUpdating = False
    
     Application.ScreenUpdating = True
    
    Public Sub ProcesarTodo()
    
        Application.ScreenUpdating = False
        Dim Filename, Pathname As String
        Dim wb As Workbook
    
        Pathname = ActiveWorkbook.path & "\Inscripciones\"
        Exportpath = ActiveWorkbook.path & "\CSV\"
        ExportpathE = ActiveWorkbook.path & "\CSV_E\"
        Filename = Dir(Pathname & "*.xls")
    
        answer = MsgBox("Eliminar archivos de carpeta CSV?", vbYesNo + vbQuestion, "VACIAR CSV")
        If answer = vbYes Then
            On Error Resume Next
            Kill Exportpath & "*.csv"
            Kill ExportpathE & "*.csv"
            On Error GoTo 0
        End If
    
        a = 0
        rows = 0
        rowsE = 0
        Dim Data(1 To 1) As String
        Dim Hojas(1 To 2) As String
        Data(1) = "Z"
        Hojas(1) = "A"
        Hojas(2) = "B"
        etapa = 3
    
        Do While Filename <> ""
            Set wb = Workbooks.Open(Pathname & Filename)
            '   CREAR SI NO EXISTE HOJA PARA ATLETAS
            Dim mySheetName As String, mySheetNameTest As String
            mySheetName = "Procesar"
            On Error Resume Next
            mySheetNameTest = Worksheets(mySheetName).name
            If Err.Number = 0 Then
                Worksheets(mySheetName).Cells.Clear
            Else
                Err.Clear
                Worksheets.Add.name = mySheetName
            End If
            '   This function get data from the file's name.
            get_data
            n = 1
            For Each Hoja In Hojas
                Sheets(Hoja).Select
                For i = Cells(9, 7).Value To Cells(9, 9).Value Step 2
                    For j = Cells(10, 3).Value To Cells(10, 5).Value
                        If Cells(j, i).Value = "T" Or Cells(j, i).Value = "t" Or Cells(j, i).Value = "R" Or Cells(j, i).Value = "r" Then
                            Sheets("Procesar").Cells(n, 1).Value = Sheets(Hoja).Cells(j, 2).Value
                            Sheets("Procesar").Cells(n, 2).Value = equipo                               
                            Sheets("Procesar").Cells(n, 3).Value = Sheets(Hoja).Cells(11, i).Value
                            Worksheets(Hoja).Cells(j, i + 1).copy                                       
                            Worksheets("Procesar").Cells(n, 4).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
                xlNone, SkipBlanks:=False, Transpose:=False                                             
                            Sheets("Procesar").Cells(n, 5).Value = Sheets(Hoja).Cells(j, i).Value
                            Sheets("Procesar").Cells(n, 6).Value = Sheets(Hoja).Cells(12, i).Value
                            n = n + 1
                        End If
                    Next j
                Next i
            Next Hoja
            n = n - 1
    
            Sheets("Procesar").Select
            Range("H1").Select
            Let x = 1
            Do While x <= n
            ActiveCell.FormulaR1C1 = "=PROPER(RC[-7])"
            Selection.Offset(1, 0).Select
            x = x + 1
            Loop
            Range("H1:H" & n).Select
            Selection.copy
            Range("A1").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
            Range("H1:H" & n).Select
            Selection.ClearContents
            '   Exportar Atletas
            Call Exportar(Exportpath, wb.name, n)
    
            wb.Close SaveChanges:=False
            Filename = Dir()
            a = a + 1
        Loop ' Next file
        Application.ScreenUpdating = True
        bat
        mensaje = MsgBox("Se procesaron " & a & " archivos" & vbNewLine & "El cual son " & rows & " atletas" & vbNewLine & "Y " & rowsE & " Entrenadores." & vbNewLine & "Programa realizado por Tomas Prado", , "Listo")
    
    End Sub
    
    Function Exportar(path, name, n)
        equipo = Replace(name, ".xlsx", "")
        equipo2 = Replace(equipo, ".xls", "")
        Let Rango = "A1:" & "F" & n
        ActiveSheet.Range(Rango).Select
        Selection.copy
        Worksheets.Add.name = "Exportar"
        Range("A1").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        ' Formato antiguo xlCSV
        ActiveWorkbook.SaveAs Filename:= _
            path & equipo2 & ".csv", FileFormat:=xlCSV, _
            CreateBackup:=False
        rows = rows + n
    End Function