2

私はvbaでのプログラミングにかなり慣れていません。解決策をグーグルで試した後、解決策を見つけることができないコーディングの助けが必要です。

現在、カテゴリマッピングと呼ばれる自己定義型があります。タイプは、私がvadliationリストのオプションとして入れたいアイテムを含むために使用されます。それは以下のように見えました:

Public Type categoryMapping
    messageKey As Long
    description As String
End Type

categoryMappingの例は、性別コードを格納することです。6000は男性を表し、6001は女性を表します。

検証リストの表示私はすべてそれらを配列に格納しているので、それらを表示するのは簡単ではありません。私がしたことは以下の通りです:

'Validation drop down list for the whole row
If Has_Elements(mapping) Then
    Dim code As String
    Dim options() As categoryMapping

    code = ""
    options = mapping

    Dim j As Integer
    For j = LBound(options) To UBound(options)
        code = code & options(j).messageKey & ": " & options(j).description & ","
    Next j

    With Range(Rows(7).Address).Validation    'TODO: Need to refactor
        .Add Type:=xlValidateList, _
        AlertStyle:=xlValidAlertStop, _
        Operator:=xlBetween, _
        Formula1:=code
        .InCellDropdown = True
        .InputMessage = "Please choose from of the following"
        .ShowInput = True
    End With
End If

表示するすべてのアイテムをすでに配列に入れているので、表示しやすいですか?配列を直接呼び出すことはできますか?

セルの使用上記のコードから、検証リストを含めるために行全体のアドレスを使用していることがわかります。これは、検証リストを含めるためのヘッダーセルを除いて、実際に必要なのは行全体であるためです。

With Cells(7,1).Validation    'TODO: Need to refactor
    .Add Type:=xlValidateList, _
    AlertStyle:=xlValidAlertStop, _
    Operator:=xlBetween, _
    Formula1:=code
    .InCellDropdown = True
    .InputMessage = "Please choose from of the following"
    .ShowInput = True
End With

上記のコードを使用して実行しようとしましたが、失敗します。それを行う方法はありますか?

複数の検証を組み合わせる削除

上記の問題のため、以下に示すように、一部の列の検証リストを削除するコードを入力する必要があります。

'Delete the unneccessary validation
'TODO: refactor the code so that write in 1 line
Range(Columns(1).Address).Validation.Delete
Range(Columns(2).Address).Validation.Delete
Range(Columns(3).Address).Validation.Delete
Range(Columns(4).Address).Validation.Delete

すべての削除検証を1つのステートメントに組み合わせる方法はありますか?

オプションの一部を表示する

上からわかるように、ユーザーが検証リストからオプションを選択すると、文字列全体が表示されます。

たとえば、オプションとして「6000:男性」と「6001:女性」があり、男性を選択した場合、「6000:男性」の代わりに「6000」を表示したいと思います。それを行う方法はありますか?

再度開いた後、検証データが存在しません

検証リストを生成した後、プログラムを閉じて再度開くと、「Excelが「ファイル名.xls」に読み取り不可能なコンテンツを見つけました。このブックのコンテンツを復元しますか?ソースを信頼する場合」というエラーが表示されます。このワークブックの[はい]をクリックします。

[はい]をクリックすると、Excelが開きますが、検証リストはすべて表示されなくなります。そして、私はエラーメッセージとして以下を受け取りました。

--error064240_01.xmlファイル'file_name'でエラーが検出されました-削除された機能:/xl/worksheets/sheet2.xml.partからのデータ検証

検証リストのオプションがワークシートに保存されていないためにエラーが発生すると推測していましたが、プログラムメモリに保存されているため、プログラムを閉じるとメモリが失われます。

私の推測が正しければ、この問題を解決する方法はありますか?検証リストのすべてのデータを含む別のワークシートを作成し、セル検証リストでそれらを参照できるようにすることを考えていましたが、同じワークシートにそれらを保存するためのより良い方法はありますか?

4

1 に答える 1

1

読み取り不能なコンテンツは、検証リストをメモリ内の配列に格納しているためです。ワークシートを閉じるとすぐに、その配列はスコープ外になり、存在しなくなります。リストを配列に格納するのではなく、リストをワークシートのどこかに書き込みます。通常、リストと呼ばれる新しいシートを作成します。

セルの実際の検証ではVBAは使用されません。動的な名前付き範囲を作成するだけです(offset()とcounta()を使用して、リストシートの関連する列から検証リストにデータを入力します。次に、VBAコードを使用して、上の配列をその列に書き込みます。(http://chandoo。 org / wp / 2010/09/13 / dynamic-data-validation-excel /

検証とドロップダウンで異なるテキストを表示する限り、それは価値があるよりも多くの問題のように聞こえます。セルのサイズを変更して、最初の4桁だけが表示されるようにすることはできますか?

于 2012-07-13T08:00:16.523 に答える