- ベストアンサー
Excel VBA インポートファイル名指定方法と実行時エラー1004の解決方法
end-uの回答
- end-u
- ベストアンサー率79% (496/625)
既に作ってある[外部データ範囲](QueryTable)を更新するケースですね? その場合、[データの更新]ダイアログでファイル拡張子を指定するのはちょっと面倒です。(多分) 手動操作をエミュレートするようなコードになってしまいそう。 なので、[外部データ範囲のプロパティ]で指定するところの 「更新時にファイル名を確認」オプション(TextFilePromptOnRefreshプロパティ)の設定を一時的にOffにして、 GetOpenFilenameメソッドでファイルを選択するようにしたほうが簡単そうです。 Sub test() Dim qt As QueryTable Dim b As Boolean Dim x As Variant 'キャンセルに対応するためVariant型でファイル名を受ける '"HIN"SheetのA3セルが含まれているQueryTableをSet On Error Resume Next Set qt = Sheets("HIN").Range("A3").QueryTable On Error GoTo 0 'QueryTableが無ければExit If qt Is Nothing Then MsgBox "no QueryTable": Exit Sub End If 'GetOpenFilenameメソッドで拡張子を指定↓ x = Application.GetOpenFilename(",*.txt") 'キャンセル時はGetOpenFilenameメソッドはvbBoolean型を返す If VarType(x) = vbBoolean Then MsgBox "cancel" Else '「更新時にファイル名を確認」オプションを一時記憶 b = qt.TextFilePromptOnRefresh '「更新時にファイル名を確認」オプションを外す qt.TextFilePromptOnRefresh = False 'GetOpenFilenameで得たファイル名をセット qt.Connection = "TEXT;" & x qt.Refresh BackgroundQuery:=False '「更新時にファイル名を確認」オプションを戻して手動時にも対応の余地を残す qt.TextFilePromptOnRefresh = b End If Sheets("Sheet1").Select Set qt = Nothing End Sub でも、既に作ってあるQueryTableの更新の為に『マクロ実行スイッチを配置』するより [外部データ範囲]範囲(A3)右クリック[データの更新]か、 コマンドボタンユーザー設定から[データ]-[データの更新]ボタンをメインメニューに配置するだけでも良さそうな気もしますが。 #確かにファイル拡張子の指定はできないですけどね。
関連するQ&A
- エクセル2007VBAで新規ファイルを作る場合
現在A社というファイルのsheet1に電気代と名前を付けたデータ、sheet2に ガス代という名前を付けたデータがあり電気代のブックからコピーして新規ファイルに貼り付けをしたいと思い下記のとおりマクロがありますが、新規ブックを開いた時常に1ではなく他に新規ブックを開いていたら2とか3になってしまいます。すると再度新規ブックに戻ってガス代を貼り付ける時2とか3tpか4とかでしたらエラーになってしまいます。 こういう場合どのように書いたら良いのでしょうか? それから最後に新規ファイルで名前を付けて保存のところまでダイアログ出すところまで 教えていただきたいのですが。 マクロ勉強始めたばかりでよろしくお願います。 Sub DGCopy() Cells.Select Selection.Copy Workbooks.Add Cells.Select ActiveSheet.Paste Sheets("Sheet1").Select Sheets("Sheet1").Name = "電気代" Windows("A社.xls").Activate Sheets("電気代").Select Cells.Select Application.CutCopyMode = False Selection.Copy Windows("Book1").Activate Sheets("Sheet2").Select Cells.Select ActiveSheet.Paste Sheets("Sheet2").Select Sheets("Sheet2").Name = "ガス代" Application.CutCopyMode = False End Sub
- ベストアンサー
- その他MS Office製品
- エクセル VBAで範囲に名前を定義する
Sub 範囲import設定() Sheets("Format").Select Range("A1").Select Selection.CurrentRegion.Select ActiveWorkbook.Names.Add Name:="import", RefersToR1C1:="=Format!R1C1:R26C7" End Sub 「マクロの記録」でCTRL + * で全データ範囲を選択して"import"という名前を定義したところ 上のようなコードになりました。全データ範囲は毎回違うのですが、ごらんのようにセル番号 で指定されてしまいます。そのつど異なる全データ範囲に名前を定義するにはどうすればいいのでしょうか。 よろしくお願いします。
- ベストアンサー
- Excel(エクセル)
- エクセル「マクロの記録」を少し直したい
マクロの記録で作った下記を Sub Macro1() Sheets("Sheet1").Select Rows("6:6").Select Selection.Copy Sheets("Sheet2").Select Rows("2:2").Select ActiveSheet.Paste End Sub 以下のように書き換えたら、2行目(Paste)がエラーになりました。 Sub ts1() Sheets("Sheet1").Rows("6:6").Copy Sheets("Sheet2").Rows("2:2").Paste End Sub セレクトしないで行ないたいのです。 どう直せばいいでしょうか?
- ベストアンサー
- オフィス系ソフト
- VBA 一個前のシートのデータをコピーして貼付
(1) Private Sub Workbook_Open()に、マクロの記録で作成した(2)を組み込んで処理をしたいのですが、一つ前のファイルを選択する記述・一つ前のシートを指定する記述が判りません。 ●御教示いただきたい事項 ・(1)で開かれた時、ファイルはマスター.xls が開いていますが、 ファイル名 ccc.xlsが開いた状態にする記述のしかた。 ・(2)が各シートで実行される、共通の記述のしかた。 (1) Private Sub Workbook_Open() Workbooks.Open Filename:="C:\Documents and Settings\aaa\My Documents\bbbマスター\マスター.xls" End Sub (2) ファイル名 ccc.xlsにマクロの記録で作成 Sub Macro4() Range("J11").Select 'Sheets("7月")のセル J11 Sheets("6月").Select Range("I7").Select Selection.Copy Sheets("7月").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub
- ベストアンサー
- オフィス系ソフト
- Excel エクセル マクロ VBA
エクセルマクロで指定したシート(2シート目)から末尾のシートまで印刷したい場合、下記のようなコードで良いでしょうか? Sub Sample1() Dim i As Long For i = 2 To Sheets.Count ActiveWorkbook.Sheets(i).Select (Replace:= False) Next i Activesheet.PrintOut Preview:=True End Sub
- ベストアンサー
- Excel(エクセル)
- Excel 「テキストファイルのインポート」 ダイアログボックスを表示させない方法
excel2002の「データの取り込み」機能を使って 外部テキストファイルをシート上に直接展開する作業をマクロ記録したところ、 下記のようなマクロコードが自動生成されました。 With Selection.QueryTable .Connection = "TEXT;C:\hogehoge.txt" .TextFilePlatform = 932 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With これを走らせると、 「テキストファイルのインポート」ダイアログボックスが開いて、 インポートするファイルを選ぶよう求められるのですが、 開くファイル名も決まっているので、このダイアログが出ないようにしたいのです。 vbaの記述でこのダイアログをすっとばす方法はあるのでしょうか? ご指導のほどよろしくお願いします。
- ベストアンサー
- Visual Basic
- VBA で名前の定義をしたいのですが・・・
初心者です。 いろいろ試してみたのですが、だめでした。 ご教授ください。 対象という名前を定義させたいと思っています。 定義の参照範囲は可変です。 定義したい範囲はSheet1のAA3からAAの最終行までです。 それでマクロの自動記録から名前の定義のコードを取ってきて 変数を代入してみましたが、参照範囲を正しく取ってきてくれませんでした。 Sub test() '対象の名前を定義する Dim n As Long n = Sheets("Sheet1").Cells(Rows.Count, 27).End(xlUp).Row Sheets("Sheet1").Select Range(Cells(3, 27), Cells(n, 27)).Select ActiveWorkbook.Names.Add Name:="対象", RefersToLocal:="=Sheet1!R3C27:RnC27" End Sub RefersToLocal:="=Sheet1!R3C27:RnC27"の部分を RefersToLocal:="=Sheet1!R3C27:R&n&C27" RefersToLocal:="=Sheet1!R3C27:"R"&n&"C27"" にしてもだめでした。 うまく範囲をとってくれる方法を教えてください。 お願いします。
- ベストアンサー
- Visual Basic
- Excel VBAで他のブックを選択する方法を教えてください。
こんにちは。VBA初心者です。 ブックを2つ開いた状態で、 マクロを保存してあるブック〔Book1〕から、 毎回ブック名が異なる[Book2]の選択されている2枚のシートを新しいブックに(仮Book3)コピーしたいのですが、どのように記述したらよいのでしょうか。(選択されるシートも毎回異なります。) 特に教えていただきたい部分は、 1.マクロが記録されているBOOK1以外のBookを操作する方法。 2.私以外の方が利用する為、Book1に保存したマクロから実行させる予定なのですが、Book1を毎回開いて実行させる方法がベストのやり方なのでしょうか。 マクロの記録では下記の感じになります。 Sub Macro4() Windows.Arrange ArrangeStyle:=xlVertical Windows("Book2.xls").Activate Sheets(Array("Sheet3", "Sheet4")).Select Sheets("Sheet4").Activate Sheets(Array("Sheet3", "Sheet4")).Copy End Sub 宜しくお願い致します。
- ベストアンサー
- その他([技術者向] コンピューター)
- エクセルVBAについて
Sub a() Sheets("Sheet1").Select End Sub Sub b() Worksheets("Sheet1").Select End Sub どちらコードもSheet1を選択しますが 「こちらを使うべき!」ってありますか? 独学のため、SheetsとWorksheetsの違いがわかりません。 ご教授よろしくお願いします。
- ベストアンサー
- Visual Basic
- EXCELのVBAですが。
EXCELのVBAですが。 Sub macro1() Dim mycnt As Integer Dim sheet_name1 As String Sheets("kekka").Select Range("A1").Select Sheets("shiji").Select mycnt = Range("B1").Value sheet_name1 = Range("c" & mycnt) Sheets("kekka").Select Sheets("kekka").name = sheet_name1 Sheets("kansuke").Select Sheets("kansuke").Copy Before:=Workbooks("2007年報告.xls").Sheets(3) End Sub (やりたいこと) B1に入っている数値でC1からC10に入っているあるシートの名前(たとえばkansukeとする)を取り、その名前で kekkaというシート名をkansukeという名前に変える。 名前を変えたkansukeというシートを別の2007年報告というbookにコピーを転送する。 (質問)上のコードで実はkansukeと書いてあるところは,B1の値次第で当然いろいろに 変化するため、そのシート名にとらわれない書き方をしたいのですがどう記述すればいいのか わかりません。以上お願いします。
- ベストアンサー
- Visual Basic
お礼
end-u 様、アドバイス有難う御座います。 ご指摘通り、現時点では[データの更新]ボタンで更新させています。 しかし、これを不特定の人が操作する時に操作が判り難い為、どうにかしたいと思っていました。 今時間が取れずにまだ確認出来ていませんが、近いうちに結果報告したいと思います。
補足
end-u 様、やっと試す事ができました。 結果、データを取り込めました。 しかしテキストデータをカンマ区切りで読み込みたいのですが、連続したデータになってしまいます。 マクロ登録前の段階ではカンマ区切りでデータ更新できていたのですが、マクロ登録後はカンマ区切りになりません。 どこを修正すればいいでしょうか? お手数ですが、宜しく御願い致します。