2015-09-25 2 views
3

Мне было интересно, может ли кто-нибудь помочь с запросом, который у меня есть.Изменить систему Настройки региона/местоположения с помощью vbs

Один раз в неделю я получаю файл от своего американского коллеги, который мне нужно сохранить локально на моем компьютере, и измените формат файла. С тех пор я создал VBScript, который может выполнить процедуру SaveAs и сохранить его, однако, чтобы сохранить форматы даты в США, мне нужно изменить настройки своего региона на US на панели управления до процедуры и после этого, чтобы изменить локальный установка.

Я изучаю это и получил некоторые идеи с сайта Microsoft, в котором показано, как использовать локаль Set Locale и Get, но мой код, похоже, ничего не меняет, даже если он выполняется без ошибок.

Может кто-то пожалуйста, дайте мне некоторые указатели ...

option explicit 
dim currentLocale 
currentLocale = GetLocale() 

SetLocale 1033  ' 1033 is the EN-US locale 

' Revert back to the default system locale 
SetLocale currentLocale 
+0

Если вы не храните форматированные строки вместо фактических значений даты и времени в книге, Excel должен использовать формат, определенный в региональных настройках системы, для * отображения * значения. Фактически это не изменяет способ хранения данных. Почему, по-вашему, вам нужно это делать? –

+0

Если вы посмотрите на доступные предустановленные форматы даты в Excel, вы заметите пару в верхней части, которая имеет звездочку (например, '*') в качестве символа префикса. * «Форматы даты, начинающиеся со звездочки, реагируют на изменения в региональных настройках даты и времени, которые указаны для операционной системы». * – Jeeped

+0

@Ansgar Wiechers В основном, что происходит, я получаю файл от американского аналога, который экспортируется как excel, но фактический файл - html, так как это необходимо для подачи импорта SQL-сервера (снова в США), я должен сделать saveas .xls в файле, а затем импортировать его на SQL-сервер. Сервер ожидает, что даты будут в формате США. Поскольку я базируюсь в Великобритании, excel изменяет формат даты с мм/дд на дд/мм. Теперь, благодаря вам, я могу запустить vbs для сохранения файла, но я надеялся включить в него также изменение области системы. В противном случае использование VBS для saveas xls бесполезно. – Saf

ответ

0
Option Explicit 

'Define a key registry path 
Dim strComputer 
Dim objRegistry 
Dim strKeyPath 
Dim strValueName 
Dim getValue 
Dim regKeyPath 
Dim strLocaleName, strCountry, strshortDateValue, strlongDateValue, strshortTimeValue, strlongTimeValue, strfirstDayOfWeekValue 

Const HKEY_CURRENT_USER = &H80000001 
strComputer = "." 
Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") 
regKeyPath = "Control Panel\International" 

strLocaleName = "en-US" 
strCountry = "United States" 
strshortDateValue = "M/d/yyyy" 
strlongDateValue = "dddd, MMMM d, yyyy" 
strshortTimeValue = "h:mm tt" 
strlongTimeValue = "h:mm:ss tt" 
strfirstDayOfWeekValue = "6" 

objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "LocaleName", strLocaleName 
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sCountry", strCountry 
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sShortDate", strshortDateValue 
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sLongDate", strlongDateValue 
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sShortTime", strshortTimeValue 
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sTimeFormat", strlongTimeValue 
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "iFirstDayOfWeek", strfirstDayOfWeekValue 


WScript.Echo "Successfully changed system regional settings." 

Этот сценарий будет изменить региональные настройки в реестре. Используйте с осторожностью. Это изменится на США, поэтому, если вы намереваетесь использовать этот скрипт, убедитесь, что знаете, какие настройки по умолчанию находятся перед их изменением. Простое изменение настроек на панели управления не будет работать.

Сценарий, указанный ниже, снова изменит все обратно в Великобританию.

Option Explicit 

'Define a key registry path 
Dim strComputer 
Dim objRegistry 
Dim strKeyPath 
Dim strValueName 
Dim getValue 
Dim regKeyPath 
Dim strLocaleName, strCountry, strshortDateValue, strlongDateValue, strshortTimeValue, strlongTimeValue, strfirstDayOfWeekValue 

Const HKEY_CURRENT_USER = &H80000001 
strComputer = "." 
Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") 
regKeyPath = "Control Panel\International" 

strLocaleName = "en-GB" 
strCountry = "United Kingdom" 
strshortDateValue = "dd/MM/yyyy" 
strlongDateValue = "dd MMMM yyyy" 
strshortTimeValue = "HH:mm" 
strlongTimeValue = "HH:mm:ss" 
strfirstDayOfWeekValue = "0" 

objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "LocaleName", strLocaleName 
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sCountry", strCountry 
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sShortDate", strshortDateValue 
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sLongDate", strlongDateValue 
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sShortTime", strshortTimeValue 
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sTimeFormat", strlongTimeValue 
objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "iFirstDayOfWeek", strfirstDayOfWeekValue 


WScript.Echo "Successfully changed system regional settings."