こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBA 型が一致しません

初めまして
マクロを習い始めた初心者なのですが、ユーザーフォームを用いて印刷設定を行おうとしています。
(最後のSelectは最終的にPrintoutにします)
今まではループ処理で一枚ずつ印刷するような設定にしていましたが、他の人もプリンターを使用しているのでスプールをまとめようと考えました。
ユーザーフォームに使用しているのはトグルボタンとコマンドボタンのみです。
必要なシートの名前を付けたトグルボタンで印刷するシートを選べるようにしています。
下記のように記述しましたが、途中型が一致しませんと出て困っています。
ご教授願います。


Private Sub CommandButton1_Click()
Dim TgLB_val(4) As Boolean

Dim TgLB_cap(4) As Variant
TgLB_cap(1) = TB1.Caption: TgLB_cap(2) = TB2.Caption
TgLB_cap(3) = TB3.Caption: TgLB_cap(4) = TB4.Caption
Dim sEnt_sh As Variant
Dim i As Long
For i = 1 To 4
If TgLB_val(i) Then
sEnt_sh(UBound(sEnt_sh)) = TgLB_cap(i) →ここでいつも型が一致しませんとでます。TgLB_cap の方をstring型からvariant型に変更しても出ています。
ReDim Preserve sEnt_sh(UBound(sEnt_sh) + 1) 
End If

Next i
Stop
Sheets(sEnt_sh).Select
End Sub

投稿日時 - 2018-09-19 12:56:12

QNo.9538834

困ってます

質問者が選んだベストアンサー

ユーザーフォーム上にはオブジェクト名ToggleButton1~ToggleButton4
トグルボタンが有りそれぞれCaptionにはシート名が記されています。
の条件でお試しください。
Private Sub CommandButton1_Click()
  Dim sEnt_sh()
  Dim i As Long, j As Long
  For i = 1 To 4
    If Me.Controls("ToggleButton" & i).Value Then
      j = j + 1
      ReDim Preserve sEnt_sh(1 To j)
      sEnt_sh(j) = Me.Controls("ToggleButton" & i).Caption
    End If
  Next
  Sheets(sEnt_sh).Select
End Sub

投稿日時 - 2018-09-19 15:16:18

お礼

回答ありがとうございます。
おかげさまでうまく作動しました!
本当にありがとうございました。

投稿日時 - 2018-09-25 12:09:33

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

sEnt_shこの変数は配列ではないのに
UBound関数を利用しているからでは

Dim sEnt_sh() As Variant

投稿日時 - 2018-09-20 16:52:15

補足

回答ありがとうございます。
宣言のところに()を追加しましたが、やはり型が一致しませんと出てしまいました。

投稿日時 - 2018-09-25 12:06:47

ANo.1

Dim sEnt_sh As Variant

ReDim sEnt_sh(1) As String
または
ReDim sEnt_sh(1) As Variant
としたらどうでしょうか?

投稿日時 - 2018-09-19 13:44:43

補足

回答ありがとうございます。
入れてみあのですが、今度は
ReDim Preserve sEnt_sh(UBound(sEnt_sh) + 1)
の部分で配列は既に宣言されていますとエラーが出てしまいました。

投稿日時 - 2018-09-25 12:06:50

あなたにオススメの質問