2013-07-15 6 views
1

Я действительно не знаю, возможно ли это или нет, но я пытаюсь написать программу Excel, которая использует встроенную функцию даты/времени для вычисления и вывода ее к ячейке. Он будет использовать загруженную дату (расположенную в столбце A), последний раз ввода данных (нижняя строка B) и каждое независимое время ввода данных (столбец B).Формула данных/времени Excel в программе VBA

Я хочу формулу в каждой ячейке, чтобы выглядеть следующим образом :: A2 - время (0,0, (B_Last - B_Current)/1000)

Я предполагаю, что мне нужно будет это в какой-то петля.

Мой текущий код выглядит следующим образом ::

Sub Bottom() 

Dim Count As Integer 
Dim i As Integer 
Dim Last As Double 

Set myRange = Columns("B:B") 

Last = Cells(Rows.Count, "B").End(xlUp) 
Set r1 = ThisWorkbook.Sheets("Sheet1").Range("A2") 

Count = Application.WorksheetFunction.CountA(myRange) 

For i = 1 To Count 
Set r2 = ThisWorkbook.Sheets("Sheet1").Range("B" & i) 
r2 = r1 - Time(0, 0, (Last - r2)/1000) 

Next 

End Sub 

Любая помощь с этим было бы весьма признателен!

Спасибо!

ответ

0

У 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, чем вы сейчас.

+0

спасибо !! Я продолжаю получать ошибку компиляции: объект требуется при запуске новой программы; Есть ли у вас какие-либо предложения?Мне не нужно использовать формулу Excel, это был единственный способ, которым я знал, как делать расчет с датой/временем. Есть ли лучший способ сделать это через VBA? – Rawr

+0

У вас есть довольно много ошибок. Позвольте мне обновить свой ответ с помощью короткой/исправленной версии, которую вы можете запустить, и из которой вы можете научиться писать правильный код. – varocarbas

+0

Взгляните на обновленный код и работайте (довольно много) самостоятельно, потому что ваши идеи пока не слишком ясны. – varocarbas

Смежные вопросы