Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


28979 / 76738 ←次へ | 前へ→

【53049】Re:入力フォームから入力した文字をセルに反映させたいのですが
発言  ichinose  - 07/12/12(水) 20:57 -

引用なし
パスワード
   >ichinoseさんへ
>
>自分もエクセル2002です。(10.2614.2625)
>デバック出なかったですか・・・・・・・?自分のはバリバリ出るんですが・・・・・・何が違うんでしょう・・・・・

再度、新規ブックにて試してみてください。

ThisWorkbook.Worksheets(1).Cells(ThisWorkbook.gyou, 1) = TextBox1.Text


「実行時エラー'1004':アプリケーション定義またはオブジェクト定義のエラーです。」
は、

ThisWorkbook.gyouが0の時に発生しそうです。
投稿していないコードがありませんか?


>また、ichinoseさんだったら問題の一行「ThisWorkbook.Worksheets(1).Cells(ThisWorkbook.gyou, 1) = TextBox1.Text」でichinoseさん流にてどう記述なさいますか?

gyouをPublic変数にした理由は

「他のフォームでも必要な変数だからです」

とありますね!!

ということは、gyouという変数の更新を提示されたコード以外でも
行う可能性があると言うことですよね!!

こういう変数の更新をいくつものモジュールやプロシジャーで行っていると
非常にメンテナンスがしにくくなります。
新規に作成する時は、スコープが広いから使いやすそうに錯覚しがちですが・・。

私なら、このgyouという変数の更新は一つのモジュールだけに限定して、
そのモジュール内のプロシジャーを呼び出すようにします。


新規ブックにて、確認してください。

ユーザーフォームを準備して下さい(Userform1)。
このUserform1には、

 テキストボックス(TextBox1) -- 指定シートに書き出す内容

 と

 コマンドボタン(CommandButton1) -- 指定シートにTextbox1の内容を書き出す

のふたつのコントロールを用意してください。

Thisworkbookモジュールに

'==============================================================
Option Explicit
Public Sub Workbook_Open()
   Call open_tbl(Worksheets(1).Range("a1"), 2)
   UserForm1.Show
   Call close_tbl
End Sub


UserForm1のモジュール

'================================================================
Option Explicit
Public Sub CommandButton1_Click()
  Call put_tbl(TextBox1.Text)
End Sub


標準モジュールに
'適当な列をテーブルに見立ててのI/Oパックサブルーチン
'gyou等の変数は、この標準モジュール内でしか更新しない
'================================================================
Private g_stt As Long
Private gyou As Long
Private tbl As Range
'================================================================
Sub open_tbl(u_rng As Range, Optional s_gyou As Long = 1)
'テーブルの初期化処理
  Set tbl = u_rng
  g_stt = s_gyou
  gyou = g_stt
End Sub
'================================================================
Sub put_tbl(txt As Variant)
'テーブルへのデータの順次書き込み
  tbl.Cells(gyou).Value = txt
  gyou = gyou + 1
End Sub
'================================================================
Function get_tbl(idx As Long) As Variant
'テーブルから指定されたインデックスのデータを取り出す
'投稿コードでは使われていませんが、必要になりそうな機能ですよね!!
  If idx >= g_stt And idx < gyou Then
    get_tbl = tbl.Cells(idx).Value
  Else
    get_tbl = CVErr(1004)
    End If
End Function
'================================================================
Sub close_tbl()
'テーブルのクローズ
  Set tbl = Nothing
  g_stt = 0
  gyou = 0
End Sub


これで適当な名前で保存した後、一度当該ブック閉じた後、改めてこのブックを
開いてみてください。

ブックが開かれると、Useform1が表示されます。

テキストボックスに適当な文字を入力後(仮に abc)、コマンドボタンをクリックしてください。
最左端のシートのセルA2にテキストボックスの内容が表示されます。
その次にクリックすれば、A3、その次はA4と順次テキストボックスの内容を
表示するセルは変わっていきます。


上記のコードは、Open_tblとclose_tblを実行させるタイミングを工夫すれば、
二つのフォームでも共有できると思いますよ!!

試してみてください。
0 hits

【53034】入力フォームから入力した文字をセルに反映させたいのですが 初心者A 07/12/12(水) 17:36 質問
【53035】Re:入力フォームから入力した文字をセルに... ハチ 07/12/12(水) 17:49 回答
【53037】Re:入力フォームから入力した文字をセルに... ichinose 07/12/12(水) 18:12 発言
【53043】Re:入力フォームから入力した文字をセルに... 初心者A 07/12/12(水) 18:34 発言
【53046】Re:入力フォームから入力した文字をセルに... Toshi 07/12/12(水) 19:25 発言
【53049】Re:入力フォームから入力した文字をセルに... ichinose 07/12/12(水) 20:57 発言
【53073】Re:入力フォームから入力した文字をセルに... 初心者A 07/12/13(木) 21:49 お礼
【53048】Re:入力フォームから入力した文字をセルに... ハチ 07/12/12(水) 20:48 発言

28979 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free