VB.Net - циклический проход по строкам и ввод данных в их ячейки - PullRequest
0 голосов
/ 25 апреля 2019

Здравствуйте, я хотел бы добавить значение (из текстового поля как число (17)) в ячейку к 4-му столбцу (слева направо) для каждой строки от 2 до 50, и другое значение (текстовое поле как число (57)) от 50 до последней строки с данными в столбце «А». Итак, я уже открыл файл Excel в коде, запустил макрос в файле Excel, и я могу сохранить его, но только моя первая строка меняет значение на 17 в столбце 4. И мне фактически не нужно менять первую строку, мне нужно вводить данные в ячейку со второй строки до последней. Может ли кто-нибудь помочь мне?

Private Sub ReportBtn_Click(sender As Object, e As EventArgs) Handles Report_Btn.Click

Dim oExcel As Excel.Application
Dim oBook As Excel.Workbook
Dim oBooks As Excel.Workbooks
Dim wsheet As Excel.Worksheet

If MORCheckbox.Checked Then
    Dim nowYear As Integer = Date.Now.Year
    Dim MontText As String = MonatTextBox.Text
    Dim path As String = "C:\TEST\" & nowYear & "\" & MontText & ""
    Dim name As String = "\Filename" & MontText & " " & nowYear & ".xlsx"    
    Dim pathandname As String = (path & name)
    If Not Directory.Exists(path) Then
           Directory.CreateDirectory(path)
    End If

    oExcel = CreateObject("Excel.Application")
    oExcel.Visible = False
    oBooks = oExcel.Workbooks
    oBook = oBooks.Open("C:\TEST2\Report - Test.xlsm")
    oExcel.Run("TestMACRO")

    Dim numrows As Integer
    numrows = oBook.Sheets("Sheet1").UsedRange.Rows.Count
    wsheet = oBook.Worksheets(1)

    Dim range1 As Excel.Range = wsheet.Range("A1")
    For Each cell1 As Excel.Range In range1.Cells
         If numrows >= 2 Or numrows <= 50 Then
             wsheet.Cells(4).value = "17"
          ElseIf numrows >= 51 Then
             wsheet.Cells(4).value = "57"
         End If
         Next

oExcel.DisplayAlerts = False
oBook.SaveAs(pathandname, 51) ' 51 == xlsx
oBook.Close()
oBook = Nothing
oExcel.Quit()
oExcel = Nothing

Else
End If

Проблема в том, что только 4-я ячейка в первом ряду изменяется на 17, а остальные строки / ячейки не меняются.

1 Ответ

0 голосов
/ 26 апреля 2019

Ваш цикл должен выглядеть примерно так.Вам нужен какой-то способ отслеживать текущую строку, а затем передать ее в метод Cells().Я надеюсь, что это поможет и поможет вам на правильном пути.

Dim currentRow As Long
For currentRow = 2 To numrows Step 1
    If currentRow >= 2 Or currentRow <= 50 Then
        wsheet.Cells(currentRow, 4).value = "17"
    ElseIf currentRow >= 51 Then
        wsheet.Cells(currentRow, 4).value = "57"
    End If
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...