2017-05-09 1 views
2

VBA에 Excel 매크로가 있습니다. 어제 모두 괜찮 았는데, 오늘 아침 VBA는 소수점을 취하고 점을 쉼표로 바꾸고 있습니다. 그것은 5.1에서 5,1입니다. 나는 독일 시스템을 사용하고 있으며, 포인트가 소수점이고 쉼표가 수천이라는 고급 옵션을 Excels에 설정했습니다.VBA가 자동으로 쉼표로 10 진수로 변경됩니다.

예 I는 3.75

엑셀 시트 입력에서 엑셀 시트 세트 일일 스크럼 회의 값 가지고 screenshot

I과 같은 값을 판독하는 기능을 사용
:

Sub TestFunction() 
    MsgBox (Sheets("Input_Parameters").Cells(25, 2)) 
End Sub 

값은 쉼표로 표시됩니다.

VBA 기능 출력 :
output

는이 문제를 해결하기 위해 VBA 환경의 설정이 있습니까 또는 거기에 내가 놓친 거지 무언가이다. 매크로의 모든 백업이 동일한 영향을 미치기 때문에 오늘 버전의 코드에서 변경된 사항이 아님을 알았습니다.

도움 주셔서 감사합니다.

+0

"* VBA는 소수점을 가져 와서 점을 쉼표로 변경하고 있습니다. *"무엇을 의미합니까? VBA에서는 독일어 시스템에서도 십진수'a = 5.3' 만 사용할 수 있습니다. 코드를 보여줄 수 있습니까? (질문을 편집하고 추가하십시오)? –

+0

이것이 이상한 문제라는 것을 알고 있습니다. 셀을 호출 할 때 여러 줄에서 발생합니다. 예를 들어 SpNum = (Sheets ("Input_Parameters"). 셀 (TargVerFirstRow + i, 4)) 은 Excel 셀에서 29.29이지만 vba 코드에서는 29,2857을 얻습니다 .... – Dave

+0

제발 ' 주석을 사용하여 코드를 추가하려면 [편집] 버튼을 사용하여 질문을 편집하십시오.전체 예제 *를 추가하고 코드가 실제로하는 일과 기대하는 바를 설명하십시오. 아무런 설명도없이 하나의 숨겨진 코드 줄을 게시하면 아무도 도움을받을 수 없습니다. 또한 설명하는 데 도움이되는 경우 잘못된 장면을 표시하는 스크린 샷을 추가하십시오. 귀하의 질문은 매우 불분명합니다. –

답변

3

독일어 기본 로캘 Windows 설정 (소수점 구분 기호로 쉼표 및 Windows 설정에서 천 단위 구분 기호로 사용)을 사용하는 독일어 시스템에서는 정상적인 동작입니다.

MsgBox .Cells(25, 2).Value 

은 Windows 로캘 기본값의 형식으로 값을 반환합니다.

Excel 옵션에서 설정 한 Application.DecimalSeparator은 메시지 상자에 표시되는 내용이 아니라 셀에 표시되는 내용에 영향을줍니다.

따라서 당신은 셀에 같은 형식의 텍스트로 값을 반환

MsgBox .Cells(25, 2).Text 

를 사용할 수 있습니다.

Public Function change_commas(ByVal myValue As Variant) As String 

    Dim str_temp As String 

    str_temp = CStr(myValue) 
    change_commas = Replace(str_temp, ",", ".") 

End Function 

: 내가 독일에 온 후이 하나, 내가 만든 첫 번째 기능

MsgBox Replace(.Cells(25, 2).Value, ",", ".") 
+0

이것은 실제로 문제였습니다. 값을 쉼표로 변환 한 문자열로 푸시합니다. 결국 값은 write이지만 쉼표는 점이어야합니다. 감사 – Dave

1

하나 :


다른 해결 방법은 replace() 기능 쉼표를 대체하는 것입니다 지난 2 년 이래로 모든 VBA 프로젝트에 존재합니다. 함수 이름과 변수를 작성하는 방식이 바뀌었지만이 기능은 그대로 유지되었습니다.