Копирование / вставка даты с помощью VBA

#excel #vba

#excel #vba

Вопрос:

Я пытаюсь вставить дату, используя функцию Today в Excel. У меня есть лист с датой вверху, в ячейке I2.

У меня есть таблица, и я использую VBA для копирования и вставки в нее значений — это будет использоваться ежедневно, и я хочу, чтобы дата автоматически заполнялась в столбец D, начиная с последней используемой строки в столбце D и заканчивая последней используемой строкой в столбце C. Затем я хочу, чтобы дата была сохраненакак значение.

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

Может кто-нибудь, пожалуйста, помогите мне понять, почему и как это исправить?

 With ThisWorkbook
    With .Sheets("Test")
        Dim rng As Range
        Set rng = .Range(.Cells(.Rows.Count, "D").End(xlUp), .Cells(.Rows.Count, "C").End(xlUp).Offset(0, 1))
        
        rng.Value = ThisWorkbook.Sheets("Test").Range("I2").Value
    End With
End With
 

Комментарии:

1. напишите Debug.Print rng.Address в строке после Set rng = .Range … Что вы получаете?

2. Этот диапазон определения выглядит неправильно. Какое значение вы пытаетесь получить? Допустим, последняя используемая строка равна 5. Вы хотите, чтобы диапазон был C5: D5? В этом случае вы получите только D5

3. Можете ли вы объяснить (на словах), чего вы хотите добиться? .Cells(.Rows.Count, "C").End(xlUp).Offset(0, 1) также относится к диапазону D: D. Но подсчет C: C последней строки.

Ответ №1:

Я считаю, что это то, что вы хотите:

  1. Найдите последнюю использованную строку с Column C помощью (предполагается, что последняя строка в C amp; D равна, поэтому просто вычислите это в одном столбце. Похоже, вы пытаетесь усложнить)
  2. Пропустите временное rng назначение и примените перенос значения, используя комбинацию Offset при вычислении lr и Resize при ссылке на целевую строку

 Sub Try_Me()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Test")
Dim lr As Long

lr = ws.Range("C" amp; ws.Rows.Count).End(xlUp).Offset(1).Row
ws.Range("C" amp; lr).Resize(1, 2).Value = ws.Range("I2").Value

End Sub
 

Глядя на ваш текущий Set rng = ... оператор, похоже, что вы, возможно, пытаетесь определить последнюю использованную строку в любом столбце, указывая, что последняя используемая строка в обоих может отличаться. Если это так, вы можете сравнить оба и выбрать максимальное значение следующим образом:

 Sub Try_Me()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet2")
Dim c As Long, d As Long, lr As Long

c = ws.Range("C" amp; ws.Rows.Count).End(xlUp).Offset(1).Row
d = ws.Range("C" amp; ws.Rows.Count).End(xlUp).Offset(1).Row

lr = Application.WorksheetFunction.Max(c, d)
ws.Range("C" amp; lr).Resize(1, 2).Value = ws.Range("I2").Value

End Sub
 

Комментарии:

1. Итак, это работает с точки зрения вставки формулы. Я думаю, мне нужно объяснить немного больше — допустим, столбцы C и D заканчиваются в одной строке, например, строка 3, затем я использую старый уже существующий макрос для вставки значений в столбец C, чтобы последней используемой строкой теперь была строка 10. Я хочу создать новый макрос, который будет вставлять определенную формулу в столбец D из ранее используемой строки до последней используемой строки, поэтому из строки 3 в строку 10 будет эта формула. Имеет ли это смысл?