VBA를 사용하여 컴퓨터에서 사용 중인 십진수 기호 탐지
VBA를 사용하여 컴퓨터에서 사용 중인 십진수를 감지할 수 있습니까?
엑셀 시트에 조건부 서식을 추가하는 매크로 스크립트가 있습니다.문제는 대상 시스템이 두 개의 소수점 기호를 모두 사용할 수 있다는 것입니다.그래서 저는 스크립트가 모든 컴퓨터에 적용되도록 하고 싶습니다.
코드는 다음과 같습니다.
With range("D" & row)
.FormatConditions.Delete
.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotBetween, Formula1:="=1,01*$C$" & row, Formula2:="=0,99*$C$" & row
.FormatConditions(1).Font.ColorIndex = 3
End With
위의 답변과 관련하여 중요한 것은Application.DecimalSeparator
그리고.Application.International(xlDecimalSeparator)
동일한 방식으로 행동하지 마십시오.
Application.DecimalSeparator
(Windows 국가별 설정에서) 시스템 구분 기호를 사용하라는 Excel 옵션에서 선택한 십진수 구분 기호를 항상 출력합니다.Application.International(xlDecimalSeparator)
Windows 설정에서 가져온 것인지 여부에 관계없이 Excel에서 사용하는 실제 소수점 구분 기호는 무엇이든 출력합니다.Application.UseSystemSeparators = True
) 또는 Excel 옵션에서(경우)Application.UseSystemSeparators = False
)
따라서 항상 사용할 것을 강력히 권장합니다.Application.International(xlDecimalSeparator)
.
저는 사실 몰랐습니다.Formula
죄를 짓는FormatConditions
현지화된 수식을 사용합니다.다른 장소에서는 선택할 수 있습니다.Formula
그리고.FormulaLocal
.
참고:
이 부분은 틀릴 정도로 지나치게 단순화된 것으로 드러났습니다.방법은 다른 답변(정말 받아들여졌어야 함)을 참조하십시오.Application.DecimalSeparator
그리고.Application.International(xlDecimalSeparator)
사실대로 행동합니다.
질문에 간단히 대답하려면 다음을 사용할 수 있습니다.Application.International(xlDecimalSeparator)
아니면 간단히Application.DecimalSeparator
구분 기호를 알아야 합니다.
그러나 단순하지 않은 공식의 경우 불변 영어 로케일 기반 공식을 할당하는 것이 더 쉬울 수 있습니다.Formula
숨겨진 셀의 속성을 읽은 다음FormulaLocal
그 감방에서 그리고 그것을 사용합니다.FormatConditions
모든 변환은 Excel이 수행합니다.
엑셀이 아닌 다른 어플리케이션의 경우, 승인된 답변의 솔루션을 사용할 수 없습니다.
대신 다음을 사용할 수 있습니다.Format
소수 구분 기호를 검색하려면: 탈출하지 않은 점:Format
현재 소수점 구분 기호로 대체됩니다.
DecimalSeparator = Format(0, ".")
레지스트리에서 십진수 구분 기호를 조회할 수도 있습니다.
DecimalSeparator = CreateObject("WScript.Shell").RegRead("HKCU\Control Panel\International\sDecimal")
소수 구분자 속성을 사용할 수 있습니다.
Application.DecimalSeparator
그런 다음 Excel이 실행되는 로케일에 의해 정의된 소수 구분 기호를 반환합니다.
참고 사항:가능하더라도 이를 변경하지 말고 필요에 따라 활용하는 것이 좋습니다.
여기 엑셀 답변과 에릭 A의 멋진 레지스트리 트릭을 혼합한 2센트입니다. 하지만 저는 워드/아웃룩을 자동화하는 데 많이 사용하기 때문에 이 게임에 워드를 포함시키고 싶습니다.
Function CorrectDecimalSeparator() As String
Dim auxCorrectListSeparator As String
If WordIsOpen Then
CorrectDecimalSeparator= Word.Application.International(wdListSeparator)
ElseIf ExcelIsOpen Then
CorrectDecimalSeparator= Excel.Application.International(xlListSeparator)
Else
auxCorrectListSeparator = CreateObject("WScript.Shell").RegRead("HKCU\Control Panel\International\sDecimal")
End If
End Function
Function WordIsOpen() As Boolean
Dim oWord As Object
On Error Resume Next
Set oWord = GetObject(, "Word.Application")
On Error GoTo 0
WordIsOpen = Not oWord Is Nothing
Set oWord = Nothing
End Function
Function ExcelIsOpen() As Boolean
Dim oExcel As Object
On Error Resume Next
Set oExcel = GetObject(, "Excel.Application")
On Error GoTo 0
ExcelIsOpen = Not oExcel Is Nothing
Set oExcel = Nothing
End Function
계산에서 파생된 알려진 숫자를 알려진 문자열로 변환한 다음 구분 기호를 추출할 수도 있습니다.이 예에서 1/2은 3자 문자열 "0.5" 또는 "0,5"로 평가됩니다.Mid 기능은 문자열의 위치 2에서 1개의 문자를 추출합니다.
Public Function DecimalSeparator() As String
DecimalSeparator = Mid$(1 / 2, 2, 1)
End Function
언급URL : https://stackoverflow.com/questions/20652409/using-vba-to-detect-which-decimal-sign-the-computer-is-using
'programing' 카테고리의 다른 글
loadurl을 호출할 때 Android 웹 보기가 브라우저를 시작합니다. (0) | 2023.06.21 |
---|---|
Firebase Cloud Messaging을 사용하여 장치를 장치 메시지로 보내는 방법은 무엇입니까? (0) | 2023.06.16 |
log(10.0)는 컴파일할 수 있지만 log(0.0)는 정의되지 않은 참조로 컴파일할 수 없습니까? (0) | 2023.06.16 |
DotNetOpen과 함께 PLINTEXT 서명을 사용할 수 없습니다.인증 서비스 공급자 (0) | 2023.06.16 |
Git 및 WordPress(+ 플러그인 및 미디어 관리) (0) | 2023.06.16 |