单击按钮

时间:2017-04-06 10:07:46

标签: excel vba excel-vba

我不知道VBA,我只是出于必要而这样做,请原谅我。我通常只做T-SQL。

我在帮助文章中找到了以下代码,用于从Excel工作表中获取数据并将其输出到txt文件中,该文件将用于运行Scribe。到目前为止;

  1. 我已将“命令”按钮放在工作表上
  2. 我已右键点击查看代码
  3. 我将文章中的代码粘贴到VBA编辑器中,并根据我的需要调整部分内容(基本上是文件路径)
  4. 当我从编辑器运行代码时,它表现完美。

    当我关闭编辑器并单击它运行的工作表上的按钮时,结果文本文件只是文本文件中适当数量的空字符串。它就像它可以看到有数据的行数而不是单元格中的实际数据。

    我错过了一些明显的东西吗?我无法在帮助文章中找到更多内容(这不是为了我完成的新手而写的),这样可以解决问题!

    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
    

2 个答案:

答案 0 :(得分:1)

要获取您正在使用的单元格的值ActiveCell(i, j).Value,但在您的代码中,我找不到您更新ActiveCell

所以你一遍又一遍地使用同一个细胞。

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

您还应该更改用于ActiveSheetLastRowLastCol的{​​{1}}

希望我能提供帮助。

答案 1 :(得分:1)

问题是ActiveCell使用有义务成为A1单元格!

因此,您希望使用ActiveCell(i, j)

更改Cells(i, j)

但我也建议您重构以下代码:

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