#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:
Я считаю, что это то, что вы хотите:
- Найдите последнюю использованную строку с
Column C
помощью (предполагается, что последняя строка в C amp; D равна, поэтому просто вычислите это в одном столбце. Похоже, вы пытаетесь усложнить) - Пропустите временное
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 будет эта формула. Имеет ли это смысл?