ファイル名:受注票→ユーザーフォーム1にコンボボックス1があります。
ファイル名:請求、シート名:請求先→コンボボックスに反映したいデータ元(C2からその下)があります。
ブック名が別々な為、ファイル名:受注票のユーザーフォーム1にあるコンボボックス1に別ファイルの請求先データをもってくることができません。具体的にどう訂正すればいいのか教えて頂きたいです。よろしくお願いします。
***********************************************************
Private Sub ComboBox1_Change() ←問題はこの部分です。
Dim wb As Workbook
Dim sh As Worksheet
Dim LastRow As Long
With Workbooks.Open("C:\Users\XXXXXX\Desktop¥"請求先") '←ブック名:請求先のフルパスを指定
wb = Workbooks("請求")
sh = Worksheets("請求先")
LastRow = sh("請求先").Cells(Rows.Count, "C").End(xlUp).Row
ComboBox1.RowSource = "請求先!C2:C" & LastRow
End Sub
*************************************************************
Private Sub CommandButton1_Click()
'入力必須項目が未入力なら終了(登録しない)
'If TextBox1.Text = "" Then
'MsgBox "受注管理番号を入力してください。", vbInformation, "確認"
'Exit Sub
'End If
Range("B4").Value = TextBox3.Value
Range("B5").Value = TextBox4.Value
Range("B6").Value = TextBox5.Value
Range("B7").Value = TextBox6.Value
Range("B8").Value = TextBox7.Value
Range("B9").Value = TextBox8.Value
Range("B10").Value = TextBox9.Value
Range("B11").Value = TextBox10.Value
Range("B12").Value = TextBox11.Value
Range("B13").Value = TextBox12.Value
Range("B14").Value = TextBox13.Value
Range("B15").Value = TextBox14.Value
Range("B16").Value = TextBox15.Value
Range("B17").Value = TextBox16.Value
Range("B18").Value = TextBox17.Value
Range("B19").Value = TextBox18.Value
Range("B20").Value = TextBox19.Value
End Sub
Private Sub CommandButton4_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
'初期化処理
Worksheets("受注IMP").Activate
End Sub
No.6ベストアンサー
- 回答日時:
>①リストからのみ入力可能のところを、直接入力+リストからのみ選択を組み合わせてしまうとやはりまずいでしょうか?
使い方に依ると思いますので何とも言えないと思いますが
この場合、ComboBox1_Changeイベントでの書き込みはやめた方が良いかと思います(Changeイベントは1文字入力の度、発生するので)
方法は複数ありますが、AfterUpdateイベントなどでどうでしょう
Private Sub ComboBox1_AfterUpdate()
Worksheets("受注IMP").Range("B1").Value = ComboBox1.Text
End Sub
挙動については実験で試してください
>直接入力+リストから(ComboBox1内では難しいです)
これは分けて行うのが良いと思います
②直接入力 OR リストからならば可能と思いますが、
直接入力に対して入力制限や入力値の整合性などチェックが必要になると思います
② .Style = fmStyleDropDownList は UserForm_Initializeで設定していますのでデフォルトにすれば良いです(つまり、当該1行削除して実行しない)
デザインモード(VBEのプロパティウィンドウ)で設定した場合は実行時
.Style = fmStyleDropDownCombo で設定します
---①
ユーザーフォームの作成は、運用者が入力し易く出来れば直感的な操作で完結できるのが良いと思います
それには、入力の順序、入力値の制限や入力値の整合性チェックなども必要になると思います
コントロールオブジェクトが持つイベントも色々ありますので調べて検討するようにしてください
いずれに致しましてもやり方も色々あります
ComboBox1に値を登録するだけでもすでに示しているだけでも3パターン
回答を得ても自身で内容を確認、必要に応じて検索などをして理解していく事が、後に改修や問題が発生した時、困らない為にも重要になると思います
お手数おかけしました。始めたばかりで本やネットで調べても分からないことが多々ありますが、勉強して頑張りたいと思います。本当にありがとうございました。
No.5
- 回答日時:
>やはりデータ保存にはCSVのほうが重くないのでしょうか?
そうですね、他にも理由としてカラムを考えれば他の会計ソフト、クラウドソフト、運送ソフトなどとのやり取りでcsv形式のデータなら何とか対応しているケースが多いからですね
もちろん、csv入出力では、特にExcelを介して行う場合、制限、仕様など注意は必須となります
>教えて頂いたComboBox1で選んだデータをシートに転記するにはどのようにしたらよいですか?
ComboBox1で選んだデータを限定する方が良いと思います
選択データのみを扱うようにすれば、ComboBox1_Changeイベントで書き込んでも問題なさそうですね(シートイベントなどを使っていない場合)
Private Sub ComboBox1_Change()
Worksheets("受注IMP").Range("B1").Value = ComboBox1.Text
End Sub
ComboBox1の値を選んだ時に書き込む事については是非があると思いますが
実行ボタンを押下した時の処理を少なくして 体感的な処理時間短縮になると思います(実際には選んだ値でデータを読み込むとかそれなりの処理がある場合ですね)
#3に書きました Initialize ComboBox1の設定を少し書き直して
RowSource = を
配列としてリストに登録
.List() = sh.Range("C2:C" & LastRow).Value
リストからのみ入力可能
.Style = fmStyleDropDownList
Private Sub UserForm_Initialize()
Dim wb As Workbook
Dim sh As Worksheet
Dim LastRow As Long
Const TargetBook As String = "請求先.xlsx"
Dim myDesktop As String
Dim wsh As Object
Set wsh = CreateObject("Wscript.Shell")
myDesktop = wsh.SpecialFolders("Desktop")
Set wsh = Nothing
'←ブック名:請求先のフルパスを指定
Set wb = Workbooks.Open(myDesktop & "\" & TargetBook)
Set sh = wb.Worksheets("請求先")
LastRow = sh.Cells(sh.Rows.Count, "C").End(xlUp).Row
With ComboBox1
.List() = sh.Range("C2:C" & LastRow).Value
.Style = fmStyleDropDownList
End With
wb.Close False
'初期化処理
Worksheets("受注IMP").Activate
End Sub
No.4
- 回答日時:
#3の続きです(長文で申し訳ない)
#3の様にしても、まだ問題があると思うのはUserFormをloadする時に
(他の作業などを行い繰り返しUserFormを使う場合や複数のUserFormを使う)Workbooks.Openを実行する事と"請求先.xlsx"が既に開いている時と開いていない時の処理を分ける必要がある事(RowSource設定の為)
などなどから
VBAブックを開く時にあらかじめ必要なデータを
ブック内のデータ用のシート(複数でも良い)に抽出して活用する
外部データはcsvファイルなどにして入出力が比較的簡単に出来るようにする
と良いのでは無いかと思います
例 ブックを開く時にデータをシートに書き込む(csv)
Private Sub Workbook_Open()
Dim File_FllPath As String
Dim ws As Worksheet
Dim wsh As Object
Set wsh = CreateObject("Wscript.Shell")
File_FllPath = wsh.SpecialFolders("Desktop") & "\請求先.csv"
Set wsh = Nothing
Set ws = Worksheets("請求先Data") 'ブック内に予めあるシート
Call in_csvQuery(File_FllPath, ws)
End Sub
'複数のcsvファイルデータを抽出するかもなのでメインを分けました
Private Sub in_csvQuery(File_FllPath As String, ws As Worksheet)
'csvデータを取り込むシート ws
Dim qt As QueryTable
On Error Resume Next
ws.Cells.Clear
Set qt = ws.QueryTables.Add(Connection:="TEXT;" & File_FllPath, Destination:=ws.Range("A1"))
With qt
.TextFilePlatform = 932 'Shift-JIS 'UTF-8 65001
.TextFileParseType = xlDelimited ' 区切り文字の形式
.TextFileCommaDelimiter = True ' カンマ区切り
.RefreshStyle = xlOverwriteCells ' セルに上書き
.Refresh
.Delete
End With
Set qt = Nothing
End Sub
ブック内のデータシートを基に処理を行い
結果を必要に応じてデータシートに書き込み、合わせて外部csvデータを更新する(追加・上書きなど出力)
ブックを閉じる時にブック内データはClearする(軽くする)
この様な処理手順にした方が組み立てやすいと思います
ただし、外部データにcsvファイルを使い、始めにデータを取り込むため
複数人での作業の場合に問題が生じる可能性があります
実際に請求などの基幹業務をExcelVBAで作るのは、消込や連携を考えるとハードルが高いです さらに今後コンプライアンスの関係もあり専用ソフトなどを活用された方が無難と思います
余計な事まで書いてしまいましたが 参考程度で
No.3
- 回答日時:
こんばんは
>Private Sub ComboBox1_Change() ←問題はこの部分です。
コードについては省略記載されているのかも知れませんが、複数の問題があります
ご質問者様自身問題視しているChangeイベントはComboBox1の値が変更された時に発生します(項目選択または文字入力の度に発生)
他のイベントでRowSourceプロパティ を設定しているかAddItemメソッドで値を設定していない場合、初期値が無い為、ComboBox1に何だかの値を入れChangeイベントを発生させる必要があります
この様なプロセスは、通常合理的な処理にならないと思いますので
UserFormをloadする時に(UserForm_Initializeで)処理するのが良いと思います
Private Sub ComboBox1_Change()は使わず
まだ問題がありますが 一例
.xlsxと仮定(適時変更)
Private Sub UserForm_Initialize()
Dim wb As Workbook
Dim sh As Worksheet
Dim LastRow As Long
Const TargetBook As String = "請求先.xlsx"
Dim myDesktop As String
Dim wsh As Object
Set wsh = CreateObject("Wscript.Shell")
myDesktop = wsh.SpecialFolders("Desktop")
Set wsh = Nothing
Dim wid As Workbook
For Each wid In Workbooks
If wid.Name = TargetBook Then Set wb = wid
Next
If wb Is Nothing Then
'←ブック名:請求先のフルパスを指定
Set wb = Workbooks.Open(myDesktop & "\" & TargetBook)
End If
Set sh = wb.Worksheets("請求先")
LastRow = sh.Cells(sh.Rows.Count, "C").End(xlUp).Row
Me.ComboBox1.RowSource = sh.Range("C2:C" & LastRow).Address(0, 0, External:=True)
'初期化処理
Worksheets("受注IMP").Activate
End Sub
対象ブックを閉じて使う場合は、少し面倒ですがRowSourceよりAddItemメソッドを使います
RowSourceの場合、データ取得対象ブックを閉じるとデータを維持できなかったかと
If wb Is Nothing Then 以下を下記の様にします(一例)
If wb Is Nothing Then
'←ブック名:請求先のフルパスを指定
Set wb = Workbooks.Open(myDesktop & "\" & TargetBook)
End If
Set sh = wb.Worksheets("請求先")
LastRow = sh.Cells(sh.Rows.Count, "C").End(xlUp).Row
Dim c As Range
For Each c In sh.Range("C2:C" & LastRow)
With Me.ComboBox1
.AddItem c.Text
End With
Next
wb.Close False
'初期化処理
Worksheets("受注IMP").Activate
End Sub
AddItemメソッドを使う時は
既に開いている時 Workbooks.Openでインスタンスしない問題は回避できると思いますがそのままです
No.2
- 回答日時:
>With Workbooks.Open("C:\Users\XXXXXX\Desktop¥"請求先") '←ブック名:
・拡張子がない
・Closeをしてないのでイベント発生の度開かない?
・End With がない
・Set ステートメントを使用してない
Dim LastRow As Long
With Workbooks.Open("C:\Users\XXXXXX\Desktop¥"請求先.xlsx") '←ブック名:請求先のフルパスを指定
LastRow = .worksheets("請求先").Cells(Rows.Count, "C").End(xlUp).Row
ComboBox1.RowSource = "[" & .name & "]請求先!C2:C" & LastRow
.close
end with
とか?
拡張子は適宜修正で。
No.1
- 回答日時:
ComboBox1.RowSource = "請求先!C2:C" & LastRow を
ComboBox1.RowSource = "[受注票.xlsx]請求先!C2:C" & LastRow
にしてはどうでしょうか。
(ファイル:受注票の拡張子がxlsxでない場合は、実際の拡張子に合わせてください)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Visual Basic(VBA) VBA。複数のChangeイベントをまとめる方法 2 2022/03/31 12:03
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
【お題】 ・このサンタクロースは偽物だと気付いた理由とは?
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
Excelで質問です。ListBoxの項目を別bookから読込むには
その他(Microsoft Office)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
ユーザーフォームに別シートからデータを反映させたい。
Visual Basic(VBA)
-
5
VBA コンボボックスで選んだ値を取得するには
その他(Microsoft Office)
-
6
VBAコンボボックスで選択した値をシートに転記したい
Visual Basic(VBA)
-
7
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
8
リストボックスの項目に、他のブックのセルの値を設定するには?
Access(アクセス)
-
9
エクセルVBA 別シートからのコンボボックス連動
Visual Basic(VBA)
-
10
【Excel VBA】コンボボックスで選択した値の取得
Excel(エクセル)
-
11
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
12
UserForm1.Showでエラーになります。
工学
-
13
ユーザーフォームのテキストボックスに前回入力した値を表示する Excel
Visual Basic(VBA)
-
14
VBA コンボボックスとテキストボックスを連結させたい
Visual Basic(VBA)
-
15
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
16
別ブックからユーザーフォームを実行したい~!!
Visual Basic(VBA)
-
17
EXCEL VBAのコンボボックスに取り込むリストについて
Excel(エクセル)
-
18
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
19
ユーザーフォーム 3つのコンボボックスの連動について教えてください。
Excel(エクセル)
-
20
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAで同じフォルダ内の...
-
損害賠償
-
私は、ぽよパラ同側いう動画を...
-
原状回復のお金 38万円払えませ...
-
!!至急!!知らない電話にか...
-
40代バツイチ同士で、初めて一...
-
金払いの悪い取引先。最良の集...
-
access レポート 請求書について
-
休耕田(休耕中)の水利費 (賦課...
-
賠償金請求の費用
-
ホテル側のミスで請求もれが・...
-
NTTコミュニケーションズから2...
-
退職した会社から罰金請求がき...
-
個人情報保護法に詳しい方、教...
-
マンションの桜の落ち葉が雨ど...
-
私名義の土地に勝手に花を植え...
-
突然の楽天利用停止措置、何が...
-
通所介護施設での時間短縮
-
アルバイトから迷惑料は取られるか
-
これはなんと読みますか? 「請...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAで同じフォルダ内の...
-
原状回復のお金 38万円払えませ...
-
損害賠償
-
ホテル側のミスで請求もれが・...
-
!!至急!!知らない電話にか...
-
40代バツイチ同士で、初めて一...
-
私名義の土地に勝手に花を植え...
-
私は、ぽよパラ同側いう動画を...
-
まるっと光というインターネッ...
-
除草剤を撒いて、植木が枯れた...
-
駐車場に無断で駐車してしまっ...
-
入社2日目で辞めたいと上司に話...
-
休耕田(休耕中)の水利費 (賦課...
-
ワンクリック詐欺?
-
アダルトサイト請求。怖い。す...
-
突然の楽天利用停止措置、何が...
-
匿名同士で名誉毀損したときの...
-
ラインアカウントについて教え...
-
NTTぷららの請求が、弁護士...
-
Excel VBA ユーザーフォーム1...
おすすめ情報
Qchan1962様、丁寧な説明どうもありがとうございます。希望通りでした。当方は他に3つAddItemを使い顧客情報などをワークシートに転記、保存しております。シートに保存することのみを考えていましたが、CSVファイルのほうが仰る通り入出力、保存するには良いかもしれません。やはりデータ保存にはCSVのほうが重くないのでしょうか?ソフトを買うことも考えてはいましたがそれも叶わず自力でやるしかない状況です。(このVBAを使った作業は当方含め2人しか使用しません)
最後に、シート名”受注票IMP”のB2セルに、教えて頂いたComboBox1で選んだデータをシートに転記するにはどのようにしたらよいですか?CommandButton1を押すと他のTextBoxの値を登録するようにしています。
Qchan1962様、本当にありがとうございます。
もう1つだけお願いしたいです。↓****部分 リストからのみ入力可能のところを、直接入力+リストからのみ選択を組み合わせてしまうとやはりまずいでしょうか?直接入力し、CommandButton1を押しデータ登録後、請求先のユーザーフォームを開いて修正するという流れなんですが…
*****リストからのみ入力可能
*****.Style = fmStyleDropDownList