У VBA гораздо больше «встроенной мощности», чем Excel, и поэтому вам не нужно полагаться на формулы Excel при использовании VBA. Но если вы хотите сделать это в любом случае, вы должны сделать что-то вроде этого:
Range("B" & i).Value = "=Time(0, 0, (" & Last - r2 & ")/1000)"
Чтобы получить значение из ячейки:
Dim cellVal As Date
cellVal = Range("B" & i).Value
Вы просто должны убедиться, что переменные V и строки, записанные в ячейки, обрабатываются отдельно (с помощью «и , как показано выше), и что вы сохраняете значение данной ячейки в переменной правильного типа (если вы полагаетесь на тип string
, она будет работать с любым контентом) .
Сом Коррекция е в коде:
Sub Bottom()
Dim Count As Integer
Dim i As Integer
Dim Last As Double
Set myRange = Columns("B:B")
Last = 10 'What you want here??
Set r1 = ThisWorkbook.Sheets("Sheet1").Range("A2")
Dim r1Val As Long
r1Val = r1.Value
Count = Application.WorksheetFunction.CountA(myRange)
For i = 1 To Count
Set r2 = ThisWorkbook.Sheets("Sheet1").Range("B" & i)
r2.Value = "=" & r1Val & " - Time(0, 0," & CStr(Last) & "/ 1000)" 'r2 = r1 - Time(0, 0, (Last - r2)/1000) -> r2 = ... Last - r2 does not make any sense; r2 is a whole date and Last - r2 refers to a part of a date
Next
End Sub
Это только простая версия кода показывает вам некоторые из вещей, которые вы не должны делать: вы путаете диапазоны со значениями, не считая различных типов, учета переменных который я даже не могу понять и т. д.
Просто возьмите этот код, тщательно проанализируйте его, поймите, что вы сделали неправильно, и продолжайте добавлять функциональные возможности шаг за шагом, делая некоторые исследования каждый раз. Идеи очень просты:
- Вы можете установить столько ячеек, сколько пожелаете в качестве диапазона.
- Диапазон может иметь различное содержимое (полученное через диапазон. Ценность); это содержимое связано с переменной в VBA, которая должна иметь того же типа (строка работает для любого содержимого).
- Когда вы пишете в ячейку, вы пишете весь текст (если вы положите «=» вперед, Excel понимает его как формулу).
- Когда вы читаете из ячейки, вы получаете окончательное значение (одно из формулы, если применимо).
Etc.
Я рекомендую вам сделать некоторые исследования и получить гораздо больше привыкают к VBA, чем вы сейчас.
спасибо !! Я продолжаю получать ошибку компиляции: объект требуется при запуске новой программы; Есть ли у вас какие-либо предложения?Мне не нужно использовать формулу Excel, это был единственный способ, которым я знал, как делать расчет с датой/временем. Есть ли лучший способ сделать это через VBA? – Rawr
У вас есть довольно много ошибок. Позвольте мне обновить свой ответ с помощью короткой/исправленной версии, которую вы можете запустить, и из которой вы можете научиться писать правильный код. – varocarbas
Взгляните на обновленный код и работайте (довольно много) самостоятельно, потому что ваши идеи пока не слишком ясны. – varocarbas