Excel 매크로, 런타임에 국제적으로 유효한 수식을 삽입합니다.
매크로가 포함된 Excel 스프레드시트를 사용하여 다음과 같은 조건부 형식을 삽입합니다.
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=UND($A3=""" & lastName & """; $B3=""" & firstName & """)"
보시다시피 독일어 수식을 "AND"(즉, "UND")에 사용했는데, 프랑스어 또는 영어 버전의 Excel에서 사용하자마자 이 코드가 작동하지 않습니다.일반적으로 수식은 자동으로 현지화되지만 런타임에 모든 버전에서 작동하는 수식을 삽입하려면 어떻게 해야 합니까?
좋아요, 도와줘서 고마워요. 이걸 풀 수 있게 도와주셨어요.
영어를 그냥 사용하는 것은 정말 불가능합니다.를 들어, 수식을 조작할 때 영어를 사용할 수 있습니다.Range("A1").formula="AND(TRUE)"
그런데, 이 경우에는 안 됩니다FormatConditions
요.
제 해결책은 셀에 으로 공식을 셀을 통해 읽는 입니다.FormulaLocal
다음과 같이 현지화된 수식을 반환합니다.
Function GetLocalizedFormula(formula As String)
' returns the English formula from the parameter in the local format
Dim temporary As String
temporary = Range("A1").formula
Range("A1").formula = formula
Dim result As String
result = Range("A1").FormulaLocal
Range("A1").formula = temporary
GetLocalizedFormula = result
End Function
반환된 공식은 다음에 사용할 수 있습니다.FormatConditions
문서가 나중에 다른 언어 버전의 Excel에서 열리면 다시 현지화되거나 현지화되지 않습니다.
저는 방금 독일 엑셀 포럼에서 그 문제에 대한 아주 우아한 해결책을 찾았습니다.이것은 더미 셀에 쓰지 않고 임시 명명 범위를 사용합니다.원본 아이디어(credit to bst)를 사용하여 양방향 번역 기능을 작성했습니다.
현지화된 수식을 영어 수식으로 변환합니다.
Public Function TranslateFormula_LocalToGeneric(ByVal iFormula As String) As String
Names.Add "temporaryFormula", RefersToLocal:=iFormula
TranslateFormula_LocalToGeneric = Names("temporaryFormula").RefersTo
Names("temporaryFormula").Delete
End Function
영어 수식을 현지화된 수식으로 변환합니다.
Public Function TranslateFormula_GenericToLocal(ByVal iFormula As String) As String
Names.Add "temporaryFormula", RefersTo:=iFormula
TranslateFormula_GenericToLocal = Names("temporaryFormula").RefersToLocal
Names("temporaryFormula").Delete
End Function
이 수식은 항상 현지화된 수식으로 저장되므로 조건부 형식으로 수식을 처리해야 하는 경우 매우 유용합니다(예: 사용하려면 일반 버전이 필요할 수 있음).Application.Evaluate(genericFormula)
을 클릭합니다.
공식을 워크북의 (숨긴) 셀에 저장합니다(의 일반 버전).
그런 다음 워크북을 열면 해당 수식이 사용자에 대해 Excel에 의해 자동으로 번역됩니다.
이제 스크립트에서 이 공식만 해부하면 됩니다(첫 번째 괄호("")를 찾아서 왼쪽을 참고하십시오).
다음과 같이 사용합니다.
strLocalizedFormula = Mid(strYourFormula, 2, InStr(1, strYourFormula, "(") - 2)
여기서, where where에 wherestrYourFormula
워크시트의 공식에서 복사됩니다.
저는 영어 환경만 사용하므로 이것이 작동하기를 바랍니다.
또한 http://vantedbits.blogspot.nl/2010/10/excel-vba-tip-translate-formulas.html을 읽고 VBA의 세포 공식 영문 버전을 사용할 수 있어야 한다고 생각합니다.
이 기능을 사용해 보십시오(영어 버전만 설치되어 있으므로 테스트되지 않음).
국제 버전의 공식은 다음과 같은 방법으로 셀에 기록합니다.Range.Formula
그럼 다시 읽어주세요Range.FormulaLocal
, 그리고 그 문자열을 에 씁니다.FormatConditions
이 스레드가 오래되었고 누군가 우아한 해결책을 찾아냈을 수도 있지만, 시트를 수정하지 않고 조건 포맷을 적용해야 하는 것과 같은 문제가 있었습니다. 임시 셀 내용이나 명명된 범위를 만들어야 했습니다.모든 사용자가 영어 버전의 Excel을 사용하기 때문에 공식에 사용되는 함수는 동일하지만 지역 설정이 다르기 때문에 매개 변수 구분자이기도 합니다. 노르웨이어에서는 ";"가 아닌 ";"로 표시되는데, 이는 유럽의 다른 지역과 매우 유사합니다.
예를 들어, 다음과 같은 기준에 대해 Excel 공식을 사용하여 자동으로 조건부 서식을 생성해야 했습니다.
.FormatConditions.Add xlExpression, Formula1:="=AND(ISNUMBER(B" & I & "),B" & I & ">=" & Ul1 & ")"
여기서 "Ul1"은 이전 단계에서 정의된 값이며 솔루션에는 중요하지 않습니다.
하지만 노르웨이어와 영어 설정을 모두 가진 컴퓨터에서 이 작업을 실행할 수 있어야 했습니다.
Andrew Pulsom의 매우 짧고 간단한 해결책을 찾았습니다. https://www.mrexcel.com/board/threads/french-vba-vs-english-vba.729570/.매개 변수 구분 기호를 변수로 만들었습니다.
If Application.International(xlDecimalSeparator) = "," Then
Sep = ";"
Else
Sep = ","
End If
Cl1 = "=AND(ISNUMBER(B" & I & ")" & Sep & "B" & I & "<" & Ul1 & ")"
제게는 마법처럼 작용했습니다:)
이것이 문제의 일부만 해결한다는 것을 알지만, 저는 이것이 지역별 설정으로 English Office 설치를 사용하는 많은 국제 회사들에게 적용될 수 있다고 생각합니다.
감사합니다 여러분!저는 그 게시물이 매우 유용하다고 생각했습니다.
제 솔루션은 다른 솔루션들을 조합한 것입니다. 누군가 유용하다고 생각할 때를 대비해서 덧붙입니다.
Dim tempform As String
Dim strlocalform1 As String
Dim strlocalform2 As String
' Get formula stored in WorksheetA Cell O1 =IFERROR(a,b)
tempform = Worksheets("Sheet").Range("O1").Formula
' Extract from the formula IFERROR statement in local language.
strlocalform1 = Mid(tempform, 2, InStr(1, tempform, "(") - 1)
' Extract from the formula separator , (comma) in local settings.
strlocalform2 = Mid(tempform, InStr(1, tempform, "a") + 1, 1)
' Add formula in local language to desired field.
pvt.CalculatedFields.Add Name:="NewField", Formula:="=" & strlocalform1 & "FORMULA" & strlocalform2 & ")"
도움이 되었으면 좋겠네요!
자세한 내용은 https://bettersolutions.com/csharp/excel-interop/locale-culture.htm 링크를 참조하십시오.
CultureInfo baseCulture = System.Threading.Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo(xlapp.LanguageSettings.LanguageID(Office.MsoAppLanguageID.msoLanguageIDUI));
// do something
System.Threading.Thread.CurrentThread.CurrentCulture = baseCulture;
언급URL : https://stackoverflow.com/questions/13247771/excel-macro-inserting-internationally-valid-formula-during-run-time 입니다.
'programing' 카테고리의 다른 글
Angular 2에서 입력 태그 파일 형식으로 선택한 파일을 재설정하려면 어떻게 해야 합니까? (0) | 2023.04.25 |
---|---|
CGPoint 개체를 NSAray에 쉽게 추가하려면 어떻게 해야 합니까? (0) | 2023.04.25 |
SQL Server에서 마지막 행을 읽는 방법입니다. (0) | 2023.04.25 |
Azure 웹 앱 설정에서 배열을 사용합니다. (0) | 2023.04.25 |
사용자를 화나게 하지 않고 TextBox에 바인딩된 10진수 형식을 지정할 수 있는 방법은 무엇입니까? (0) | 2023.04.25 |