私は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からのデータ検証
検証リストのオプションがワークシートに保存されていないためにエラーが発生すると推測していましたが、プログラムメモリに保存されているため、プログラムを閉じるとメモリが失われます。
私の推測が正しければ、この問題を解決する方法はありますか?検証リストのすべてのデータを含む別のワークシートを作成し、セル検証リストでそれらを参照できるようにすることを考えていましたが、同じワークシートにそれらを保存するためのより良い方法はありますか?