1

いくつかのフォームを使用してデータベース システムを構築しました。フォームには通貨フィールドがありました。私は、Windows と English Access 2007 で米国英語の設定をしています。それが、$x,xxx.yy 形式を取得した理由だと考えました。続けてシステムを完成させました。Format を Currency に設定しただけだったので、実際のフォーマットは別の場所にあると考えました。

データベース フィールドも、単純に通貨に設定されています。

現在、これはスウェーデンのマシンで使用されています。各フォームのすべてのフィールドを編集せずに $x,xxx.yy 形式で通貨を表示しないように、グローバル通貨形式を設定するにはどうすればよいですか?

(つまり、フォーマット: 通貨のままで、データベースに保存され、フィールドに表示される正確な数値が、正しいスウェーデンのフォーマットで表示されるだけです。)

4

2 に答える 2

1

このコードは完全にはテストされていませんが、役に立つかもしれません。試す前に、データベースのバックアップを作成してください。

その意図は、Access が (ひそかに) 格納されているようなハードコードされたFormatプロパティを一般的な値に置き換えることです。$#,##0.00;($#,##0.00)Currency

Sub TweakCurrencyFormats()
Dim cdb As DAO.Database, tbd As DAO.TableDef, fld As DAO.Field
Dim ao As AccessObject, frm As Form, ctl As Control
Set cdb = CurrentDb

Debug.Print "Processing tables..."
For Each tbd In cdb.TableDefs
    For Each fld In tbd.Fields
        If fld.Type = 5 Then  '' Currency
            Debug.Print "[" & tbd.Name & "].[" & fld.Name & "]"
            fld.Properties("Format").Value = "Currency"
            fld.Properties("CurrencyLCID").Value = 1053  '' Swedish
        End If
    Next
    Set fld = Nothing
Next
Set tbd = Nothing

Debug.Print "Processing forms..."
For Each ao In CurrentProject.AllForms
    If Not ao.IsLoaded Then
        DoCmd.OpenForm ao.Name, acDesign
    End If
    Set frm = Application.Forms(ao.Name)
    For Each ctl In frm.Controls
        If ctl.Properties("ControlType").Value = 109 Then  '' text box
            If Left(ctl.Properties("Format").Value, 1) = "$" Then
                Debug.Print "[" & ao.Name & "].[" & ctl.Name & "]"
                ctl.Properties("Format").Value = "Currency"
            End If
        End If
    Next
    Set ctl = Nothing
    Set frm = Nothing
Next
Set ao = Nothing

Set cdb = Nothing
End Sub
于 2013-04-04T10:15:14.890 に答える
0

それは不可能だ。

これはちょっと置いておきます。すべてのフォームを手動で編集する必要がない賢い解決策を提供できる場合は、この代わりにあなたの解決策を喜んで受け入れます. :)

于 2013-04-04T08:42:22.880 に答える