- ベストアンサー
EXCELのKill処理について質問です。
EXCELのKill処理について質問です。 とあるフォルダに「test.csv」がある場合のみ その「test.csv」を削除する処理を作りたいのですが、 Dim Del_Dir as string Del_Dir = ThisWorkbook.Path & "\test\test.csv" if Del_Dir <> "" then kill Del_Dir end if 上記のようにすれば、「test.csv」は削除できるのですが、 もともとフォルダに存在しない場合、Elseの処理がどのようにすれば できるので悩んでおります。 ご教示お願いします
- chirorin22
- お礼率39% (29/73)
- オフィス系ソフト
- 回答数1
- ありがとう数4
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
変更前: if Del_Dir <> "" then 変更後: if dir(Del_dir) <> "" then など。
関連するQ&A
- デスクトップ上のCSVファイルの削除について
いつもお世話になっております。 VBAでまた難問に詰まってしまいました。ご教授お願い致します。 別のフォルダに保存されているマクロを利用して、とあるデータを作成するのですが 途中でデスクトップ上に一回保存をしたCSVファイルを最後に削除する という動きをさせたいです。 下記のマクロだと、マクロとCSVファイルがデスクトップ上にあれば削除出来るのですが マクロは常にとあるフォルダに保管されており、使用する人間はバラバラです。 ※CSVファイルの他に3種類程データを作成するのですが マクロを使った人が使っているPCのデスクトップ上に保管する事になっております。 上記の事から、Killステートメントでファイル指定が出来ない状態(不特定のデスクトップ)です。 Sub test() Dim myPath As String Dim i As String myPath = ThisWorkbook.Path & "\" i = "テストデータ.csv" If InStr(i, ".csv") = 0 Then i = i & ".csv" If Dir(myPath & i) <> "" Then Kill myPath & i Else End If End Sub 不特定のデスクトップ上にあるcsvファイルを削除する事は可能でしょうか? 以上、宜しくお願い致します。 環境 WindowsXP Excel2003
- ベストアンサー
- Visual Basic
- エクセルワークブックの数だけ処理を繰り返したいです
excel vba(マクロ)についての質問です。 元のフォルダには、複数の.xlsxのワークブックがあります。この各ワークブックのワークシート1のA1に”〇月見積書”と記載があり、これらを元のフォルダと同じフォルダに各ワークブックのワークシート1のA1に記載があるファイル名にし、かつ、csvにして保存し、同じファイル名になったら、連番にしたいです。 例えば、"11月見積書(1)"の様に。そして、元の.xlsxの数だけ連番にしたいです。 元のフォルダにある.xlsxをカウントしてその分だけ繰り返せばいいと思うのですが、連番が永遠と繰り返されてしまい、出来ません。 各.xlsxをワークブックのワークシート1のA1に記載があるファイル名にし、そして、この.xlsxの分だけ.csvに変換するには、どうすればいいでしょうか? dim f as string dam i as long dim tem as string tem = thisworkbook.sheets(1).range("A1") & "¥" f = dir(tem) if f ="" then f= tem else do while f<>"" i = i+1 f= dir(tem& "(" & i &")" & ".csv") loop f =tem & "(" & i &")" & ".csv" end if activeworkbook.save as filename:=tem & "(" & i &")" & ".csv" お手数ですが、宜しくお願い致します。
- ベストアンサー
- Visual Basic
- Excel 2010 VBA:ファイル名を読み込む
下は複数のcsvファイルを一つに合体するVBAです。これにシートの右端に読み取ったファイル名を追加するにはどうしたらよいでしょうか。 よろしくお願いします。 Sub macro1() Dim myPath As String Dim myFile As String Dim s As String myPath = ThisWorkbook.Path & "\" On Error Resume Next Kill myPath & "合体版.csv" On Error GoTo 0 myFile = Dir(myPath & "*.csv") If myFile = "" Then Exit Sub Open myPath & "合体版.csv" For Output As #1 Do Until myFile = "" Open myPath & myFile For Input As #2 Do Until EOF(2) Line Input #2, s Print #1, s Loop Close #2 myFile = Dir() Loop Close #1 End Sub
- ベストアンサー
- Excel(エクセル)
- VBAでイベント処理に複数回入ってしまうのを防ぎたい
こんにちは。 マクロのエクセルファイルを操作し、セーブ時にCSV形式でテクストファイルに書くことを実現しようと思っています。 VBAでイベント処理"BeforeSave"で以下のように書くと、初めに書かれた"test.txt"が同じ処理を行おうとしているようで、そこでも書き込みの処理を行おうとする→無限に書き込みが発生?→エラーの表示が出てきます。これはどういう風に対処すればよろしいのでしょうか? Workbook/BeforeSaveイベント処理: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim file_curr As String Dim msg As String file_curr = ThisWorkbook.Path & "\test.txt" If Dir(file_curr) = "" Then ActiveWorkbook.SaveAs _ Filename:=file_curr, _ FileFormat:=xlCSV, Local:=True msg = "saved" Else msg = "file exist, not saved" End If MsgBox msg End Sub
- ベストアンサー
- オフィス系ソフト
- プログラムのイベント処理中断方法
VB2008のイベンド中止処理についてお教え頂けませんでしょうか。 Formにボタンが1つあり、クリックするとCSVファイルが出力される処理をしたいです。 やりたい処理: 1. 「CSVファイル出力しますか?」というメッセージを出す。YESなら処理続行。Noなら処理中止。 2. CSVファイル出力処理。 3. 「CSVファイルを出力しました。」 (プログラム自体を終了したいわけではありません) VBAだと下記のようなコードを書きたいです。 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then end end if 'CSV出力処理~~~ end sub VBにendというステートメントがあれば、良いのですが無さそうです・・・ 何か上手な処理はあるでしょうか?VBAのコードになってしまいますが、下記のような処理方法しかないでしょうか? '''''''''''''''''1 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then end else 'CSV出力処理~~~ end if end sub ''''''''''''''''2 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then goto here end if 'CSV出力処理~~~ here: end sub
- ベストアンサー
- Visual Basic
- ダイアログボックスからフォルダ名を取得し、フォルダ内のCSVファイルを
ダイアログボックスからフォルダ名を取得し、フォルダ内のCSVファイルをすべてアクセスのテーブルにインポート使用と思っています。 ところがCSVファイルの数の分だけ、1つめのCSVファイルの中身が繰り返しインポートされてしまっています。 どの部分に誤りがあるのでしょうか? お知恵を拝借できますでしょうか・・・。 コードは以下になります。 Private Sub cmd06_Click() Dim MyFile As String Dim MyName As String Dim MyName02 As String Dim strFolderName As String strFolderName = GetFolderName() 'フォルダ選択ダイアログを表示 If Len(strFolderName) > 0 Then '選択結果を評価 MyFile = strFolderName & "\*.csv" '【拡張子csvのファイルのみ取得】 MyName = Dir(MyFile, vbNormal) MyName02 = "\" & MyName Do While MyName <> "" If MyName <> "." And MyName <> ".." Then If GetAttr(strFolderName & "\" & MyName) <> vbDirectory Then DoCmd.TransferText acImportFixed, "T03_インポート定義", "T03_全CSVデータ", strFolderName & MyName02, False, "" '【取得したファイルをインポート】 End If End If MyName = Dir Loop Else MsgBox "フォルダは選択されませんでした" End If MsgBox "データのインポートが終了しました" End Sub
- ベストアンサー
- その他MS Office製品
- エクセルVBAでConsolidate
以下は、ネット検索で見つけたサンプルコードです。 同じフォルダ内の全ブックのSheet1のA1:B10をThisWorkbookのSheet1に統合しています。 Sub test2() Dim MyFile As String, MyPath As String Dim SumFile() As Variant, i As Long MyPath = ThisWorkbook.Path & "\" MyFile = Dir(MyPath, vbNormal) Do Until MyFile = "" If MyFile <> ThisWorkbook.Name Then ReDim Preserve SumFile(i) 'A1からB10の値を変数に代入 SumFile(i) = "'" & MyPath & "[" & MyFile & "]Sheet1'!R1C1:R10C2" i = i + 1 End If MyFile = Dir Loop If i = 0 Then MsgBox "データが有りません": Exit Sub Worksheets("Sheet1").Range("A1").Consolidate Sources:=SumFile() End Sub 質問1 Sheet1だけでなく全シートのA1:B10をThisWorkbookのSheet1に統合するためにはどう書き換えればよいのでしょうか? 質問2 上記コードではなぜ、ブックを開かずにデータがとれるのでしょうか?
- ベストアンサー
- オフィス系ソフト
- Excel CSVファイル セル名を名前として保存
いつもありがとうございます。エクセル2003XPです。 毎回USBメモリーに上書きされてくる、同名のCSVファイルを別エクセルファイルに読み込む作業をしております。 その作業は外部データの読み込みを記憶マクロとして問題ないのですが、エクセルに読み込んだCSVファイルは、かぶらないようにそのつど、Kill を使い削除しております。 ただ完全に削除なので対策として、 読み込んだCSVファイルの1行目のセル名をファイル名として名前を変えて保存、 PCの"C:\Documents and Settings\元データ に毎回CSVもしくは、エクセルファイルに名前を変更して保存する処理をボタンひとつで出来ないか、考えております。 ネットで色々と検索をしておりますが、勉強不足です。 参考でサンプルマクロは見つけましたが、どのように変更すれば良いか分かりません。ご享受いただければ助かります。 CSVファイル名 : log001.csv(毎回、USB) 保存したいファイル名 : CSVファイルを開いた時のA1のセル名(日付です) 保存場所 : PCのマイドキュメントの元データファイル 保存したいファイル形式 : CSVもしくはExcelファイル Sub THSFILE_SAVE() Dim myFname0 As String Dim myFname As String On Error GoTo ERRH '現在のファイル名取得 myFname0 = ThisWorkbook.Name '新しいファイル名をセルA1の値とする myFname = Sheets(1).Range("A1").Value '同じ階層に保存 ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & myFname If myFname0 <> myFname & ".xls" Then '前の名前のファイルを削除する場合は下の一行を有効にしてください 'Kill ThisWorkbook.Path & "\" & myFname0 End If Exit Sub ERRH: End Sub この処理はCSVファイルの読み込み先のエクセルファイルから、行いたいと考えております。 よろしくお願致します。
- 締切済み
- オフィス系ソフト
- エクセルVBAで場所の指定
また質問させていただきます。先日Wendy02さんに以下のコードを お教えいただきました。 少し内容を変更したくまた質問をさせていただきます。 移動前のフォルダ名をあらかじめフルパスで指定してある セルがあるのですが、そのセルには C:\Documents and Settings\user\デスクトップ\Test1Fold とあるとして、そのパスを取得して SourceDir = SourceFolder & "Test1Fold\" '末尾に\ は付けなくてよい の部分は移動前のフォルダが変わっても対応できるようにしたいのですが、どのようにするのかわかりません。どのように記述すればいいでしょうか?よろしくお願いします。 Sub MoveDirectries() Dim SourceFolder As String Dim SourceDir As String Dim DestFolder As String Dim DestDir As String Dim ArDirs() As String Dim FOLname As String Dim i As Integer Dim v As Variant Dim ret As Integer 'Win 2000以上 Const MYCMD1 As String = "CMD /C MOVE " '末尾は半角スペースを開ける SourceFolder = ActiveWorkbook.Path & "\" 'ベースのフォルダ(元)\ は必ず付ける DestFolder = ActiveWorkbook.Path & "\" 'ベースのフォルダ(先)\ は必ず付ける SourceDir = SourceFolder & "Test1Fold\" '末尾に\ は付けなくてよい DestDir = DestFolder & "Test1AFold\" '最終フォルダに \ があったら省く If Right(SourceDir, 1) = "\" Then SourceDir = Mid$(SourceDir, 1, Len(SourceDir) - 1) If Right(DestDir, 1) = "\" Then DestDir = Mid$(DestDir, 1, Len(DestDir) - 1) ReDim Preserve ArDirs(i) FOLname = Dir(SourceDir & "\", vbDirectory) Do While FOLname <> "" If FOLname <> "." And FOLname <> ".." Then If (GetAttr(SourceDir & "\" & FOLname) And vbDirectory) = vbDirectory Then ReDim Preserve ArDirs(i) ArDirs(i) = FOLname i = i + 1 End If End If FOLname = Dir Loop 'フォルダの下のフォルダを作るのは一回のみ For Each v In ArDirs() If Dir(DestDir & "\" & v, vbDirectory) = "" Then ret = Shell(MYCMD1 & """" & SourceDir & "\" & v & """" & " " & """" & DestDir & """") ElseIf Dir(DestDir & "\" & v & "\" & v, vbDirectory) = "" Then ret = Shell(MYCMD1 & """" & SourceDir & "\" & v & """" & " " & """" & DestDir & "\" & v & """") End If Next v End Sub
- ベストアンサー
- オフィス系ソフト
- VBA:カウンターの i の値が開放されなくて困っています。
以下のコードを実行する度に、カウンター i の値がリセット(開放)されずに積算されて困っています。なぜか教えて下さい。宜しくお願い致します。 以下のコードは、簡単に言えばcsvファイルをカウンター i で数えています。したがって、少なくともCSVファイルを一つ作成して実行して下さい。 Option Explicit Dim FiName As String, FoName As String Dim EachFiName As String Dim i As Integer Sub Test() MsgBox i '二回目にこのコードを実行するとiが積算されます。 FiName = Application.GetOpenFilename If FiName = "False" Then Exit Sub Else If Right(FiName, 3) <> "csv" Then MsgBox "Chose a CSV file." Exit Sub End If End If FoName = Left(FiName, InStrRev(FiName, "\", -1, vbTextCompare)) EachFiName = Dir(FoName & "*.csv") Do While EachFiName <> "" i = i + 1 EachFiName = Dir() Loop End Sub
- ベストアンサー
- Visual Basic