|
>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を実行させるタイミングを工夫すれば、
二つのフォームでも共有できると思いますよ!!
試してみてください。
|
|