2017-05-24 13 views
0

私のユーザーフォームには、ユーザーが年、月、日付(従属していない)を選択するための3つの独立したコンボボックスがあります。たとえば、ユーザが2017(年)、5月(月)、23(日)を選択した場合、私のデータベースシートの2列目にvbaを入力します: "2017/05/23"私はそれを値としてこの形式で正確に求めています。日付形式のコンボボックス

以下のコードは機能しません。どんな助けもありがとう。

With ws 
.Cells(lRow, 2).Value = Me.cboYear/Me.cboMonth/Me.cboDay.Value 
End With 
+2

Protip:「動作しない」非常に良いワシントン州ではありませんあなたのコードが何をしているのかを説明する。 "予期しないゴミを生む"より正確になります。一般的に、あなたは "私のコードは動作しません" SOの質問ではなく、代わりにあなたが得ているものを記述する*ガーベッジ出力、ランタイムエラーなど –

+1

あなたは、 '2017/02/29'や' 2017/04/31'を選択できないようにしますか?あなたにこれを提供するカレンダーコントロールを使用したくない特定の理由はありますか? – FreeMan

答えて

3

あなたは年を月で分割し、それを1日で割っています。それはあなたの細胞が得ている価値です。

実際にの日付を作成してください。

.Cells(lRow, 2).Value = DateSerial(cboYear, cboMonth, cboDay) 

そしてNumberFormatを使用して、あなたが望む任意の方法を日付フォーマット:

.Cells(lRow, 2).NumberFormat = "yyyy/MM/dd" 

DateSerialは、整数値を期待しています。あなたのcboMonthが文字列(月の名前)が含まれている場合、あなたはそれのために少し難しい作業する必要がある - 最も簡単なだけでキー付きのコレクションを使用することがおそらくある - .Addコレクションに整数をする際に、文字列のキーを指定します。

Static months As Collection 
If months Is Nothing Then 
    Set months = New Collection 
    With months 
     .Add 1, "January" 
     .Add 2, "February" 
     .Add 3, "March" 
     '... 
     .Add 12, "December" 
    End With   
End If 

そして、あなたは簡単な検索を持っている:

Dim monthId As Integer 
monthId = months(cboMonth) 

だからあなたDateSerialは次のようになります。

.Cells(lRow, 2).Value = DateSerial(cboYear, monthId, cboDay) 
+0

ありがとうございますが、「ランタイムエラー13.タイプミスマッチ」と表示されます。なぜどんなアイデア? – thankseveryone

+0

これらのドロップダウンには何がありますか? 'DateSerial'は整数を期待します。月のドロップダウンに「5月」が含まれている場合は、それを「5」に関連付ける方法が必要です。ドロップダウンリストに2つの列があり、最初は幅が0で、1〜12の値を含み、2番目の列には月名が含まれているとします。選択した整数を取得するには、コンボボックスの「Value」を使用します。それに失敗した場合、鍵付きの 'Collection''May'(文字列キー)を' 5'(整数値)にマッピングすると同様に動作します。 –

+0

はい私は4月、5月、6月などが整数ではなく3月まであります。キー付きコレクションがどのように機能するのか分かりません。あなたがそのコードを示すことができれば、それは非常に役に立ちます。ありがとう – thankseveryone