プロが教える店舗&オフィスのセキュリティ対策術

以前、VBAでやりたい事を質問しつコードを教えて頂きました。実行した所、型が違うとのエラーで引っ掛かります。初心者のため、色々調べましたがよく分かりません。String=文字列 なので合ってると思うのですが…。
☆で、2013/12。と入力して、★で引っ掛かかります。改行出来てませんが、下記にコード載せます。
有識者の方、ご指導頂けると幸いです。
宜しくお願い致します。

Sub test()
Const fpath As String = "C:\ABC\" Dim wb1 As Workbook, wb2 As Workbook Dim sh1 As Worksheet, sh2 As Worksheet Dim ym As String Dim sdate As Date, edate As Date Dim rng As Range Dim wdate As ☆Date ym = InputBox("年月を yyyy/m の形式で入力してください" & vbCrLf & "例:2023/11")
★If ym = "" Then Exit Sub If IsDate(ym & "\1") = False Then MsgBox "日付エラー"
Exit Sub
Application.ScreenUpdating = False Application.DisplayAlerts = False sdate = DateValue(ym & "\1") edate = DateSerial(Year(sdate), Month(sdate) + 1, 1) - 1 Set rng = Range("休日") Set wb1 = Workbooks.Open(fpath & "1234.xlsx") wb1.Worksheets("原本").Copy Set wb2 = ActiveWorkbook Set sh1 = wb2.Worksheets("原本") For wdate = sdate To edate If Weekday(wdate, 2) < 6 And WorksheetFunction.CountIf(rng, wdate) = 0 Then sh1.Copy After:=wb2.Worksheets(wb2.Worksheets.Count) Set sh2 = ActiveSheet With sh2.Range("B1").Value = Day(wdate).Name = .Range("B1").Value & "日" End With End If Next wdate
wb2.Worksheets(1).Delete wb1.Close wb2.Close SaveChanges:=True, Filename:=fpath & Month(wdate) & "月分.xlsx"Application.DisplayAlerts = True Application.ScreenUpdating = True MsgBox "処理終了" End Sub

A 回答 (2件)

No1です。



全体構成等が不明のままなので、よくわからないままですが・・・

>エラー該当箇所のみVBAを作って流したところ、おっしゃる通り最後まで流れました。
であるなら、それに付随している(それ以外の)部分に原因があると推測できます。

>全分を流すと、型が違う(おそらくymの)との事で、止まってしまいます。
ご質問の部分は、コード全体の前半にあると思いますので、後半の処理を省略してみて流れるかをチェックしてみれば、原因となっている部分を特定できると思います。
(エラーが出なくなるまで、徐々に短くしてゆけば良い)

上記のような行き当たりばったりではない方法を考えるなら、まず、問題のヶ所の直前で変数ym の内容と変数の型を調べてみるとか。
例えば、
 Debug.Print "変数の値:" & ym
 Debug.Print "変数の型:" & VarType(ym)
等としてみれば、変数ym の値と型がイミディエイト・ウィンドウに表示されます。
(変数の型の種類は以下のURLを参照してください)
https://learn.microsoft.com/ja-jp/office/vba/lan …

※ 「型が違う」というエラーなら、ymの型が文字列(=8)以外のものになっている可能性が高いと思いますけれど・・・
    • good
    • 0
この回答へのお礼

色々とアドバイス頂きありがとうございました。うまくいかないため再度質問しようとおもいます

お礼日時:2023/11/11 08:17

こんばんは



>★で引っ掛かかります。改行出来てませんが、下記にコード載せます。
改行がどこなのかわからないので、実際のコードが不明ですが・・・
(特にIF文の改行は、位置によって意味が変わるので・・)
また、改行を気になさらないことから、質問者様にとってはコードは単なる呪文であろうことが推測できます。


「★で引っ掛かかります」というのが、単にVBAのチェックに引っかかっているのか、VBAのエラーが出ているのかも不明ですけれど・・・
勝手に改行位置を推測しましたが、以下の解釈で合っていれば、★部分でエラーなり、チェックでのエラーメッセージが出るとも思えません。


※ 改行位置が異なる場合は、構文エラーになっている可能性があります。
※ ★の近辺の部分を抜き出し、妙なところは修正してあります。
Sub PartTest()
 Dim ym As String

 ym = InputBox("年月を yyyy/m の形式で入力してください" & vbCrLf & "例:2023/11")
' ★ 直下の一行では、エラーは発生しないものと推測します
 If ym = "" Then Exit Sub
 If IsDate(ym & "/1") = False Then
   MsgBox "日付エラー"
   Exit Sub
 End If
 MsgBox "問題の処理部分を通過しました"
End Sub
    • good
    • 0
この回答へのお礼

早々に回答頂きありがとうございます。改行がきちんとできておらず申し訳ございませんでした。fujillin様からご回答頂いた、エラー該当箇所のみVBAを作って流したところ、おっしゃる通り最後まで流れました。ただ、全分を流すと、型が違う(おそらくymの)との事で、止まってしまいます。その時にymに入っている値をデバッグというのでしょうか?調べてみたらemptyとなっていました。理由がわからず再度苦戦しております。もし宜しければ助言頂けると幸いです。必要でしたら、流している(改行してある)コードを再度貼らせて頂きます。

お礼日時:2023/11/10 17:06

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A