Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Нужна помощь по макросам

80K
16 февраля 2012 года
andriy111
2 / / 16.02.2012
Здравствуйте уважаемые!
Очень нужна Ваша помощь.
Есть макросы http://support.microsoft.com/kb/213449, эти макросы переводят значение 12° 33' 54" в 12,565 и обратно, но в чем проблема: Эти макросы умеют считать только целые значение секунд и конвертирует только до тысячных (0,000). Сможете ли Вы помочь и поправить макрос чтобы он умел конвертировать значения типа 12° 33' 54,12" и давать значение до 7 значений после комы (0,0000000).
При значении 12° 33' 54,12" должно давать 12,5650333 и обратно.
Надеюсь на Вашу помощь, Большое спасибо!
275
16 февраля 2012 года
pashulka
985 / / 19.09.2004
Код:
'Источник : http://support.microsoft.com/kb/213449

Function Convert_Decimal(Degree_Deg As String) As Double
   ' Declare the variables to be double precision floating-point.
   Dim degrees As Double
   Dim minutes As Double
   Dim seconds As Double
   ' Set degree to value before "°" of Argument Passed.
   Degree_Deg = Application.Substitute(Degree_Deg, ",", ".") 'XL97
   'Degree_Deg = Replace(Degree_Deg, ",", ".")               'XL2000
   degrees = Val(Left(Degree_Deg, InStr(1, Degree_Deg, "°") - 1))
   ' Set minutes to the value between the "°" and the "'"
   ' of the text string for the variable Degree_Deg divided by
   ' 60. The Val function converts the text string to a number.
   minutes = Val(Mid(Degree_Deg, InStr(1, Degree_Deg, "°") + 2, _
             InStr(1, Degree_Deg, "'") - InStr(1, Degree_Deg, _
             "°") - 2)) / 60
    ' Set seconds to the number to the right of "'" that is
    ' converted to a value and then divided by 3600.
   seconds = Val(Mid(Degree_Deg, InStr(1, Degree_Deg, "'") + _
            2, Len(Degree_Deg) - InStr(1, Degree_Deg, "'") - 2)) / 3600
   Convert_Decimal = degrees + minutes + seconds
End Function

Function Convert_Degree(Decimal_Deg) As Variant
    'Set degree to Integer of Argument Passed
    degrees = Int(Decimal_Deg)
    'Set minutes to 60 times the number to the right
    'of the decimal for the variable Decimal_Deg
    minutes = (Decimal_Deg - degrees) * 60
    'Set seconds to 60 times the number to the right of the
    'decimal for the variable Minute
    seconds = Application.Round(((minutes - Int(minutes)) * 60), 7)
    'Returns the Result of degree conversion
    '(for example, 10.46 = 10~ 27  ' 36")
     Convert_Degree = " " & degrees & "° " & Int(minutes) & "' " _
          & seconds & Chr(34)
End Function
80K
19 февраля 2012 года
andriy111
2 / / 16.02.2012
Большое спасибо! Все отлично работает, даже лучше чем ожидалось!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог