マンガでよめる痔のこと・薬のこと

お世話になります。
WindowsXPでAccess2002を使用しているのですが、AccessVBAを使い特定のエクセルシートのシート名を変更したいと考えているのですが、いろいろ方法を検索しているのですが、そのような事例を発見する事ができませんでした。

引き続き調べて行きますが、良い方法がありましたら、ご教授いただけないでしょうか。
宜しくお願いします。

A 回答 (1件)

Excelがインストールされている環境なら


CreateObjectやNewでExcel.Applicationオブジェクトを作成して
その上で Bookを読み込み Worksheetの名前を変更すればいいのでは

sub Macro1()
Dim oXL as Object
Dim oWB as Object
Dim oSH as Object]
  Set oXL = CreateObject("Excel.Application")
  Set oWB = oXL.WorkBooks.Open("ブックのファイルパス")
  Set oSH = oWB.Worksheeets("シート名")
  oSH.Name = "変更後のシート名"
  oWB.Save
  oWB.Close
  oXL.Quit
  Set oSH = nothing
  Set oWB = nothing
  Set oXL = nothing
End Sub
といった具合でしょう
    • good
    • 1

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qアクセスからエクセルのシートを追加して、名前をつける方法

アクセス2000で、ある所定の条件を満たした時に、規定の場所にあるエクセルファイルの先頭から2番目に空のワークシートを追加し、そのシート名を変数に格納されている値でリネームしようとしております。結構急務なんですが、excel.application~等使っても出来ませんでした・・・。プロフェッショナルな方、誰か方法を教えていただけないでしょうか?よろしくお願いします。

Aベストアンサー

こんにちは。

急ぎということで、取り急ぎで作ったコードです。目的の処理以外は一切おこなっていませんので、カスタマイズしてください。

また、処理速度の点で実行時バインドではなく、参照設定を予め行って下さい。


Option Compare Database

'要参照設定:Microsft Excel x.x Object Library
Sub AddXLWorksheet()

  Dim xlApp As Excel.Application
  Dim WB As Excel.Workbook
  Dim SH As Excel.Worksheet
  Dim strXLfile as stirng

  strXLfile = "C:\TEST.xls" 'Excelブックフルパス

  Set xlApp = Excel.Application
  With xlApp
    .Visible = True
    Set WB = .Workbooks.Open(strXLfile)
    'シートを3番目に追加
    Set SH = .Worksheets.Add(After:=WB.Worksheets(2))
    'シート命名
    SH.Name = "aaaaa" 'ここを変数で渡せば良い
  End With

  Set SH = Nothing
  Set WB = Nothing
  Set xlApp = Nothing

End Sub

こんにちは。

急ぎということで、取り急ぎで作ったコードです。目的の処理以外は一切おこなっていませんので、カスタマイズしてください。

また、処理速度の点で実行時バインドではなく、参照設定を予め行って下さい。


Option Compare Database

'要参照設定:Microsft Excel x.x Object Library
Sub AddXLWorksheet()

  Dim xlApp As Excel.Application
  Dim WB As Excel.Workbook
  Dim SH As Excel.Worksheet
  Dim strXLfile as stirng

  strXLfile = "C:\TEST.xls" 'Excel...続きを読む

QAccess VBAよりExcelのシート名を取得

お世話になります。
Access2010
Windows7 Pro

以下のページを参考にしましたが、「実行時エラー3170 インストール可能なISAMドライバーが見つかりませんでした。」と表示されてしまいます。

http://www.accessclub.jp/bbs5/0005/vba1231.html
Dim Db As DAO.Database
Dim Tbl As DAO.TableDef
Dim xlsFile As String

xlsFile = "ファイルパス"
Set Db = OpenDatabase(xlsFile, True, True, "Excel 14.0;") ←ここで止まる
For Each Tbl In Db.TableDefs
If Right$(Tbl.Name, 1) = "$" Or _
Right$(Tbl.Name, 2) = "$'" Then
'シート名の最後は必ず$が付きます
Debug.Print Tbl.Name
End If
Next Tbl
Db.Close
Set Db = Nothing

なお、参照設定にて「Microsoft DAO 3.6 Object Library」にチェックが入っていないことが原因かと思い、チェックを入れようとしましたが「この名前は既にあるモジュール、プロジェクト、オブジェクトライブラリで使われています。」というメッセージが表示され、チェックを入れることができません。

勉強不足で大変恐縮ですが、これらのメッセージからどういうことが分かりますでしょうか。
ご教授の程、宜しくお願い致します。

お世話になります。
Access2010
Windows7 Pro

以下のページを参考にしましたが、「実行時エラー3170 インストール可能なISAMドライバーが見つかりませんでした。」と表示されてしまいます。

http://www.accessclub.jp/bbs5/0005/vba1231.html
Dim Db As DAO.Database
Dim Tbl As DAO.TableDef
Dim xlsFile As String

xlsFile = "ファイルパス"
Set Db = OpenDatabase(xlsFile, True, True, "Excel 14.0;") ←ここで止まる
For Each Tbl In Db.TableDefs
If Right$(Tbl.Name, 1) = "$" Or _
Right$(...続きを読む

Aベストアンサー

Set Db = OpenDatabase(xlsFile, True, True, "Excel 14.0;") ←ここで止まる

Set Db = OpenDatabase(xlsFile, True, True, "Excel 12.0;") '←ここで止まる
ならOffice2010では出来ましたよ?
アプリケーションのバージョンではなくファイルのバージョン指定っぽいです。

ちょっと蛇足かもしれんが、参考になると思われます。
・・・本来 Null でない Excel 列内の一部の値が Null として返されることがあります・・・
http://support2.microsoft.com/kb/194124/ja

>この名前は既に・・・
Microsoft DAO 3.6 Object Library の上位バージョンの
Microsoft Office 14.0 Access Database Engine Object Library に
チェックが入っていれば OK です。

QAccess-VBAでExcelファイルを作成する。

こんにちわお世話になります。

「Excelにエクスポート」ボタンをクリックすると、Inputboxか何かが表示されて、Pathやファイル名やシート名を入力し、「実行」ボタンを押すと、新規にExcelのBookを、そのPath、ファイル名、シート名で作成する。その後、そのシートにデータを書き込むという作業をしたいのです。
AccessのデータをExcelの任意のシートを開いて書き込むという部分のVBAコードはわかりますので、新規Book作成部分のコードがわかるかたお願いします。
Office97を使用しています。

Aベストアンサー

プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryにチェックを入
れて下さい。

オブジェクトへの参照を格納する変数を事前バインディング。
変数にオブジェクトの参照を代入します。Addメソッドを使って新規workbookと
worksheet オブジェクトを作成します。
値を代入し名前を付けて保存してオブジェクトを開放する。という流れで良いと
思います。

Private Sub Command1_Click()

  On Error Resume Next

  Dim xlApp  As Excel.Application
  Dim xlBook As Excel.Workbook
  Dim xlSheet As Excel.Worksheet

  Set xlApp = CreateObject("Excel.Application")
  Set xlBook = xlApp.Workbooks.Add
  Set xlSheet = xlBook.Worksheets(1)

  ' Excel のセルに値を代入します。
  xlSheet.Cells(1, 1).Value = " "

  ' Worksheet を名前をつけて保存します。ダイアグボックス等を使用して
   パスやBook名など入力できるようにしてもOKです。
  xlSheet.SaveAs "c:\Temp.xls"

  xlApp.Quit

  Set xlSheet = Nothing
  Set xlBook = Nothing
  Set xlApp = Nothing
End Sub

こんな感じでしょうか。

プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryにチェックを入
れて下さい。

オブジェクトへの参照を格納する変数を事前バインディング。
変数にオブジェクトの参照を代入します。Addメソッドを使って新規workbookと
worksheet オブジェクトを作成します。
値を代入し名前を付けて保存してオブジェクトを開放する。という流れで良いと
思います。

Private Sub Command1_Click()

  On Error Resume Next

  Dim xlApp  As Excel.Application
  Dim xlBook As Excel.Workbook
...続きを読む

QACCESSのVBAにてExcelのシートをコピーしたい

入庫.xlsに現在、"原紙"というシートがあります。
入庫.xlsには、"原紙"と入庫のあった日のシートがあるようにしたいのです。
今日、入庫があれば、入庫.xlsには
"原紙"と"20"のシートが存在するようにしたいのです。
AccessのVBAにて1文でシートのコピーってできないでしょうか?
Dim oApp As Object
Dim StWk1 As String
Dim SHizk As String
Dim Hizk As Integer
Hizk = DatePart("d", Me![入庫日付])
SHizk = CStr(Hizk)
StWk1 = "c:入庫.xls"
Set Xls = GetObject(StWk1)
Xls.Application.Windows(1).Visible = True
Xls.Application.worksheets("原紙").Copy After:=Xls.Application.worksheets(SHizk)
Xls.Application.worksheets(SHizk).Activate

上記のように作成してみたのですが、実行すると、
Xls.Application.worksheets("原紙").Copy After:=Xls.Application.worksheets(SHizk)
のところで、エラーになります。
実行エラー'9':
インデックスが有効範囲にありません。
のメッセージが表示されます。
教えてください。

入庫.xlsに現在、"原紙"というシートがあります。
入庫.xlsには、"原紙"と入庫のあった日のシートがあるようにしたいのです。
今日、入庫があれば、入庫.xlsには
"原紙"と"20"のシートが存在するようにしたいのです。
AccessのVBAにて1文でシートのコピーってできないでしょうか?
Dim oApp As Object
Dim StWk1 As String
Dim SHizk As String
Dim Hizk As Integer
Hizk = DatePart("d", Me![入庫日付])
SHizk = CStr(Hizk)
StWk1 = "c:入庫.xls"
Set Xls = GetObject...続きを読む

Aベストアンサー

Private Sub CmdCopySheet_Click()
  
  'Dim xlApp As Excel.Application
  'Dim xlBook As Excel.Workbook
  'Dim xlSheet As Excel.Worksheet
  Dim xlApp As Object
  Dim xlBook As Object
  Dim xlSheet As Object
  Dim stFileName As String
  Dim stSheetName As String
  Dim lngCnt As Long
  
  'ファイル名指定
  stFileName = "C:\入庫.xls"
  
  'コピーシート名指定
  stSheetName = Format(Date, "dd")
  
  'エクセル展開
  'Set xlApp = New Excel.Application
  Set xlApp = CreateObject("Excel.Application")
  Set xlBook = xlApp.Workbooks.Open(stFileName)
  
  'コピー先取得
  For Each xlSheet In xlBook.Worksheets
    If xlSheet.Name = stSheetName Then
      If Len(stSheetName) = 2 Then
        stSheetName = stSheetName & " (2)"
      Else
        stSheetName = Left(stSheetName, 2) & " (" & Val(Mid(stSheetName, 5)) + 1 & ")"
      End If
    End If
    lngCnt = lngCnt + 1
  Next
  
  'シートコピー
  Set xlSheet = xlBook.Worksheets("原紙")
  xlSheet.Copy , xlBook.Worksheets(lngCnt)
  
  'シート名変更
  lngCnt = lngCnt + 1
  Set xlSheet = xlBook.Worksheets(lngCnt)
  xlSheet.Name = stSheetName
  
  'エクセルファイルを閉じる
  xlBook.Close (True)
  xlApp.Quit
  
  'オブジェクトの開放
  Set xlSheet = Nothing
  Set xlBook = Nothing
  Set xlApp = Nothing
  
  '完了メッセージ
  MsgBox "シートをコピーしました"
  
End Sub

作成時は、参照設定で「Microsoft Excel *.* Object Library」にチェックをつけておくと楽ですよ
作成し終わったら、CreateObjectを使って参照設定を元に戻しておけば、バージョン違いのエクセルにも対応できます

Private Sub CmdCopySheet_Click()
  
  'Dim xlApp As Excel.Application
  'Dim xlBook As Excel.Workbook
  'Dim xlSheet As Excel.Worksheet
  Dim xlApp As Object
  Dim xlBook As Object
  Dim xlSheet As Object
  Dim stFileName As String
  Dim stSheetName As String
  Dim lngCnt As Long
  
  'ファイル名指定
  stFileName = "C:\入庫.xls"
  
  'コピーシート名指定
 ...続きを読む

QACCESS側からEXCELの書式を設定するには?

ACCESSからEXCELにエクスポートした際、ACCESS側でEXCELの書式設定は行えますか?(例:セルAの幅がX桁等)

データ件数が多すぎて、下記VBでエクスポート処理をしています。

DoCmd.TransferSpreadsheet acExport, 8, "XXX", "\XX.xls", False, ""

お手数ですが、ご教授願います。

Aベストアンサー

例えばボタンにエクスポートの処理を書いているのでしたら
ボタンをCmd1とすると

Private Sub Cmd1_Click()
On Error GoTo Err_Cmd1_Click

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

DoCmd.TransferSpreadsheet acExport, 8, "XXX", "\XX.xls", False, ""

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("\XX.xls")
Set xlSheet = xlBook.Worksheets(1)

xlApp.Cells.Select
xlApp.Cells.EntireColumn.AutoFit
xlApp.Range("A1").Select
xlApp.Visible = False

xlApp.Quit

Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

Exit_Cmd1_Click:
Exit Sub

Err_Cmd1_Click:
MsgBox Err.Description
Resume Exit_Cmd1_Click

End Sub

こんな感じで記述してください。

#1の中でxlApp.DisplayAlerts = False これは除いてください。保存しますかのメッセージが出ます。

例えばボタンにエクスポートの処理を書いているのでしたら
ボタンをCmd1とすると

Private Sub Cmd1_Click()
On Error GoTo Err_Cmd1_Click

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

DoCmd.TransferSpreadsheet acExport, 8, "XXX", "\XX.xls", False, ""

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("\XX.xls")
Set xlSheet = xlBook.Worksheets(1)

xlApp.Cells.Select
...続きを読む

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QACCESSからexcelブックを開いて保存したい

ACCESS初心者です。
仕事でどうしても必要に迫られて、受付管理のツールを作ることになりました。


1つの注文で、受付ID(オートナンバー)が付与されます。

メインフォームにタブオーダーをつけてサブフォームを複数配置しています。
そのサブフォームにボタンを置いて
Access から既存のエクセルファイルをテンプレートとして開いて
テンプレートに入力後、受付IDをファイル名にして、テンプレートとは別もので保存
保存後は、ボタンを押したときに受付IDと同じエクセルファイルが開く

このようなことをやりたいと思っています。

ネットでいろいろ探しているのですが
ファイルを開くのは見つかっても、保存したものを開くのが見つからず
そもそもできるのかどうかもわかっておりません。

自分にスキルがなく、あれこれ凝ったものは作れないので、
保存は自動じゃなくて、自分で別名で保存にしてもかまわないのですし
フォームに入力したものが、テンプレートに反映(出力?)されなくてもかまわないです。


参考になるサイト等ありましたら、ご教示いただけますか。

どうぞよろしくお願いいたします。


下記はやりたいことに近いかなと思って見つけたサイトです。
http://www.nurs.or.jp/~ppoy/access/access/acX013.html
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1220895032
http://accessclub.jp/bbs/0227/beginers70136.html

ACCESS初心者です。
仕事でどうしても必要に迫られて、受付管理のツールを作ることになりました。


1つの注文で、受付ID(オートナンバー)が付与されます。

メインフォームにタブオーダーをつけてサブフォームを複数配置しています。
そのサブフォームにボタンを置いて
Access から既存のエクセルファイルをテンプレートとして開いて
テンプレートに入力後、受付IDをファイル名にして、テンプレートとは別もので保存
保存後は、ボタンを押したときに受付IDと同じエクセルファイルが開く

このよう...続きを読む

Aベストアンサー

1番目のリンクの方のサイト、すごいですね。テクニカルかつ分かりやすいです。
同じ方のサイト、#001ではEXCELファイルを新規に作って、データベース内のデータを埋めて保存して閉じる
やり方を紹介しています。
http://www.nurs.or.jp/~ppoy/access/access/acX001.html

リンクの#013では、テンプレートを元にデータを埋め込み、EXCELの画面を表示したところで、マクロを終了させる
(保存はユーザーの手動に任せる)方法を紹介しています。

この#013の最後に#001の保存方法を組み合わせれば、たぶん出来ると思います。

#013の末尾(http://www.nurs.or.jp/~ppoy/access/access/acX013.html)
--------------------------------------------------------------
'データ貼り付け
With wkb.Worksheets(stSheet)
.Range(stRng).CopyFromRecordset Data:=rst
End With

'#001の保存コード(http://www.nurs.or.jp/~ppoy/access/access/acX001.html)

'保存ダイアログからの入力を受けて保存
' fName = xls.Application.GetSaveAsFilename(,"Microsoft Excel(*.xls),*.*", 1)

'保存ダイアログを使わず、fnameを自動的に指定する方法(jacob-wk9付け足し)
fName=rst!受付ID

If fName <> False Then
wkb.SaveAs FileName:=fName
MsgBox "新規ブックは、「" & fName & "」の名前で保存しました!", vbOKOnly
Else
MsgBox "新規ブックは保存できませんでした。", vbOKOnly
End If

Set rst = Nothing: Set cnn = Nothing

Exit_opnXLtmp:
Set wkb = Nothing: Set xls = Nothing
Exit Sub

Err_opnXLtmp:
MsgBox Err.Description
Resume Exit_opnXLtmp
End Sub
----------------------------------------------------------------------

こんな感じになるのではないでしょうか。

1番目のリンクの方のサイト、すごいですね。テクニカルかつ分かりやすいです。
同じ方のサイト、#001ではEXCELファイルを新規に作って、データベース内のデータを埋めて保存して閉じる
やり方を紹介しています。
http://www.nurs.or.jp/~ppoy/access/access/acX001.html

リンクの#013では、テンプレートを元にデータを埋め込み、EXCELの画面を表示したところで、マクロを終了させる
(保存はユーザーの手動に任せる)方法を紹介しています。

この#013の最後に#001の保存方法を組み合わせれば、...続きを読む

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

Qアクセスvbaでエクセルブックを保存

アクセス初心者です。よろしくお願いします。
アクセスのフォームに表示したデータをエクセルのシートにコピーして名前を付けて保存させたいです。
テーブル等のエクスポートではありませんのでDoCmdでの保存ではなくSaveAsで保存したいです。
いろいろなサイトを見て新規ブックを開いて保存することはできましたが、既存ブックを開いて別名で保存しようとするとオブジェクト云々、オートメーション云々のエラーになります。
検索したサイトからの引用ですが、
  Set xlBook = xlApp.Workbooks.Add
  Set xlSheet = xlBook.Worksheets(1)
  xlSheet.SaveAs "c:\Temp.xls"
はできるのですが、
  Set xlBook = xlApp.Workbooks.Open("C:\temp\原紙.xls")
  Set xlSheet = xlBook.WorkSheets(1)
  fname = "C:\temp\" & Format(Date, "yyyymmdd") & "売上一覧.xls"
  xlBook.SaveAs Filename:=fname
だとエラーになります。
既に書式等を設定したブックを使いたいので後者のように既存のブックを使いたいのですが、どうしたらよろしいでしょうか。
職場に端末を持ち込めないため対応が遅くなりますがよろしくお願いします。

アクセス初心者です。よろしくお願いします。
アクセスのフォームに表示したデータをエクセルのシートにコピーして名前を付けて保存させたいです。
テーブル等のエクスポートではありませんのでDoCmdでの保存ではなくSaveAsで保存したいです。
いろいろなサイトを見て新規ブックを開いて保存することはできましたが、既存ブックを開いて別名で保存しようとするとオブジェクト云々、オートメーション云々のエラーになります。
検索したサイトからの引用ですが、
  Set xlBook = xlApp.Workbooks.Add
  Se...続きを読む

Aベストアンサー

昔の記憶を頼りに・・・。
1:新規ブックを開く。
2:ワークシートを全て削除
3:既存のブックを開く。
4:既存のブックのシートを新規ブックにコピー
5:新規ブックを保存
※その他の処理は省略。

おおざっぱですが、こんな感じで出来たように記憶しています。
参考までに・・・。

' 新規Sheetを開き、ワークシートを空にする。
Set nlBook = nlApp.Workbooks.Add
Dim i As Integer
For i = nlBook.Worksheets.Count To 1 Step -1
nlBook.Worksheets(i).Delete
Next i

' 元になるSheetを開く
Set olBook = olApp.Workbooks.Open("C:\temp\原紙.xls")
Set olSheet = olBook.WorkSheets(1)

' 元になるシートを新規にコピーする
olSheet.Copy After:=nlBook.Worksheets("Sheet1")

' 新規Sheetを保存する
fname = "C:\temp\" & Format(Date, "yyyymmdd") & "売上一覧.xls"
nlBook.SaveAs Filename:=fname

昔の記憶を頼りに・・・。
1:新規ブックを開く。
2:ワークシートを全て削除
3:既存のブックを開く。
4:既存のブックのシートを新規ブックにコピー
5:新規ブックを保存
※その他の処理は省略。

おおざっぱですが、こんな感じで出来たように記憶しています。
参考までに・・・。

' 新規Sheetを開き、ワークシートを空にする。
Set nlBook = nlApp.Workbooks.Add
Dim i As Integer
For i = nlBook.Worksheets.Count To 1 Step -1
nlBook.Worksheets(i).Delete
Next i

' 元になるSheetを開く
Set olBoo...続きを読む

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。


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

人気Q&Aランキング