Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Home Premium : Excel 2010)
Sheet名について
投稿日時: 17/08/11 22:45:06
投稿者: Pathfinder

 VBA初心者の者です。色々と類似事例を探してみたのですが合致するものがないため
皆様のお知恵をお貸しください。
 
 Sheet1で会社全体を一覧できるデータを入力し同じデータを各支社名のシートへユー
ザーフォームで一度で書き込めるようにしたいと考え、拙いながらもSheet1への書き込
みはできるところまでいきました。
 シートを切り替える際、「インデックスが有効範囲にありません」と出て、先に進め
なくなってしまいました。
 多分に式が間違っているのだと思いますが、ご指摘いただければ幸いです。
 宜しくお願いします。
 
 
Private Sub CommandButton1_Click()
 Dim st1 As Worksheet
 Dim st2 As Worksheet
 Dim Area As Range
 Dim FoundCell As Range
 Dim r As Long
 Dim lrow As Long
 Dim ListNo As Long
  
     Set st1 = Worksheets("Sheet1")
        ListNo = ListBox1.ListIndex
            If ListNo < 0 Then
                MsgBox "会社を選択してください"
                Exit Sub
            End If
             
      Set Area = st1.Range("B3:AW" & st1.Range("B" & Rows.Count).End(xlUp).Row)
         Set FoundCell = Area.Find(What:=ListBox1.Text, LookIn:=xlValues)
 
            If FoundCell Is Nothing Then '該当セルが見つからなければメッセージを表示して処理を終了する
                 MsgBox "見つかりません"
      Exit Sub
   End If
             
         With Worksheets("Sheet1")
            lrow = FoundCell.End(xlToRight).Column + 1
             
          If Controls("TextBox1").Value <> .Range(Cells(FoundCell.Row, lrow).Address).Value Then
           
             r = MsgBox("バックアップデータの日付が前後していますが、続けますか?", vbYesNo + vbCritical)
              
           If r = vbYes Then
            .Range(Cells(FoundCell.Row, lrow).Address).Value = Controls("TextBox1").Value
            .Range(Cells(FoundCell.Row, lrow + 2).Address).Value = Controls("TextBox3").Value
             
           Else
            Exit Sub
    End If
     End If
      End With
       
        Set st2 = Worksheets("listbox1.text")←ここでエラーとなります。
         
        With Worksheets("st2")
             .Cells(Rows.Count, 2).End(xlUp).Select
        End With

回答
投稿日時: 17/08/12 00:25:31
投稿者: simple

Set st2 = Worksheets("listbox1.text")
 
これは"変数"問題という(私が勝手にネーミングした)話です。
変数を""の中に入れてしまうと、変数の意味は失われます。
まさに listbox1.text という文字列に過ぎません。
 
Set st2 = Worksheets(listbox1.text)
で良いはずです。確認してみて下さい。
 
# この手の話は割と頻出します。

投稿日時: 17/08/12 00:40:35
投稿者: Pathfinder

Simple様
 
  的確なアドバイスありがとうございました。おっしゃるとおりst2 = empty としか出ずに
 難儀しておりました。しかしながら””を取るという発想は無かったので大変勉強になりま
 した。