programing

VBA를 사용하여 컴퓨터에서 사용 중인 십진수 기호 탐지

telebox 2023. 6. 16. 21:41
반응형

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

반응형