我不知道VBA,我只是出于必要而这样做,请原谅我。我通常只做T-SQL。
我在帮助文章中找到了以下代码,用于从Excel工作表中获取数据并将其输出到txt文件中,该文件将用于运行Scribe。到目前为止;
当我从编辑器运行代码时,它表现完美。
当我关闭编辑器并单击它运行的工作表上的按钮时,结果文本文件只是文本文件中适当数量的空字符串。它就像它可以看到有数据的行数而不是单元格中的实际数据。
我错过了一些明显的东西吗?我无法在帮助文章中找到更多内容(这不是为了我完成的新手而写的),这样可以解决问题!
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
答案 0 :(得分:1)
要获取您正在使用的单元格的值ActiveCell(i, j).Value
,但在您的代码中,我找不到您更新ActiveCell
。
所以你一遍又一遍地使用同一个细胞。
相反,你应该写:Worksheets("youeSheetName").Cell(i, j).Value
您还应该更改用于ActiveSheet
和LastRow
到LastCol
的{{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