Сгенерируйте число при выполнении макроса и перенесите его в другую таблицу, где на другом листе нет данных - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь сгенерировать число в A1 в Sheet1 каждый раз, когда выполняется Makro. Число представляет собой комбинацию даты и числа, которое необходимо увеличить. Окончательное число должно быть перенесено на лист 2 в столбце A, где еще нет данных (в данном случае A1> A2> A3> ....)

this is my attempt with worksheetfunctions and Serves as a visualization

И это моя попытка в VBA, но она ничего не делает.

Sub incrementInvoiceNumber()
  Dim rng_dest As Range
  Dim i As Long

  Application.ScreenUpdating = False
  Sheets("Sheet1").Range("A1").Value = WorksheetFunction.Text(Date, "YYYYMMDD") & WorksheetFunction.Text(Range("A1").Value + 1)
  i = 1
  Set rng_dest = Sheets("Sheet2").Range("A:A")
  Do Until WorksheetFunction.CountA(rng_dest.Rows(i)) = 0
   i = i + 1
  Loop

 Sheets("Sheet2").Range("A" & i).Value = Sheets("Sheet1").Range("A1").Value

 Application.ScreenUpdating = True
End Sub

1 Ответ

0 голосов
/ 06 апреля 2020

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

Кроме того, всегда лучше избегать WorksheetFunction, если у вас есть функция VBA, которая может делать то же самое.

И найти последнюю строку можно гораздо лучше, используя End() method.

Вот как:

Sub incrementInvoiceNumber()
    Dim i As Long
    Application.ScreenUpdating = False

    Sheets("Sheet1").Range("A1").Value = _
        Format(Date, "YYYYMMDD") & Format(Sheets("Sheet1").Range("A1").Value + 1) 'Make sure Sheet1 is the sheet with the value. Fix it if otherwise

    With Sheets("Sheet2")
        i = .Cells(.Rows.Count, 1).End(xlUp).Row
        If Not IsEmpty(.Cells(i, 1)) Then i = i + 1
        .Cells(i, 1).Value = Sheets("Sheet1").Range("A1").Value
    End With

    Application.ScreenUpdating = True
End Sub

Cells(Rows.Count, 1).End(xlUp) означает ячейку, которую вы достигнете, если вы начнете с последней ячейки в столбце A («A1048576») и нажмете Ctrl + Стрелка вверх.

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