powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / [Excel] Как написать пользовательскую функцию?
10 сообщений из 10, страница 1 из 1
[Excel] Как написать пользовательскую функцию?
    #38082971
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не получается написать функцию конвертации даты (данные из произвольной ячейки)...
Пробовал сначала так

Код: vbnet
1.
2.
3.
Function sqlDate(Val As Range) As String
   getDate = "'" & Year(Val) & "-" & Month(Val) & "-" & Day(Val) & "'"
End Function



Ошибо нет, но и значения в ячейке не появляется...

Переделал вот так

Код: vbnet
1.
2.
3.
4.
5.
Function sqlDate(ByVal Val As Range) As String
   Dim dat As Date
   dat = Val.Offset(0, 0).Value
   getDate = "'" & Year(dat) & "-" & Month(dat) & "-" & Day(dat) & "'"
End Function



Результат тот же...

Хотя нужное значение в консоле вижу

Код: vbnet
1.
2.
3.
4.
5.
6.
Function sqlDate(Val As Range) As String
   Dim dat As Date
   dat = Val.Offset(0, 0).Value
   Debug.Print dat
   getDate = "'" & Year(dat) & "-" & Month(dat) & "-" & Day(dat) & "'"
End Function



Как всё же работать с полученным параметром и функциями?

Причем для пользователя все функции на русском, а как посмотреть их имена-аналоги на VBA?
----------
Cache for Windows (x86-64) 2010.2.3 (Build 702) Tue Feb 15 2011 14:20:27 EST
Cache for Windows (x86-64) 2012.1.1 (Build 602) Wed Mar 7 2012 22:36:34 EST
...
Рейтинг: 0 / 0
[Excel] Как написать пользовательскую функцию?
    #38083043
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

Потому что передавать нужно не Range а примитивные типы String, Integer. Или проще Variant
...
Рейтинг: 0 / 0
[Excel] Как написать пользовательскую функцию?
    #38083045
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
#2, Почему имена различны??

Код: vbnet
1.
2.
3.
Function sqlDate(Val As Range) As String
   getDate = "'" & Year(Val) & "-" & Month(Val) & "-" & Day(Val) & "'"
End Function
...
Рейтинг: 0 / 0
[Excel] Как написать пользовательскую функцию?
    #38083051
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Range в принципе можно передавать, но для вашей задачи хватит типа Date.
Ещё на заметку, тип datatime в SQL для английской и русской локалей будет отличаться. Можно в строку с форматом "YYYYMMDD" преобразовать, чтобы не нарваться в будущем на грабли
...
Рейтинг: 0 / 0
[Excel] Как написать пользовательскую функцию?
    #38083055
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD#2, Почему имена различны??
Семён Семёныч!!! (с)

Спасибо тебе, добрый человек! Все заработало.

Код: vbnet
1.
2.
3.
Function sqlDate(ByVal Val As Range) As String
   sqlDate = "'" & Year(Val) & "-" & Month(Val) & "-" & Day(Val) & "'"
End Function



Название у функции поменял. Да не везде! Привычки еще к особенностям VBA нет...
...
Рейтинг: 0 / 0
[Excel] Как написать пользовательскую функцию?
    #38083109
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
sqlDate = Format$(Val, "'yyyy-m-d'")
...
Рейтинг: 0 / 0
[Excel] Как написать пользовательскую функцию?
    #38083114
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaНазвание у функции поменял. Да не везде! Привычки еще к особенностям VBA нет... Option Explicit поможет не допустить такой ошибки
...
Рейтинг: 0 / 0
[Excel] Как написать пользовательскую функцию?
    #38083157
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLADЕщё на заметку, тип datatime в SQL для английской и русской локалей будет отличаться. Можно в строку с форматом "YYYYMMDD" преобразовать, чтобы не нарваться в будущем на грабли
Да у меня там на приёме "свой" SQL, т.ч. это формат для него...
...
Рейтинг: 0 / 0
[Excel] Как написать пользовательскую функцию?
    #38083161
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Код: vbnet
1.
sqlDate = Format$(Val, "'yyyy-m-d'")


Вааще ништяк! Спасибо.

Код: vbnet
1.
2.
3.
Function sqlDate(ByVal Val As Range) As String
   sqlDate = Format$(Val, "'yyyy-mm-dd'")
End Function
...
Рейтинг: 0 / 0
[Excel] Как написать пользовательскую функцию?
    #38083166
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro Option Explicit поможет не допустить такой ошибки
Взял на вооружение!
Спасибо за советы и помощь.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / [Excel] Как написать пользовательскую функцию?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]