●質問の主旨
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初心者です。
No.1ベストアンサー
- 回答日時:
>'ComboBox1をクリックしたときの処理
>'ComboBox2をクリックしたときの処理
それぞれ
Worksheets(xx).Select
Worksheets(xx).Select Replace:=False
この箇所のシート選択を削れば良いです。
それによって他のコード箇所に
Range("A1").Value = ...
など、Rangeの親が指定されていない箇所があれば、
それはActivesheetに対するRangeになってしまいますので
Worksheets(xx).Range("A1")...
..というようにWorksheetから指定するようにしてください。
end-u様
昨日に引き続きご回答ありがとうございます。
ご指導の通り、
Worksheets(xx).Select
Worksheets(xx).Select Replace:=False
の部分を削除すると、フォームがWorksheets(1)に
固定された状態でComboBoxを選択できるようになりました。
>Worksheets(xx).Range("A1")...
>..というようにWorksheetから指定するようにしてください。
今後このデータベースはまだいくつか機能を足して
行くつもりなので上記のアドバイスも心がけるようにします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Visual Basic(VBA) Sheet1をフィルターで「りんご」を抽出し、Sheet2へ地域を貼り付ける下記マクロを変更して S 2 2022/12/11 03:01
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
ユーザーフォーム上に現在日時...
-
エクセルVBAのフォームを最...
-
ACCESSでストップウォッチの作成
-
VBAでユーザーフォームを再表示...
-
Form_Load と Form_Activate の...
-
ユーザーフォームのテキストボ...
-
フォームウィンドウを最前面に...
-
ブックをCloseまたはQuitで閉じ...
-
クリックイベントなのに、2回ク...
-
MSGBOXのフォント大きさ変更
-
C#で起動時のフォームを非表示...
-
ACCESSのフォーム、開くんです...
-
フォームの位置を取得したい
-
ユーザーフォームのラベルに時...
-
VB.NET/PictureBoxのサイズ
-
Excel VBAで別のブックからユ...
-
VBE ユーザーフォーム重複・空...
-
フォームを画面の下側ぴったり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
クリックイベントなのに、2回ク...
-
ExcelVBAのユーザーフォームの...
-
ユーザーフォームのテキストボ...
-
Microsoft Formsの「個人情報や...
-
ユーザーフォーム上に現在日時...
-
Form_Load と Form_Activate の...
-
モーダルフォームとモードレス...
-
Excelにて、ユーザーフォームで...
-
VBAでユーザーフォームを再表示...
-
【VBAユーザーフォームで閉じる...
-
MSGBOXのフォント大きさ変更
-
VBA(エクセル)のユーザー...
-
Hideについて(.NET)
-
エクセルVBAのフォームを最...
-
コントロールの存在確認
-
ACCESSのフォーム、開くんです...
-
'ユーザーフォーム右上隅の[×...
-
フォームウィンドウを最前面に...
-
ユーザーフォームのラベルに時...
おすすめ情報