Excel从button问题运行macros

我做了一个macros来处理一个目录中的多个文件,并生成CSV文件,把它们作为一个数据库。

当我从macros菜单或“步入”运行macros我没有问题。 它通过所有的文件和所有的行(在文件中)。

但是,当我把macros指定给一个button时,它会遍历所有的文件,但是在某些行中失败而且CSV的结果是不同的。

作品

在这里输入图像说明

不起作用

在这里输入图像说明

好的CSV:D

NAME , GROUP1, 25,13 NAME1, GROUP1, 25,17 NAME2, GROUP2, 27,14 NAME3, GROUP2, 28,16 NAME2, GROUP2, 23,12 

错误CSV D:

 NAME , GROUP1, 25,13 NAME1, GROUP1, 25,17 , GROUP2, 27,14 , GROUP2, 23,12 

更less的行和错误的格式

我不认为它应该是macros的一部分,它没有button,它完美的作品,但我需要它。

我testing过

  Application.ScreenUpdating = False 

  Application.ScreenUpdating = True 

PD:对不起我的英文。

编辑我设置button到另一个macros,运行其他,但结果是一样的。 开始表,这没关系。 (testing)代码:(无编辑)

 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 

只有一种办法是行不通的。 这是你的方法错误的地方

有一点要知道的是,你使用的是Active X控件 。 所以,该button的单击方法必须在工作表的模块内部 。 我的意思是,您将button放在Sheet1中 ,您还需要将该button的事件方法放在Sheet1的模块中

而且方法名称必须是Private Sub buttonName_Click() 。 在那, buttonName不应该是button标签 (例如在你的“ProcesarTodo”)。 它应该像“CommandButton1”。 您也可以在VBA编辑器的“属性”标签中更改该名称。 如果更改名称,则方法名称应为Private Sub ProcesarTodo_Click()

所以,再次检查你的代码和模块。 你在证据中隐藏了模块的名字,所以我可以通过提示来说明。 如果你清楚地表明,我可以确切地说。

如果你不知道,该怎么做,只要按照以下步骤操作:

  1. 右键点击你的button。
  2. 从列表中select“查看代码”。
  3. 所以,你可以看到你的button的正确的方法,复制和粘贴从旧的所有方法体到新的。
  4. 然后,testing一下。 它会完美的工作。