2010-02-26 158 views
1

嘿伙计们,我有以下的VBA代码。VBA宏问题

它从Excel工作表中获取值并将其保存在制表符分隔的文本文件中。但是,它添加了列标题。如何获得行的值,从第2行开始,如果列在第1行,单元格A1,单元格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 

回答

2

为什么它不只是一个改变的事情:

For RowNdx = StartRow To EndRow 

到:

For RowNdx = StartRow+1 To EndRow 

这将开始写起与第二个范围内的行。如果要自动检测起始行是否有列标题,则需要检查范围内的第一个单元格(可能使用.Value),并找出如何区分列标题和值之间的区别。

0

代码开始行和开始列可能会被新用户误解。

StartRow = .Cells(3).Row 
StartCol = .Cells(1).Column 

.Cells语法是将细胞(指数)或细胞(行,列)

例如.Cells(1,2)是指B1如果范围是片材。然而,小区(3)指的是使用范围内的第三个小区。如果数据的范围是
4乘4,如A1到D4,则小区(5)将参考A2。

如果你想在第二行开始,为什么不使用

startrow = .Cells(2, 1) 

清楚地表明开始要导出的数据是在第2行,列1.