命令按钮中的VBA代码不存在';不要点击按钮

命令按钮中的VBA代码不存在';不要点击按钮,vba,excel,Vba,Excel,我不知道VBA,我这么做只是出于必要,所以请原谅我。我通常只做T-SQL 我在一篇帮助文章中找到了以下代码,用于从Excel工作表中获取数据并将其输出到txt文件中,该文件将用于运行Scribe。到目前为止 我已将命令按钮放在工作表上 我已右键单击以查看代码 我将文章中的代码粘贴到VBA编辑器中,并根据自己的需要修改了部分代码(基本上是文件路径) 当我从编辑器中运行代码时,它的性能非常好 当我关闭编辑器并单击工作表上的按钮时,它会运行,但生成的文本文件只是文本文件中适当数量的空字符串。就像它可以

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

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

  • 我已将命令按钮放在工作表上
  • 我已右键单击以查看代码
  • 我将文章中的代码粘贴到VBA编辑器中,并根据自己的需要修改了部分代码(基本上是文件路径)
  • 当我从编辑器中运行代码时,它的性能非常好

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

    我错过了什么明显的东西吗?我在帮助文章中看不到更多能解决这个问题的东西(我不得不说,这篇文章不是为完全的新手写的)

    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(i,j).value
    ,但在您的代码中,我找不到您正在更新
    ActiveCell

    因此,您反复使用同一个单元格

    相反,你应该写:
    工作表(“youeSheetName”).Cell(i,j).Value

    此外,您还应将用于获取
    LastRow
    LastCol
    ActiveSheet
    更改为
    工作表(“youeSheetName”)


    希望我能提供帮助。

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

    因此,您反复使用同一个单元格

    相反,你应该写:
    工作表(“youeSheetName”).Cell(i,j).Value

    此外,您还应将用于获取
    LastRow
    LastCol
    ActiveSheet
    更改为
    工作表(“youeSheetName”)


    希望我能帮上忙。

    问题是如何使用
    ActiveCell
    ,它不必是A1 cell

    因此,您希望使用
    单元格(i,j)
    更改
    ActiveCell(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
    
    选项显式
    私有子命令按钮1_单击()
    将文件路径设置为字符串
    变暗rng As范围
    暗淡无光
    设置rng=工作表(“折扣模板”)。范围(“B3”)
    FilePath=“\\SERVER2012\IT Dept\AccessSupplyChain\Product Discount Uploads\”&rng.Value&“\uux”和Format(Now(),“yyyyymmdd hhmmss”)和“.txt”
    打开输出为#2的文件路径
    
    使用UsedRange'时,问题是如何使用
    ActiveCell
    ,它不必是A1单元

    因此,您希望使用
    单元格(i,j)
    更改
    ActiveCell(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
    
    选项显式
    私有子命令按钮1_单击()
    将文件路径设置为字符串
    变暗rng As范围
    暗淡无光
    设置rng=工作表(“折扣模板”)。范围(“B3”)
    FilePath=“\\SERVER2012\IT Dept\AccessSupplyChain\Product Discount Uploads\”&rng.Value&“\uux”和Format(Now(),“yyyyymmdd hhmmss”)和“.txt”
    打开输出为#2的文件路径
    
    “使用UsedRange”时,您的按钮是否与数据位于同一页上?您的代码使用
    ActiveSheet
    查找
    LastCol
    等,但随后引用
    “折扣模板”
    。如果按钮与数据不在同一张工作表上,它将无法使用此方法查看数据。在
    子命令button1\u Click()
    中放置断点,查看是否调用了该按钮。代码
    设置rng=工作表(“折扣模板”)。范围(“B3”)
    据我所知,该变量仅用于从第一张被称为“折扣模板”的表单中获取客户参考号。该变量随后不会用于脚本的任何其他部分,因为这是我从另一个解决方案中获取的。rng变量不是我提到的帮助文章的一部分。我已经注释了这行代码,并从文件路径中删除了它的用途,但这并没有改变任何东西。我在脚本的
    子命令按钮1\u Click()
    点上切换了断点,这是最开始的?当我点击按钮时,它会跳入编辑器,顶部的代码行会突出显示。根据向下投票的定义,如果这样做的用户能够解释自己,我将不胜感激。如果我根本不使用VBA,也不能正确理解它,但通过解释我的步骤和显示所有代码来寻求帮助,那么您还需要什么?如果你不能理解我的要求,我认为你不理解某人不理解他们正在使用的代码的概念。你的按钮和数据在同一张表上吗?您的代码使用
    ActiveSheet
    查找
    LastCol
    等,但随后引用
    “折扣模板”
    。如果按钮与数据不在同一张工作表上,它将无法使用此方法查看数据。在
    子命令button1\u Click()
    中放置断点,查看是否调用了该按钮。代码
    设置rng=工作表(“折扣模板”)。范围(“B3”)
    据我所知,该变量仅用于从第一张被称为“折扣模板”的表单中获取客户参考号。该变量随后不会用于脚本的任何其他部分,因为这是我从另一个解决方案中获取的。rng变量不是我提到的帮助文章的一部分。我已经注释了这行代码,并从文件路径中删除了它的用途,但这并没有改变任何东西。我在脚本的
    子命令按钮1\u Click()
    点上切换了断点,这是最开始的?当我点击按钮时,它会跳入编辑器,顶部的代码行会高亮显示