嘿fellas,我有以下VBA代码。
它从Excel工作表中获取值并将其保存在制表符分隔的文本文件中。但是,它会添加列标题。我如何得到行的值,例如从第2行开始,单元格A1,如果列在第1行,单元格A1?感谢。
Sub DoTheExport()
Dim FileName As Variant
Dim Sep As String
FileName = Application.GetSaveAsFilename( _
InitialFileName:=vbNullString, _
FileFilter:="Text Files (*.txt),*.txt" _
)
If FileName = False Then
''# user cancelled, get out
Exit Sub
End If
Sep = vbTab
Debug.Print "FileName: " & FileName, "Separator: " & Sep
ExportToTextFile FName:=CStr(FileName), Sep:=CStr(Sep), _
SelectionOnly:=False, AppendData:=False
End Sub
Public Sub ExportToTextFile(FName As String, _
Sep As String, SelectionOnly As Boolean, _
AppendData As Boolean)
Dim WholeLine As String
Dim FNum As Integer
Dim RowNdx As Long
Dim ColNdx As Integer
Dim StartRow As Long
Dim EndRow As Long
Dim StartCol As Integer
Dim EndCol As Integer
Dim CellValue As String
Application.ScreenUpdating = False
On Error GoTo EndMacro:
FNum = FreeFile
If SelectionOnly = True Then
With Selection
StartRow = ActiveSheet.Range("A3").Select
StartCol = .Cells(1).Column
EndRow = .Cells(.Cells.Count).Row
EndCol = .Cells(.Cells.Count).Column
End With
Else
With ActiveSheet.UsedRange
StartRow = .Cells(3).Row
StartCol = .Cells(1).Column
EndRow = .Cells(.Cells.Count).Row
EndCol = .Cells(.Cells.Count).Column
End With
End If
If AppendData = True Then
Open FName For Append Access Write As #FNum
Else
Open FName For Output Access Write As #FNum
End If
For RowNdx = StartRow To EndRow
WholeLine = ""
For ColNdx = StartCol To EndCol
If Cells(RowNdx, ColNdx).Value = "" Then
CellValue = Chr(34) & Chr(34)
Else
CellValue = Cells(RowNdx, ColNdx).Value
End If
WholeLine = WholeLine & CellValue & Sep
Next ColNdx
WholeLine = Left(WholeLine, Len(WholeLine) - Len(Sep))
Print #FNum, WholeLine
Next RowNdx
EndMacro:
On Error GoTo 0
Application.ScreenUpdating = True
Close #FNum
End Sub
答案 0 :(得分:2)
为什么不仅仅是改变问题:
For RowNdx = StartRow To EndRow
为:
For RowNdx = StartRow+1 To EndRow
这将开始写入从范围中的第二个开始的行。如果要自动检测起始行是否有列标题,则需要检查范围中的第一个单元格(可能使用.Value
)并找出如何区分列标题和列标题之间的区别值。
答案 1 :(得分:0)
新用户可能会错误地解释代码开始行和开始列。
StartRow = .Cells(3).Row
StartCol = .Cells(1).Column
.Cells语法是Cells(索引)或Cells(行,列)
例如。如果范围是工作表,则细胞(1,2)指的是B1。 但是,.Cells(3)指的是使用范围内的第三个小区。如果数据在范围内 4乘4,例如A1到D4,。细胞(5)将参考A2。
如果您想从第二行开始,为什么不使用
startrow = .Cells(2, 1)
清楚地表明要导出的起始数据位于第2行第1列。