Convert JavaScript code to VBA

shorex

New Member
Joined
Apr 1, 2022
Messages
1
Office Version
  1. 2016
Platform
  1. Windows
Hello guys, i am a noob VBA user and im looking for a way to convert geographic coordinates (latitude and longitude) to UTM coordinates and vice-versa. In my searchs, i found a JavaScript code that allows me to do that, but i would like and have to do it on the excel, where i have the map of my country divided in regions by basic wind speed in latitude and longitude coordinates. I receive some UTM coordinates, but i have to convert to lat. and long., i could use sites, but it takes some time where usining VBA to automatize it would be way faster.

So, is there a way to use that JavaScript code on VBA?

I appreciate any help in advance that you guys may provide! ^^

JavaScript:
    <!--
        
        var pi = 3.14159265358979;

        /* Ellipsoid model constants (actual values here are for WGS84) */
        var sm_a = 6378137.0;
        var sm_b = 6356752.314;
        var sm_EccSquared = 6.69437999013e-03;

        var UTMScaleFactor = 0.9996;


        /*
        * DegToRad
        *
        * Converts degrees to radians.
        *
        */
        function DegToRad(deg) {
            return (deg / 180.0 * pi)
        }




        /*
        * RadToDeg
        *
        * Converts radians to degrees.
        *
        */
        function RadToDeg(rad) {
            return (rad / pi * 180.0)
        }




        /*
        * ArcLengthOfMeridian
        *
        * Computes the ellipsoidal distance from the equator to a point at a
        * given latitude.
        *
        * Reference: Hoffmann-Wellenhof, B., Lichtenegger, H., and Collins, J.,
        * GPS: Theory and Practice, 3rd ed.  New York: Springer-Verlag Wien, 1994.
        *
        * Inputs:
        *     phi - Latitude of the point, in radians.
        *
        * Globals:
        *     sm_a - Ellipsoid model major axis.
        *     sm_b - Ellipsoid model minor axis.
        *
        * Returns:
        *     The ellipsoidal distance of the point from the equator, in meters.
        *
        */
        function ArcLengthOfMeridian(phi) {
            var alpha, beta, gamma, delta, epsilon, n;
            var result;

            /* Precalculate n */
            n = (sm_a - sm_b) / (sm_a + sm_b);

            /* Precalculate alpha */
            alpha = ((sm_a + sm_b) / 2#)
           * (1.0 + (Math.pow(n, 2.0) / 4.0) + (Math.pow(n, 4.0) / 64.0));

            /* Precalculate beta */
            beta = (-3# * N / 2#) + (9# * Math.pow(N, 3#) / 16#)
           + (-3.0 * Math.pow(n, 5.0) / 32.0);

            /* Precalculate gamma */
            Gamma = (15# * Math.pow(N, 2#) / 16#)
            + (-15.0 * Math.pow(n, 4.0) / 32.0);

            /* Precalculate delta */
            Delta = (-35# * Math.pow(N, 3#) / 48#)
            + (105.0 * Math.pow(n, 5.0) / 256.0);

            /* Precalculate epsilon */
            epsilon = (315.0 * Math.pow(n, 4.0) / 512.0);

            /* Now calculate the sum of the series and return */
            result = alpha
        * (phi + (beta * Math.sin(2.0 * phi))
            + (gamma * Math.sin(4.0 * phi))
            + (delta * Math.sin(6.0 * phi))
            + (epsilon * Math.sin(8.0 * phi)));

            return result;
        }



        /*
        * UTMCentralMeridian
        *
        * Determines the central meridian for the given UTM zone.
        *
        * Inputs:
        *     zone - An integer value designating the UTM zone, range [1,60].
        *
        * Returns:
        *   The central meridian for the given UTM zone, in radians, or zero
        *   if the UTM zone parameter is outside the range [1,60].
        *   Range of the central meridian is the radian equivalent of [-177,+177].
        *
        */
        function UTMCentralMeridian(zone) {
            var cmeridian;

            cmeridian = DegToRad(-183.0 + (zone * 6.0));

            return cmeridian;
        }



        /*
        * FootpointLatitude
        *
        * Computes the footpoint latitude for use in converting transverse
        * Mercator coordinates to ellipsoidal coordinates.
        *
        * Reference: Hoffmann-Wellenhof, B., Lichtenegger, H., and Collins, J.,
        *   GPS: Theory and Practice, 3rd ed.  New York: Springer-Verlag Wien, 1994.
        *
        * Inputs:
        *   y - The UTM northing coordinate, in meters.
        *
        * Returns:
        *   The footpoint latitude, in radians.
        *
        */
        function FootpointLatitude(y) {
            var y_, alpha_, beta_, gamma_, delta_, epsilon_, n;
            var result;

            /* Precalculate n (Eq. 10.18) */
            n = (sm_a - sm_b) / (sm_a + sm_b);

            /* Precalculate alpha_ (Eq. 10.22) */
            /* (Same as alpha in Eq. 10.17) */
            alpha_ = ((sm_a + sm_b) / 2#)
            * (1 + (Math.pow(n, 2.0) / 4) + (Math.pow(n, 4.0) / 64));

            /* Precalculate y_ (Eq. 10.23) */
            y_ = y / alpha_;

            /* Precalculate beta_ (Eq. 10.22) */
            beta_ = (3# * N / 2#) + (-27# * Math.pow(N, 3#) / 32#)
            + (269.0 * Math.pow(n, 5.0) / 512.0);

            /* Precalculate gamma_ (Eq. 10.22) */
            gamma_ = (21# * Math.pow(N, 2#) / 16#)
            + (-55.0 * Math.pow(n, 4.0) / 32.0);

            /* Precalculate delta_ (Eq. 10.22) */
            delta_ = (151# * Math.pow(N, 3#) / 96#)
            + (-417.0 * Math.pow(n, 5.0) / 128.0);

            /* Precalculate epsilon_ (Eq. 10.22) */
            epsilon_ = (1097.0 * Math.pow(n, 4.0) / 512.0);

            /* Now calculate the sum of the series (Eq. 10.21) */
            result = y_ + (beta_ * Math.Sin(2# * y_))
            + (gamma_ * Math.sin(4.0 * y_))
            + (delta_ * Math.sin(6.0 * y_))
            + (epsilon_ * Math.sin(8.0 * y_));

            return result;
        }



        /*
        * MapLatLonToXY
        *
        * Converts a latitude/longitude pair to x and y coordinates in the
        * Transverse Mercator projection.  Note that Transverse Mercator is not
        * the same as UTM; a scale factor is required to convert between them.
        *
        * Reference: Hoffmann-Wellenhof, B., Lichtenegger, H., and Collins, J.,
        * GPS: Theory and Practice, 3rd ed.  New York: Springer-Verlag Wien, 1994.
        *
        * Inputs:
        *    phi - Latitude of the point, in radians.
        *    lambda - Longitude of the point, in radians.
        *    lambda0 - Longitude of the central meridian to be used, in radians.
        *
        * Outputs:
        *    xy - A 2-element array containing the x and y coordinates
        *         of the computed point.
        *
        * Returns:
        *    The function does not return a value.
        *
        */
        function MapLatLonToXY(phi, lambda, lambda0, xy) {
            var N, nu2, ep2, t, t2, l;
            var l3coef, l4coef, l5coef, l6coef, l7coef, l8coef;
            var tmp;

            /* Precalculate ep2 */
            ep2 = (Math.pow(sm_a, 2.0) - Math.pow(sm_b, 2.0)) / Math.pow(sm_b, 2.0);

            /* Precalculate nu2 */
            nu2 = ep2 * Math.pow(Math.cos(phi), 2.0);

            /* Precalculate N */
            N = Math.pow(sm_a, 2.0) / (sm_b * Math.sqrt(1 + nu2));

            /* Precalculate t */
            t = Math.tan(phi);
            t2 = t * t;
            tmp = (t2 * t2 * t2) - Math.pow(t, 6.0);

            /* Precalculate l */
            l = lambda - lambda0;

            /* Precalculate coefficients for l**n in the equations below
            so a normal human being can read the expressions for easting
            and northing
            -- l**1 and l**2 have coefficients of 1.0 */
            l3coef = 1.0 - t2 + nu2;

            l4coef = 5.0 - t2 + 9 * nu2 + 4.0 * (nu2 * nu2);

            l5coef = 5# - 18# * t2 + (t2 * t2) + 14# * nu2
            - 58.0 * t2 * nu2;

            l6coef = 61# - 58# * t2 + (t2 * t2) + 270# * nu2
            - 330.0 * t2 * nu2;

            l7coef = 61.0 - 479.0 * t2 + 179.0 * (t2 * t2) - (t2 * t2 * t2);

            l8coef = 1385.0 - 3111.0 * t2 + 543.0 * (t2 * t2) - (t2 * t2 * t2);

            /* Calculate easting (x) */
            xy [0] = N * Math.Cos(phi) * l
            + (N / 6.0 * Math.pow(Math.cos(phi), 3.0) * l3coef * Math.pow(l, 3.0))
            + (N / 120.0 * Math.pow(Math.cos(phi), 5.0) * l5coef * Math.pow(l, 5.0))
            + (N / 5040.0 * Math.pow(Math.cos(phi), 7.0) * l7coef * Math.pow(l, 7.0));

            /* Calculate northing (y) */
            xy [1] = ArcLengthOfMeridian(phi)
            + (t / 2.0 * N * Math.pow(Math.cos(phi), 2.0) * Math.pow(l, 2.0))
            + (t / 24.0 * N * Math.pow(Math.cos(phi), 4.0) * l4coef * Math.pow(l, 4.0))
            + (t / 720.0 * N * Math.pow(Math.cos(phi), 6.0) * l6coef * Math.pow(l, 6.0))
            + (t / 40320.0 * N * Math.pow(Math.cos(phi), 8.0) * l8coef * Math.pow(l, 8.0));

            return;
        }



        /*
        * MapXYToLatLon
        *
        * Converts x and y coordinates in the Transverse Mercator projection to
        * a latitude/longitude pair.  Note that Transverse Mercator is not
        * the same as UTM; a scale factor is required to convert between them.
        *
        * Reference: Hoffmann-Wellenhof, B., Lichtenegger, H., and Collins, J.,
        *   GPS: Theory and Practice, 3rd ed.  New York: Springer-Verlag Wien, 1994.
        *
        * Inputs:
        *   x - The easting of the point, in meters.
        *   y - The northing of the point, in meters.
        *   lambda0 - Longitude of the central meridian to be used, in radians.
        *
        * Outputs:
        *   philambda - A 2-element containing the latitude and longitude
        *               in radians.
        *
        * Returns:
        *   The function does not return a value.
        *
        * Remarks:
        *   The local variables Nf, nuf2, tf, and tf2 serve the same purpose as
        *   N, nu2, t, and t2 in MapLatLonToXY, but they are computed with respect
        *   to the footpoint latitude phif.
        *
        *   x1frac, x2frac, x2poly, x3poly, etc. are to enhance readability and
        *   to optimize computations.
        *
        */
        function MapXYToLatLon(x, y, lambda0, philambda) {
            var phif, Nf, Nfpow, nuf2, ep2, tf, tf2, tf4, cf;
            var x1frac, x2frac, x3frac, x4frac, x5frac, x6frac, x7frac, x8frac;
            var x2poly, x3poly, x4poly, x5poly, x6poly, x7poly, x8poly;

            /* Get the value of phif, the footpoint latitude. */
            phif = FootpointLatitude(y);

            /* Precalculate ep2 */
            ep2 = (Math.pow(sm_a, 2#) - Math.pow(sm_b, 2#))
              / Math.pow(sm_b, 2.0);

            /* Precalculate cos (phif) */
            cf = Math.cos(phif);

            /* Precalculate nuf2 */
            nuf2 = ep2 * Math.pow(cf, 2.0);

            /* Precalculate Nf and initialize Nfpow */
            Nf = Math.pow(sm_a, 2.0) / (sm_b * Math.sqrt(1 + nuf2));
            Nfpow = Nf;

            /* Precalculate tf */
            tf = Math.tan(phif);
            tf2 = tf * tf;
            tf4 = tf2 * tf2;

            /* Precalculate fractional coefficients for x**n in the equations
            below to simplify the expressions for latitude and longitude. */
            x1frac = 1.0 / (Nfpow * cf);

            Nfpow *= Nf;   /* now equals Nf**2) */
            x2frac = tf / (2.0 * Nfpow);

            Nfpow *= Nf;   /* now equals Nf**3) */
            x3frac = 1.0 / (6.0 * Nfpow * cf);

            Nfpow *= Nf;   /* now equals Nf**4) */
            x4frac = tf / (24.0 * Nfpow);

            Nfpow *= Nf;   /* now equals Nf**5) */
            x5frac = 1.0 / (120.0 * Nfpow * cf);

            Nfpow *= Nf;   /* now equals Nf**6) */
            x6frac = tf / (720.0 * Nfpow);

            Nfpow *= Nf;   /* now equals Nf**7) */
            x7frac = 1.0 / (5040.0 * Nfpow * cf);

            Nfpow *= Nf;   /* now equals Nf**8) */
            x8frac = tf / (40320.0 * Nfpow);

            /* Precalculate polynomial coefficients for x**n.
            -- x**1 does not have a polynomial coefficient. */
            x2poly = -1.0 - nuf2;

            x3poly = -1.0 - 2 * tf2 - nuf2;

            x4poly = 5# + 3# * tf2 + 6# * nuf2 - 6# * tf2 * nuf2
            - 3.0 * (nuf2 * nuf2) - 9.0 * tf2 * (nuf2 * nuf2);

            x5poly = 5.0 + 28.0 * tf2 + 24.0 * tf4 + 6.0 * nuf2 + 8.0 * tf2 * nuf2;

            x6poly = -61# - 90# * tf2 - 45# * tf4 - 107# * nuf2
            + 162.0 * tf2 * nuf2;

            x7poly = -61.0 - 662.0 * tf2 - 1320.0 * tf4 - 720.0 * (tf4 * tf2);

            x8poly = 1385.0 + 3633.0 * tf2 + 4095.0 * tf4 + 1575 * (tf4 * tf2);

            /* Calculate latitude */
            philambda [0] = phif + x2frac * x…
            
             '/* Calculate latitude */
            .AddCode "philambda [0] = phif + x2frac * x2poly * (x * x) + x4frac * x4poly * Math.pow(x, 4.0) + x6frac * x6poly * Math.pow(x, 6.0) + x8frac * x8poly * Math.pow(x, 8.0);"

            '/* Calculate longitude */
            .AddCode "philambda [1] = lambda0 + x1frac * x + x3frac * x3poly * Math.pow(x, 3.0) + x5frac * x5poly * Math.pow(x, 5.0) + x7frac * x7poly * Math.pow(x, 7.0);"

            .AddCode "return;"
        .AddCode "}"




'        /*
'        * LatLonToUTMXY
'        *
 '       * Converts a latitude/longitude pair to x and y coordinates in the
 '       * Universal Transverse Mercator projection.
  '      *
  '      * Inputs:
   '     *   lat - Latitude of the point, in radians.
   '     *   lon - Longitude of the point, in radians.
    '    *   zone - UTM zone to be used for calculating values for x and y.
    '    *          If zone is less than 1 or greater than 60, the routine
     '   *          will determine the appropriate zone from the value of lon.
     '   *
'        * Outputs:
'        *   xy - A 2-element array where the UTM x and y values will be stored.
 '       *
 '       * Returns:
 '       *   The UTM zone used for calculating the values of x and y.
  '      *
  '      */
function LatLonToUTMXY(lat, lon, zone, xy) {
            MapLatLonToXY(lat, lon, UTMCentralMeridian(zone), xy);

            '/* Adjust easting and northing for UTM system. */
            xy[0] = xy[0] * UTMScaleFactor + 500000.0;
            xy[1] = xy[1] * UTMScaleFactor;
            if (xy[1] < 0.0)"
                xy[1] = xy[1] + 10000000.0;

            return zone;
        }



   '     /*
   '     * UTMXYToLatLon
   '     *
    '    * Converts x and y coordinates in the Universal Transverse Mercator
    '    * projection to a latitude/longitude pair.
     '   *
      '  * Inputs:
       ' *   x - The easting of the point, in meters.
       ' *   y - The northing of the point, in meters.
       ' *   zone - The UTM zone in which the point lies.
        '*   southhemi - True if the point is in the southern hemisphere;
        '*               false otherwise.
        '*
'        * Outputs:
'        *   latlon - A 2-element array containing the latitude and
'        *            longitude of the point, in radians.
'       *
'       * Returns:
'       *   The function does not return a value.
'       *
'       */
        function UTMXYToLatLon(x, y, zone, southhemi, latlon) {
            var cmeridian;

            x -= 500000.0;
            x /= UTMScaleFactor;

            '/* If in southern hemisphere, adjust y accordingly. */
            if (southhemi)"
                y -= 10000000.0;

            y /= UTMScaleFactor;

            cmeridian = UTMCentralMeridian(zone);
            MapXYToLatLon(x, y, cmeridian, latlon);

            return;
        }

        
        '/*
'        * btnToUTM_OnClick   BOTAO <<
'        *
 ''       * Called when the btnToUTM button is clicked.
 '       *
  '      */
        function btnToUTM_OnClick() {
            var xy = new Array(B12:B13);

            if (isNaN(parseFloat(document.frmConverter.txtLongitude.value))) {
                alert(Por favor, digite uma longitude válida.);
                return false;
            }

            lon = parseFloat(document.frmConverter.txtLongitude.value);

            if ((lon < -180.0) || (180.0 < lon)) {
                alert(A longitude que você digitou não é válida.   + Por favor digite um valor entre [-180, 180].);
                return false;
            }

            if (isNaN(parseFloat(document.frmConverter.txtLatitude.value))) {
                alert(Por favor, digite uma latitude válida.);
                return false;
            }

            lat = parseFloat(document.frmConverter.txtLatitude.value);

            if ((lat < -90.0) || (90.0 < lat)) {
                alert(A latitude que você digitou não é válida.   + Por favor, digite um valor entre [-90, 90].);
                return false;
            }

'            // Compute the UTM zone.
            zone = Math.floor((lon + 180.0) / 6) + 1;'"

            zone = LatLonToUTMXY(DegToRad(lat), DegToRad(lon), zone, xy);

            '/* Set the output controls.  */
            document.frmConverter.txtX.value = xy[0];
            document.frmConverter.txtY.value = xy[1];
            document.frmConverter.txtZone.value = zone;
            if (lat < 0)"
            '// Set the S button.
                document.frmConverter.rbtnHemisphere[1].checked = true;
            Else"
            '// Set the N button.
                document.frmConverter.rbtnHemisphere[0].checked = true;
            return true;
        }

        


       ' /*
       ' * btnToGeographic_OnClick        BOTAO >>
       ' *
       '' * Called when the btnToGeographic button is clicked.
      '  *
      '  */
        function btnToGeographic_OnClick() {
            latlon = new Array(E12:E13);
            var x, y, zone, southhemi;

            if (isNaN(parseFloat(document.frmConverter.txtX.value))) {
                alert(Por favor, digite um valor válido para a coordenada X.);
                return false;
            }

            x = parseFloat(document.frmConverter.txtX.value);

            if (isNaN(parseFloat(document.frmConverter.txtY.value))) {
                alert(Por favor, digite um valor válido para a coordenada Y.);
                return false;
            }

            y = parseFloat(document.frmConverter.txtY.value);

            if (isNaN(parseInt(document.frmConverter.txtZone.value))) {
                alert(Por favor, digite um valor válido para a fuso UTM.);
                return false;
            }

            zone = parseFloat(document.frmConverter.txtZone.value);

            if ((zone < 1) || (60 < zone)) {
                alert(A fuso UTM digitada não é válida.   + Por favor, digite um valor entre [1, 60], normalmente 23.);
                return false;
            }

            if (document.frmConverter.rbtnHemisphere[1].checked)"
                southhemi = true;
            Else"
                southhemi = false;

            UTMXYToLatLon(x, y, zone, southhemi, latlon);
            document.frmConverter.txtLatitude.value = RadToDeg(latlon[0]);
            document.frmConverter.txtLongitude.value = RadToDeg(latlon[1]);
            if (window.opener && window.opener.document) {
                var txtLat = window.opener.document.getElementById(get('latTxt'));
                var txtLon = window.opener.document.getElementById(get('lonTxt'));
                if(txtLat && txtLon){
                    txtLat.value =  RadToDeg(latlon[0]).toFixed(8).replace('.', ',');
                    txtLon.value = RadToDeg(latlon[1]).toFixed(8).replace('.', ',');
                }
            }
            return true;
        }

        function get(name) {
            if(name=(new RegExp('[?&]'+encodeURIComponent(name)+'=([^&]*)')).exec(location.search))"
                return decodeURIComponent(name[1]);
        }
        '// CONVERSOR  GMS PARA GEOGRAFICA

        '//BOTÃO   >>
        function btnGMSParaGeo_OnClick() {
            var graulat = parseInt(document.frmConverter.LatGrau.value);
            var minutolat = parseInt(document.frmConverter.LatMin.value);
            var segundolat = parseFloat(document.frmConverter.LatSeg.value);

            var graulon = parseInt(document.frmConverter.LonGrau.value);
            var minutolon = parseInt(document.frmConverter.LonMin.value);
            var segundolon = parseFloat(document.frmConverter.LonSeg.value);


            var consistido = false;
            if (!isNaN(graulat) && !isNaN(minutolat) && !isNaN(segundolat) && !isNaN(graulon) && !isNaN(minutolon) && !isNaN(segundolon)) {
                if (!EstaForaDoIntervalo(graulat, 0, 90) && !EstaForaDoIntervalo(minutolat, 0, 60) && !EstaForaDoIntervalo(segundolat, 0, 60) && !EstaForaDoIntervalo(graulon, 0, 180) && !EstaForaDoIntervalo(minutolat, 0, 60) && !EstaForaDoIntervalo(segundolat, 0, 60)) {
                    consistido = true;

                    '//Acerta o Sinal da Latitude e Longitude
                    var latitudeconvertida = CauculaLatitude(graulat, minutolat, segundolat, document.frmConverter.LatQuad.selectedIndex == 0 ? -1 : 1);
                    frmConverter.txtLatitudeN.value = latitudeconvertida.toFixed(8);

                    var longitudeconvertida = CauculaLongitude(graulon, minutolon, segundolon, document.frmConverter.LonQuad.selectedIndex == 0 ? -1 : 1);
                    frmConverter.txtLongitudeN.value = longitudeconvertida.toFixed(8);
                    '//Coloca os valores no formulário chamador

                    if (window.opener && window.opener.document) {
                        var txtLat = window.opener.document.getElementById(get('latTxt'));
                        var txtLon = window.opener.document.getElementById(get('lonTxt'));
                        if (txtLat && txtLon) {
                            txtLat.value = latitudeconvertida.toFixed(8).replace('.',',');
                            txtLon.value = longitudeconvertida.toFixed(8).replace('.',',');
                        }
                    }
                }
            }
            if (consistido == false) {
                EmiteOAlertaGeral();
                LimparCamposCoordenadas();
            }
        }

        '//BOTÃO   <<
        function btnGeoParaGMS_OnClick() {
            var latitude = parseFloat(document.frmConverter.txtLatitudeN.value);
            var longitude = parseFloat(document.frmConverter.txtLongitudeN.value);
            var consistido = false;
            if(!isNaN(latitude) && !isNaN(longitude))"
            {
                if (!EstaForaDoIntervalo(latitude, -90, 90) && !EstaForaDoIntervalo(longitude, -180,180))"
                {
                    consistido = true;
                    var latsinal=1;
                    var lonsinal=1;
                    if (latitude < 0) {latsinal = -1; }
                    if (longitude < 0) {lonsinal = -1; }
                    var latitudeabs = Math.abs(Math.round(latitude * 1000000.));
                    var longitudeabs = Math.abs(Math.round(longitude * 1000000.));
                    
                    document.frmConverter.LatGrau.value = Math.floor(latitudeabs / 1000000);
                    document.frmConverter.LatMin.value = Math.floor(((latitudeabs / 1000000) - Math.floor(latitudeabs / 1000000)) * 60);
                    document.frmConverter.LatSeg.value = (Math.floor(((((latitudeabs / 1000000) - Math.floor(latitudeabs / 1000000)) * 60) - Math.floor(((latitudeabs / 1000000) - Math.floor(latitudeabs / 1000000)) * 60)) * 100000) * 60 / 100000).toFixed(8);

                    document.frmConverter.LonGrau.value = Math.floor(longitudeabs / 1000000);
                    document.frmConverter.LonMin.value = Math.floor(((longitudeabs / 1000000) - Math.floor(longitudeabs / 1000000)) * 60);
                    document.frmConverter.LonSeg.value = (Math.floor(((((longitudeabs / 1000000) - Math.floor(longitudeabs / 1000000)) * 60) - Math.floor(((longitudeabs / 1000000) - Math.floor(longitudeabs / 1000000)) * 60)) * 100000) * 60 / 100000).toFixed(8);

                    document.frmConverter.LatQuad.selectedIndex = 0;
                    if (latsinal == 1)"
                        document.frmConverter.LatQuad.selectedIndex = 1;

                    document.frmConverter.LonQuad.selectedIndex = 0;
                    if (lonsinal == 1)"
                        document.frmConverter.LonQuad.selectedIndex = 1;
                }
            }
            if (consistido == false) {
                '//Limpar Campos Coordenadas
                document.frmConverter.txtLatitudeN.value = "";
                document.frmConverter.txtLongitudeN.value = "";
                var aviso = As coordenadas que você digitou não são válidas\n;
                aviso = aviso + Digite um valor entre -90 e +90 para latitude\n;
                aviso = aviso + e um valor entre -180 e +180 para longitude.\n;
                alert(aviso);
                
            }
        };

        Function CauculaLatitude(graulat, minutolat, seglat, latsinal)"
        {
            var latitude = (graulat + (minutolat / 60.) + (seglat / 3600.)) * latsinal;
            return (latitude);
        }

        Function CauculaLongitude(graulon, minutolon, seglon, lonsinal)"
        {
            var longitude = (graulon + (minutolon / 60.) + (seglon / 3600.)) * lonsinal;
            return (longitude);
        }

        function ConsisteLatGrau() {
            const minimo = 0;
            const maximo = 90;
            var coordenada = Latitude;
            aviso = A  + coordenada +  que você digitou não é válida.\n;
            ehnumerico = !isNaN(parseFloat(document.frmConverter.LatGrau.value));
            if (ehnumerico) {
                valordigitado = parseFloat(document.frmConverter.LatGrau.value);
                ConsisteValores(valordigitado, minimo, maximo, coordenada, aviso);
            }
            if (!ehnumerico && document.frmConverter.LatGrau.value != "") {
                EmiteOAlerta(coordenada, minimo, maximo, aviso);
            }
        }
        
        Function ConsisteLonGrau()"
        {
            const minimo = 0;
            const maximo = 180;
            coordenada = Longitude;
            aviso = A  + coordenada +  que você digitou não é válida.\n;
            ehnumerico = !isNaN(parseFloat(document.frmConverter.LonGrau.value));
            if (ehnumerico)"
            {
                var valordigitado = parseFloat(document.frmConverter.LonGrau.value);
                ConsisteValores(valordigitado, minimo, maximo, coordenada, aviso);
            }
            if (!ehnumerico && document.frmConverter.LonGrau.value != "") {
                EmiteOAlerta(coordenada, minimo, maximo, aviso);
            }
        }

        function ConsisteLatMin() {
            var aviso = "";
            var coordenada = Minuto;
            var ehnumerico = !isNaN(parseFloat(document.frmConverter.LatMin.value));
            if (ehnumerico) {
                var valordigitado = parseFloat(document.frmConverter.LatMin.value);
                ConsisteMinESeg(valordigitado, coordenada);
            }
            if (!ehnumerico && document.frmConverter.LatMin.value != "") {
                EmiteOAlerta(coordenada, 0, 60, aviso);
            }
        }
        '//----------------------------------------------------------------------
        function ConsisteLatSeg() {
            var aviso = "";
            const coordenada = Segundo;
            ehnumerico = !isNaN(parseFloat(document.frmConverter.LatSeg.value));
            if (ehnumerico) {
                valordigitado = parseFloat(document.frmConverter.LatSeg.value);
                ConsisteMinESeg(valordigitado, coordenada);
            }
            if (!ehnumerico && document.frmConverter.LatSeg.value != "") {
                EmiteOAlerta(coordenada, 0, 60, aviso);
            }
        }
        '//----------------------------------------------------------------------
        function ConsisteLonMin() {
            var aviso = "";
            const coordenada = Minuto;
            ehnumerico = !isNaN(parseFloat(document.frmConverter.LonMin.value));
            if (ehnumerico) {
                valordigitado = parseFloat(document.frmConverter.LonMin.value);
                ConsisteMinESeg(valordigitado, coordenada);
            }
            if (!ehnumerico && document.frmConverter.LonMin.value != "") {
                EmiteOAlerta(coordenada, 0, 60, aviso);
            }
        }
        '//------------------------------------------------------------------------
        function ConsisteLonSeg() {
            var aviso = "";
            const coordenada = Segundo;
            var ehnumerico = !isNaN(parseFloat(document.frmConverter.LonSeg.value));
            if (ehnumerico) {
                valordigitado = parseFloat(document.frmConverter.LonSeg.value);
                ConsisteMinESeg(valordigitado,coordenada);
            }
            if (!ehnumerico && document.frmConverter.LonSeg.value != "") {
                EmiteOAlerta(coordenada, 0, 60, aviso);
            }

        }
        '//-------------------------------------------------------------------------
        
        function ConsisteMinESeg(valordigitado,coordenada) {
            minimo = 0;
            maximo = 60;
            aviso = ;
            ConsisteValores(valordigitado, minimo, maximo, coordenada, aviso)"
        }


        Function ConsisteValores(valordigitado, minimo, maximo, coordenada, aviso)"
        {
            estaforadorange = EstaForaDoIntervalo(valordigitado, minimo, maximo);
            if (estaforadorange)"
            {
                EmiteOAlerta(coordenada, minimo, maximo,aviso);
            }
        }

        
       Function EmiteOAlerta(coordenada, minimo, maximo, aviso)"
       {
                if (aviso == "") {
                    avisopadrao = O  + coordenada +  que você digitou não é válido.  \n;
                    aviso = avisopadrao;
                }
                agrad = Por favor digite um valor entre [ + minimo + , + maximo + ].;
                alert(aviso.concat(agrad));
        }

       Function EmiteOAlertaGeral()"
       {
           aviso = As coordenadas que você digitou não são válidas\n;
           aviso = aviso + "Digite um valor entre -90 e +90 para latitude\n;"
           aviso = aviso + "um valor entre -180 e +180 para longitude\n;"
           aviso = aviso + "e valores entre 0 e 60 para minutos e segundos\n;"
           alert(aviso);

       }
       function EmiteOAlertaSimples() {
           aviso = As coordenadas que você digitou não são válidas\n;
           aviso = aviso + "Digite um valor entre -90 e +90 para latitude\n;"
           aviso = aviso + "e um valor entre -180 e +180 para longitude\n;"
           alert(aviso);
       }

        Function EstaForaDoIntervalo(valor, minimo, maximo)"
            {
            estaforadorange = ((valor < minimo || valor > maximo) ? true : false);
            return estaforadorange;
        }

        Function LimparCamposCoordenadas()"
        {
            document.frmConverter.LatGrau.value = "";
            document.frmConverter.LatMin.value = "";
            document.frmConverter.LatSeg.value = "";
            document.frmConverter.LonGrau.value = "";
            document.frmConverter.LonMin.value = "";
            document.frmConverter.LonSeg.value = "";
        }

'        //Se Hemisfério Ocidental Longitude Negativa
'        //Para longitudes negativas setar hemisfério ocidental
'        //
'        //Mesmo para valores positivos o checkbox será mantido  por default nos Hemisférios Ocidente e Sul
'        //Se o usuario digitar valores positivos e atualizar o checkbox para os hemisférios
'        //Oriente e/ou Norte, o checkbox deve ser atualizado para estas coordenadas e convertido o valor
'        //para estas coordenadas.
'        //
        Function AcertaOCheckBoxDaLatitude(graulat)"
        {
           var sinaldalatitude = 1;
            '//Verify if the ° is negative and corrects the checkbox and the signal
           if (graulat < 0) {
                sinaldalatitude = -1;
                document.frmConverter.rbtnNorteSul[1].checked = true;
            }
            '//Verify if the checkbox is set as south and  corrects the long. signal to negative
           var sulflegado = document.frmConverter.rbtnNorteSul[1].checked;
           if (sulflegado) { sinaldalatitude = -1; };
           return sinaldalatitude;
        }

        

        function AcertaOCheckBoxDaLongitude(graulon) {
            var sinaldalongitude = -1;
            '//Verify if ° is negative
            if (graulon < 0) {
                sinaldalongitude = -1;
            }
            return sinaldalongitude;
        }

        

        function MostraTabUTMtoGeo()      {
            document.getElementById('tbUTMtoGeo').style.display = 'block';
            document.getElementById('tbGMStoGeo').style.display = 'none';
        }
        function MostraTabGMSparaGeo()     {
            document.getElementById('tbGMStoGeo').style.display = 'block';
            document.getElementById('tbUTMtoGeo').style.display = 'none';
        }

        

            '//    -->"
 

Excel Facts

Test for Multiple Conditions in IF?
Use AND(test, test, test, test) or OR(test, test, test, ...) as the logical_test argument of IF.
Actually, there's no need for VBA since Excel has available the function RADIANS for converting degrees to radians. For example . . .

Excel Formula:
=RADIANS(30)

The same function can be used in VBA . . .

VBA Code:
Sub test()

    Dim deg As Double
    deg = 30#

    Dim rad As Double
    rad = Application.Radians(deg)
  
    MsgBox rad, vbInformation
  
End Sub

Hope this helps!
 
Upvote 0

Forum statistics

Threads
1,223,884
Messages
6,175,175
Members
452,615
Latest member
bogeys2birdies

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top