命令button中的VBA代码在button单击时不起作用

我不知道VBA,而且我只是这样做,所以原谅我。 我通常只是做T-SQL。

我在帮助文章中find了以下代码,从Excel工作表中获取数据并将其输出到将用于通过Scribe运行的txt文件中。 至今;

  1. 我已经在工作表上放置了“命令”button
  2. 我右键单击查看代码
  3. 我把文章中的代码粘贴到VBA编辑器中,并根据我的需要修改了部分代码(基本上是文件path)

当我从编辑器运行代码时,它performance完美。

当我closures编辑器并单击它运行的工作表上的button,但生成的文本文件只是文本文件中相应数量的空string。 就像它可以看到有数据的行数而不是单元格中的实际数据。

我错过了什么明显的东西? 在帮助文章中我看不到任何更多内容(这不是真正写给完全新手的,我不得不说),可以解决问题!

Sub CommandButton1_Click() Dim FilePath As String Dim rng As Range Dim CellData As String Dim LastCol As Long Dim LastRow As Long LastCol = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column LastRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row Set rng = Worksheets("Discount Template").Range("B3") FilePath = "\\SERVER2012\IT Dept\AccessSupplyChain\Product Discount Uploads\" & rng.Value & "_" & Format(Now(), "yyyymmdd hhmmss") & ".txt" Open FilePath For Output As #2 For i = 1 To LastRow For j = 1 To LastCol If j = LastCol Then CellData = CellData + Trim(ActiveCell(i, j).Value) Else CellData = CellData + Trim(ActiveCell(i, j).Value) + "," End If Next j Print #2, CellData CellData = "" Next i Close #2 MsgBox ("Done") End Sub 

问题是ActiveCell的使用,它不一定是A1单元格!

所以你想改变ActiveCell(i, j)Cells(i, j)

但我也build议你下面的代码重构:

 Option Explicit Private Sub CommandButton1_Click() Dim FilePath As String Dim rng As Range Dim iRow As Long Set rng = Worksheets("Discount Template").Range("B3") FilePath = "\\SERVER2012\IT Dept\AccessSupplyChain\Product Discount Uploads\" & rng.Value & "_" & Format(Now(), "yyyymmdd hhmmss") & ".txt" Open FilePath For Output As #2 With UsedRange '<--| reference active sheet used range For iRow = 1 To .Rows.Count '<--| loop through its rows Print #2, Join(Application.Transpose(Application.Transpose(.Rows(iRow))), ",") '<--| print the whole current row in one shot Next End With Close #2 MsgBox ("Done") End Sub 

为了获得你使用ActiveCell(i, j).Value的单元格的ActiveCell(i, j).Value但是在你的代码中,我找不到更新ActiveCell

所以你一遍又一遍地使用同一个单元格。

相反,你应该写: Worksheets("youeSheetName").Cell(i, j).Value

你也应该改变你使用的ActiveSheet来让你的LastRowLastCol Worksheets("youeSheetName")

希望我能帮上忙。