更改系统使用vbs的区域/位置设置

问题描述:

我想知道如果也许有人可以协助我的查询。更改系统使用vbs的区域/位置设置

每周一次我从我的美国同行那里得到一个文件,我需要在本地保存到我的机器,并更改文件的格式。之后,我创建了一个可执行SaveAs例程并保存的VBScript,但为了在美国保留日期格式,我必须在控制面板中将我的区域设置更改为US,然后才能更改为默认本地设置。

我一直在研究这个问题,并从微软网站得到了一些想法,它展示了如何使用Set Locale和Get locale,但是我的代码似乎并没有改变任何东西,即使它没有错误地执行。

有人可以给我一些指点...

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将日期的格式从mm/dd更改为dd/mm。 现在,谢谢你,我可以运行一个vbs来保存文件,但我希望能够将系统区域更改纳入其中。否则使用VBS来保存xls是没有用的。 – Saf

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."