Excel (VBA)

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

 
(指定なし : 指定なし)
ブックの名前でCSV保存
投稿日時: 20/02/13 08:56:47
投稿者: y

コピー元のワークブックと同じ名前(拡張子はない状態)で特定シートを
CSVで保存したいのですが、ボタンを押しても実行できませんと出ます。
 
ステップインでは実行できるのですが・・・
 
 
Sub csv()
 
         Dim sb As Workbook
         Dim sh As Worksheet
         Dim endCel As Range
         Dim bookpath As String
         Dim strCsvFile As String
         
          
                   
         Set sb = ThisWorkbook
         Set sh = ActiveSheet
         Set endCel = sh.Range("A1").SpecialCells(xlLastCell)
          
         Dim sbName As String
         sbName = sb.Name
          
         Dim posExt As Long
         posExt = InStrRev(sbName, ".")
          
         Dim sbExt As String
          
         If (0 < posExt) Then
            sbExt = Left(sbName, posExt - 1)
             
        Else
            sbExt = sbName
             
        End If
          
         bookpath = ActiveWorkbook.Path
         strCsvFile = bookpath & "\" & sbExt & ".csv"
          
         sh.Range("A1", endCel).Copy
         Worksheets.Add.Range("A1").PasteSpecial Paste:=xlPasteValues
     
         ActiveSheet.Move
         Application.DisplayAlerts = False
         ActiveWorkbook.SaveAs Filename:=strCsvFile, FileFormat:=xlCSV
         ActiveWorkbook.Close savechanges:=False
         Application.DisplayAlerts = True
    
End Sub
 
よろしくお願いいたします。

回答
投稿日時: 20/02/13 17:22:14
投稿者: simple

>実行できません
だけでなく、何か付随説明はありませんか?

回答
投稿日時: 20/02/13 19:49:21
投稿者: mattuwan44

そのファイルを保存して、
初めて開いたときに、
「コンテンツの有効化」
をクリックしてないのでは?
 
https://pasokon-labo.com/excel-this-book-cannot-use-macro/
 

Sub test()
    Dim strNew As String
    
    With ThisWorkbook
        strNew = Replace(ThisWorkbook.FullName, "xlsm", "csv")
        .Worksheets("Sheet2").Copy
    End With
    
    With Workbooks(Workbooks.Count)
        Application.DisplayAlerts = False
        .SaveAs strNew, xlCSV
        Application.DisplayAlerts = True
        .Close False
    End With
End Sub

 
頑張っておられますけど、これでいいのでは?
 
CSV形式で保存したら、数式とかセルの書式設定とか、エクセルの機能は全部なしで
保存されるので、敢えて値貼り付けにする必要はありません。
 
1)新しいブックに指定のシートをシートコピー
2)最後に開いたブックを名前を付けてCSVで保存
3)最後に開いたブックを閉じる
 
この3手間ですかね。

回答
投稿日時: 20/02/13 23:30:18
投稿者: simple

そのコード自体は間違いないと思います。難点はあるようですけど。
  
問題は、実行環境ではないですか?
それでエラーが発生したときに、注意喚起のメッセージが出ていないか、
と尋ねているわけです。
  
例えばですが、作成したCSVをExcelなりで開いていて、
その状態でそのコードを実行すると、実行時エラーになりますよ。
これは単なる一例ですが、こうした原因を把握するためにも、
追加で詳細な状況を説明して欲しいわけです。
(いやまあ、こちらがお願いする話でもないわけですがね)
  
もしエラーメッセージもなにもなければ、
物理的なトラブルが発生している懸念が高まりますね。
それならそれで再現性はないかもしれないし、
逆に言えばユーザーはどうしようもない、ということだと思います。

投稿日時: 20/02/14 08:27:40
投稿者: y

simple さんの引用:
>実行できません
だけでなく、何か付随説明はありませんか?

 
simpleさん、おはようございます。
 
エラーメッセージは
 
!マクロ'原紙.xlsm!Sheet1.WRITE_CSVFile'を実行できません。このブックで
マクロが使用できないか、またはすべてのマクロが無効になっている可能性
があります。
 
でした。
マクロ有効なエクセルで保存はしているのですが、mattuwan44さんの
おっしゃってる"コンテンツの有効化"は、開いた時に出てこなかった
です。

回答
投稿日時: 20/02/14 08:54:07
投稿者: simple

"このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。"
をキーワードにして、ネット検索してください。
設定方法の確認等、各種記事が出てきますから、ご自分で対応してください。
 
# これで一件落着ですかね、たぶん。
# 最初からそのように質問して頂くと、もっと早く解決に向かっていたでしょうね。

投稿日時: 20/02/14 09:31:02
投稿者: y

mattuwan44 さんの引用:
そのファイルを保存して、
初めて開いたときに、
「コンテンツの有効化」
をクリックしてないのでは?
 
https://pasokon-labo.com/excel-this-book-cannot-use-macro/
 
Sub test()
    Dim strNew As String
    
    With ThisWorkbook
        strNew = Replace(ThisWorkbook.FullName, "xlsm", "csv")
        .Worksheets("Sheet2").Copy
    End With
    
    With Workbooks(Workbooks.Count)
        Application.DisplayAlerts = False
        .SaveAs strNew, xlCSV
        Application.DisplayAlerts = True
        .Close False
    End With
End Sub

 

 
mattuwan44さん、おはようございます。
 
今のエクセルをコピーして、「コンテンツの有効化」をクリックして
mattuwan44さんの教えてくださったものをコピペして実行したのですが、
 
実行時エラー'9': インデックスが有効範囲にありません。
 
と出てしまいます。ステップインすると、
.Worksheets("Sheet2").Copy
でエラーが出る状態です。
 
 
 

投稿日時: 20/02/14 09:59:45
投稿者: y

simple さんの引用:
"このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。"
をキーワードにして、ネット検索してください。
設定方法の確認等、各種記事が出てきますから、ご自分で対応してください。
 
# これで一件落着ですかね、たぶん。
# 最初からそのように質問して頂くと、もっと早く解決に向かっていたでしょうね。

 
simpleさん、ありがとうございます。
ネットで調べたところ、マクロは有効な状態でした。
たまたま他の原因について書かれているサイトがあり、
再度ボタンを作り直し、マクロの登録をしたところ、
CSVを作成する事ができました。
いろいろ教えて頂き助かりました。

回答
投稿日時: 20/02/14 11:24:22
投稿者: simple

解決されて何より。
 
どんな原因だったのか、参照したサイト情報(urlでよいでしょう)を残しておくと、
他の閲覧者の参考になるんじゃないですか?
give and takeの精神で行きましょう。

投稿日時: 20/02/14 12:43:15
投稿者: y

simple さんの引用:
解決されて何より。
 
どんな原因だったのか、参照したサイト情報(urlでよいでしょう)を残しておくと、
他の閲覧者の参考になるんじゃないですか?
give and takeの精神で行きましょう。

 
 
http://tooljp.com/qa/macro-is-disabled-excel2007-A1C5.html
 
上記のいろいろな原因を見て、コードも難点ありですが、
間違ってはいない、環境もマクロ有効になってるとなると
ボタンかと思い、新たに作り直したらCSVにすることが
できました。

回答
投稿日時: 20/02/14 12:58:56
投稿者: simple

ありがとうございました。
 
ボタンにマクロを登録してから、
プロシージャ名を変更したことを失念していた、
という理解でいいんですか?
それとも別の話ですか?

投稿日時: 20/02/14 13:34:07
投稿者: y

simple さんの引用:
ありがとうございました。
 
ボタンにマクロを登録してから、
プロシージャ名を変更したことを失念していた、
という理解でいいんですか?
それとも別の話ですか?

 
何度か書換て、ボタンのマクロを解除してから登録
しなおしたつもりだったのですが、そこができて
いなかったのが原因でした。
 
相談する前は、コードがおかしいのかと思っていま
したが、simpleさんにコードを見て頂き原因が別に
あるとわかりボタンに行きつくことができました。
ありがとうございました。

回答
投稿日時: 20/02/14 13:52:40
投稿者: simple

分かりました。ありがとうございます。

投稿日時: 20/02/14 13:56:02
投稿者: y

simpleさん、mattuwan44さん ありがとうございました。