VBA макросов - PullRequest
       18

VBA макросов

1 голос
/ 26 февраля 2010

Привет, ребята, у меня есть следующий код 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

Ответы [ 2 ]

2 голосов
/ 26 февраля 2010

Почему это не просто вопрос изменения:

For RowNdx = StartRow To EndRow

до:

For RowNdx = StartRow+1 To EndRow

Это начнет писать строки, начиная со второй в диапазоне. Если вы хотите автоматически определить, имеет ли начальная строка заголовки столбцов, вам нужно проверить первую ячейку в диапазоне (вероятно, используя .Value) и выяснить, как определить разницу между заголовком столбца и значением.

0 голосов
/ 13 декабря 2015

Новые пользователи могут неверно истолковать начальную строку кода и начальную строку.

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

. Синтаксис ячеек: Ячейки (индекс) или Ячейки (строка, столбец)

Например. Клетки (1, 2) относятся к B1, если диапазон - лист. Однако .Cells (3) относится к третьей ячейке в используемом диапазоне. Если данные находятся в диапазоне
4 на 4, например от А1 до D4. Ячейки (5) будут обозначать А2.

Если вы хотите начать со второго ряда, почему бы не использовать

startrow = .Cells(2, 1)

, чтобы четко указать начальные данные для экспорта, находится в строке 2, столбец 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...