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

マイクロソフト・エクセル97

sheet1上で作った『ユーザー入力フォーム(VB)』を
sheet2からマクロの実行をしても、ユーザー入力フォームのデータがsheet2のものになっています。

sheet2からマクロを実行しても、きちんとsheet1のデータを反映させた(データ表示)いのですが、方法がわかりません。
  sheets(sheet1).Select

の記述をしてはみたのですが…。
とりあえず上の記述でうまくいくのですが、この方法でセーブし終了すると、『不正な処理をしたために…プログラムを強制的に終了します』が出てしまします。

A 回答 (2件)

提示されたコードにはPrivate、Publicが種々あり、コードがシート1かユーザーフォームか、またはモジュールのどのコードウインドウに書かれたのか不明で、コードも部分的と思えますし、起動方法も分からないのでかなりの部分は想像で書いています。

100%理解できていません。
少しでも進展すればいいですが・・・。試してみて下さい。

●Dim トト結果記録, TBL(1 To 57) As Control
 Dim データ範囲 As Range
      ↓
   2行はコメント行にする。
   標準モジュールに(を追加し)、以下を追加。この57個のコントロールの意味は分かりません。
     Public トト結果記録, TBL(1 To 57) As Control
     Public データ範囲 As Range
     Public ws1 As WorkSheet

●Private Sub UserForm_Initialize()
   Comboチーム011.AddItem "-------J1"
        :
   Set データ範囲 = Range("A1").CurrentRegion
      ↓
     Private Sub UserForm_Initialize()
       Set ws1 = WorkSheets("Sheet1")  '追加
       Comboチーム011.AddItem "-------J1"
            :
       Set データ範囲 = ws1.Range("A1").CurrentRegion  '修正

●Public Function レコード数取得() As Integer
   レコード数取得 = Range("A1").CurrentRegion.Rows.Count - 1
      ↓
   レコード数取得 = ws1.Range("A1").CurrentRegion.Rows.Count - 1  '修正

●Public Sub データ表示(行数 As Integer)
   Dim トト結果記録, Cnt As Integer
      ↓
   Dim Cnt As Integer  '修正、二重定義になっている?
    • good
    • 0
この回答へのお礼

おかげで解決しました。
ありがとうございました。
今後ともよろしくお願いします。

お礼日時:2001/05/15 12:02

どのようなコードをかかれているか分かりませんが、UserForm_Initialize を例にして、TextBox1にSheet1のセルA1を表示するには



Private Sub UserForm_Initialize()
With Worksheets("Sheet1")
TextBox1 = .Range("A1")
End With
End Sub

のようにSheet1のセル範囲ということを明記したらどうでしょうか。該当シートをACTIVEにする必要は無いような気がします。

また、例でいえばTextBox1のControlSourceに"A1"(Sheet1のつもり)をセットされていれば、"Sheet1!A1"とすればいいと思います。
保存も問題なくできるはずです。

この回答への補足

> With Worksheets("Sheet1")
でやってみたのですが、うまくいきませんでした。
マクロの記述は書きのとおりです。
(一部省略)

アドバイス、お願いします。

----------------

Dim トト結果記録, TBL(1 To 57) As Control
Dim データ範囲 As Range

Private Sub UserForm_Initialize()

Comboチーム011.AddItem "-------J1"
Comboチーム011.AddItem "市原"
Comboチーム011.AddItem "磐田"
Comboチーム011.AddItem "浦和"

Spinトト節.Max = レコード数取得 + 1

Set TBL(1) = Textトト節
Set TBL(2) = Comboチーム011
Set TBL(3) = Frame結果1
Set TBL(4) = Comboチーム012

Set データ範囲 = Range("A1").CurrentRegion
If データ範囲.Rows.Count = 1 Then
Else
データ表示 2
End If
End Sub

Public Function レコード数取得() As Integer
レコード数取得 = Range("A1").CurrentRegion.Rows.Count - 1
End Function
Public Sub データ表示(行数 As Integer)

Dim トト結果記録, Cnt As Integer
For Cnt = 1 To 57

Select Case Cnt
Case 3
If データ範囲.Cells(行数, Cnt).Value = "H○" Then
Option試合結果011.Value = True
Else
If データ範囲.Cells(行数, Cnt).Value = "H△" Then
Option試合結果010.Value = True
Else
Option試合結果012.Value = True
End If
End If
Case Else
TBL(Cnt).Value = データ範囲.Cells(行数, Cnt).Value
End Select
Next
Textトト節.Value = Spinトト節.Value - 1
End Sub
Private Sub Spinトト節_Change()

If データ範囲.Rows.Count <> 1 Then
データ表示 (Spinトト節.Value)
End If
End Sub

Private Sub Button追加_Click()
Dim AddRow As Integer
AddRow = データ範囲.Rows.Count + 1
データ書き込み (AddRow)

Textトト節.Text = Spinトト節.Value - 1 & "/" & レコード数取得
Set データ範囲 = Range("A1").CurrentRegion
Spinトト節.Max = データ範囲.Rows.Count
Spinトト節.Value = データ範囲.Rows.Count
データ表示 (AddRow)
End Sub

Public Sub データ書き込み(行数 As Integer)
Dim Cnt As Integer
For Cnt = 1 To 57
Select Case Cnt
Case 3
If Option試合結果011.Value = True Then
データ範囲.Cells(行数, Cnt).Value = "H○"
Else
If Option試合結果010.Value = True Then
データ範囲.Cells(行数, Cnt).Value = "H△"
Else
データ範囲.Cells(行数, Cnt).Value = "H×"
End If
End If
Case Else
データ範囲.Cells(行数, Cnt).Value = TBL(Cnt).Value
End Select
Next
End Sub

Private Sub Button登録書込み_Click()
データ書き込み (Spinトト節.Value)
End Sub

Private Sub Button終了_Click()
トトデータ.Hide
End Sub

補足日時:2001/05/13 23:04
    • good
    • 0

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