プロが教えるわが家の防犯対策術!

●質問の主旨

WorkSheet(1)(「柴田8月分」)にユーザーフォームを固定的に
表示させつつ、WorkSheet(1)以降のWorkSheet(2)、
WorkSheet(3)、WorkSheet(4)の表を参照しながら
ComboBox1、ComboBox2、ComboBox3にリストを
選択して、データベースに入力したいと考えています。

以下のコードをどのように書き換えれば良いでしょうか?
ご教示のほどよろしくお願い申し上げます。

●質問の補足

現在のコードでは、ComboBox1、ComboBox2、ComboBox3を
それぞれ選択しているとユーザーフォームがそれぞれ
WorkSheet(2)、WorkSheet(1)(顧客リスト)、WorkSheet(3)(社員名)、
WorkSheet(4)(大分類)にとんでしまいます。
転記入力が終了すると、また手作業でWorkSheet(1)に戻らなければなりません。
その手作業を回避したいと考えています。

なお添付画像はComboBox1の選択前なのでWorkSheet(1)
に留まってくれています。

●コード
Option Explicit

'ユーザーフォームの初期化
Private Sub UserForm_Initialize()

Dim r As Range
Dim n As Range
Dim d As Range

With Worksheets(2)

Set r = .Range("C3", .Cells(.Rows.Count, 2).End(xlUp))

End With

With Me.ComboBox1
.ColumnCount = 2
.ColumnWidths = ";0"
.List = r.Value
End With

With Worksheets(3)

Set n = .Range("C3", .Cells(.Rows.Count, 2).End(xlUp))

End With

With Me.ComboBox2
.ColumnCount = 2
.ColumnWidths = ";0"
.List = n.Value
End With

With Worksheets(4)

Set d = .Range("C3", .Cells(.Rows.Count, 2).End(xlUp))

End With

With Me.ComboBox3
.ColumnCount = 2
.ColumnWidths = ";0"
.List = d.Value
End With

Set r = Nothing
Set n = Nothing
Set d = Nothing

TextBox3.Value = Worksheets(1).Range("A2").Value + 1
txtdate = Date
OptionButton1.Value = True

End Sub

'ComboBox1をクリックしたときの処理
Private Sub ComboBox1_Click()

Worksheets(2).Select
With Me.ComboBox1
Me.Label19.Caption = .List(.ListIndex, 1)
Worksheets(2).Select Replace:=False

End With

End Sub

'ComboBox2をクリックしたときの処理
Private Sub ComboBox2_Click()

Worksheets(3).Select
With Me.ComboBox2
Me.Label20.Caption = .List(.ListIndex, 1)
Worksheets(3).Select Replace:=False

End With

End Sub

'フォームからデータベースへの転記
Private Sub CommandButton3_Click()

Dim Rowpos As Long
Dim ColPos As Long

Rowpos = Worksheets("柴田8月分").Range("a10000").End(xlUp).Row
ColPos = 1

Rowpos = Rowpos + 1

With Worksheets("柴田8月分")

.Cells(Rowpos, ColPos) = TextBox3.Value
.Cells(Rowpos, ColPos + 1) = txtdate.Value
.Cells(Rowpos, ColPos + 2) = Label19.Caption
.Cells(Rowpos, ColPos + 3) = ComboBox1.Text
.Cells(Rowpos, ColPos + 4) = ComboBox2.Text
.Cells(Rowpos, ColPos + 5) = Label20.Caption
.Cells(Rowpos, ColPos + 6) = ComboBox3.Text

End With

'Noの加算
Dim i As Long


For i = 1 To 1 Step 1
TextBox3.Value = TextBox3.Value + 1

Next

Call Clearcmb

End Sub

'データベース入力後にコンボボックスを空欄にする
Private Sub Clearcmb()

ComboBox1.Text = ""
ComboBox2.Text = ""
ComboBox3.Text = ""


End Sub

'ユーザーフォームの終了
Private Sub CommandButton5_Click()

Unload UserForm1
End

End Sub

以上よろしくお願い申し上げます。使用機種はWindowsVistaで、
Excel2007です。私はVBA初心者です。

「ユーザーフォームをWorkSheet(1」の質問画像

A 回答 (1件)

>'ComboBox1をクリックしたときの処理


>'ComboBox2をクリックしたときの処理
それぞれ
Worksheets(xx).Select
Worksheets(xx).Select Replace:=False
この箇所のシート選択を削れば良いです。

それによって他のコード箇所に
Range("A1").Value = ...
など、Rangeの親が指定されていない箇所があれば、
それはActivesheetに対するRangeになってしまいますので
Worksheets(xx).Range("A1")...
..というようにWorksheetから指定するようにしてください。
    • good
    • 0
この回答へのお礼

end-u様

昨日に引き続きご回答ありがとうございます。
ご指導の通り、

Worksheets(xx).Select
Worksheets(xx).Select Replace:=False

の部分を削除すると、フォームがWorksheets(1)に
固定された状態でComboBoxを選択できるようになりました。

>Worksheets(xx).Range("A1")...
>..というようにWorksheetから指定するようにしてください。

今後このデータベースはまだいくつか機能を足して
行くつもりなので上記のアドバイスも心がけるようにします。

お礼日時:2011/06/30 17:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!