中小企業の働き方改革をサポート>>

エクセルに書き込むマクロのコードを書いていたのですが、

Exl.range(Cells(1, 1), Cells(3, 4)).Font.Bold = True

のような部分が、VisualBasic や OFFICEのVBA上で
参照設定でExcelを指定していると、動くのですが、
同じコードが、WSHでは参照設定ができないせいなのか、
動きません。WSHの場合、どのようにしたらよいのでしょうか。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>Range や Cells は、もっと階層をたどったようなオブジェクトの


>表現方法が必要なのだろうかと思ったのですが・・

VB上の参照設定と同じように、アプリ~ブック~シートですよね。

参考URL:http://www.hi-ho.ne.jp/tetsuzo/windows/wsh/excel …
    • good
    • 0
この回答へのお礼

ありがとうございました。ご指示どおりにやってみると、出来ました。

お礼日時:2002/04/01 12:22

Set Exl = WScript.CreateObject("Excel.Application")



上の1行を追加してからつかえます。

Exl.Range(Cells(1, 1), Cells(3, 4)).Font.Bold = True

この回答への補足

ありがとうございます。
説明が不足していました。すみませんでした。
CreateObject をやっても うまくいかなかったのです。
Set Exl = WScript.CreateObject("Excel.Application")
Exl.Range(Cells(1, 1), Cells(3, 4)).Font.Bold = True
で WSHを実行しても、
型が一致しません。: 'Cells'
というエラーが出ます。
もしかしたら、
Range や Cells は、もっと階層をたどったようなオブジェクトの
表現方法が必要なのだろうかと思ったのですが・・

補足日時:2002/03/31 22:10
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

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

QVBSでエクセル内の行数を取得する方法

VBS初心者です。よろしくお願い致します。

VBSでエクセル内のデータの行数を取得する方法を教えて下さい。

セル1 セル2 セル3 セル4
123   234   875   ads
あい  うえ  458   444

上記がエクセルの内容だとしたら、3行という結果が欲しいのです。

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

Aベストアンサー

>自分でエクセル内のデータを1行にして再度実行すると、値はやはり4と返してきます
書式か何か残ってるんじゃないでしょうか

>objExcel.Visible = false
true にして実行してみると判るかと思いますが、
エクセルを非表示するという設定を(明示的に)しています。

QWSHによるExcelのセルコピー&ペーストの方法

【やりたいこと】
WSHを利用して
1.あるExcelファイル(Aとする)を開く
2.別のExcelファイル(Bとする)を開く
3.Aの特定のシートの特定のセル範囲をコピー
4.Bの特定のシートに、3でコピーしたセル範囲をペースト
5.B上書き保存&閉じる
6.A閉じる

【現状】
以下のようなコードを書いてみたのですが、
ファイルの開閉はできますがコピー&ペーストが
全くできていないようです。
何が問題なのかよくわからず質問させていただきました。
かなり素人なので無駄も多いですが、ぜひご教授願います。
よろしくお願い致します。

-------------------------------------

Set xl1 = Wscript.CreateObject("Excel.Application")
xl1.Visible = false
Set book1 = xl1.WorkBooks.Open(A)
Set mysheet1 = book1.worksheets(特定のシート)

Set xl2 = Wscript.CreateObject("Excel.Application")
xl2.Visible = false
Set book2 = xl2.WorkBooks.Open(B)
Set mysheet2 = book2.worksheets(特定のシート)

mysheet1.Activate
xl1.Range("A1").CurrentRegion.Select
xl1.Selection.Copy

mysheet2.Activate
xl2.Range("A1").Select
xl2.Selection.Pastespecial

'ファイルクローズ
book2.Close false
xl2.Quit

set mysheet2 = Nothing
set book2 = Nothing
Set xl2 = Nothing

book1.Close false
xl1.Quit

set mysheet1 = Nothing
set book1 = Nothing
Set xl1 = Nothing
--------------------------------

【やりたいこと】
WSHを利用して
1.あるExcelファイル(Aとする)を開く
2.別のExcelファイル(Bとする)を開く
3.Aの特定のシートの特定のセル範囲をコピー
4.Bの特定のシートに、3でコピーしたセル範囲をペースト
5.B上書き保存&閉じる
6.A閉じる

【現状】
以下のようなコードを書いてみたのですが、
ファイルの開閉はできますがコピー&ペーストが
全くできていないようです。
何が問題なのかよくわからず質問させていただきました。
かなり素人なので無駄も多いですが、ぜひご教授願います。
...続きを読む

Aベストアンサー

>Set xl1 = Wscript.CreateObject("Excel.Application")
>Set xl2 = Wscript.CreateObject("Excel.Application")
これだとExcelのインスタンスが2つできてしまいます。
2ブックを開くのにExcelを2つ立ち上げる必要はありません。
Set xl1 = Wscript.CreateObject("Excel.Application")
xl1.Visible = false
Set book1 = xl1.WorkBooks.Open(A)
Set mysheet1 = book1.worksheets(特定のシート)
Set book2 = xl1.WorkBooks.Open(B)
Set mysheet2 = book2.worksheets(特定のシート)


で良いはずです。

QvbsからのExcelマクロ呼び出しの際に保存ダイアログが表示されてしまう

vbsからExcelのマクロを呼び出しExcelを閉じる処理を以下のように実施しています。
その際に保存ダイアログが表示されてしまうため非表示としようとコメントアウトされている
ように変更しました。
そしたらダイアログは表示されなくなりましたがstrTextの値が返却されなくなってしまいました。
原因がよくわからないのですがわかりましたらご教授ください。

Set oApp = CreateObject("Excel.Application")
oApp.Workbooks.Open WScript.Arguments(0)

strText = oApp.Run("CheckText")

oApp.DisplayAlerts = False
'oApp.Workbooks.Close saveChanges:=False
oApp.Workbooks.Close

Set oApp = Nothing
WScript.echo(strText)

Aベストアンサー

こんばんは。

単体でファイルを開けたら、単体でファイルを閉じればいいのでは?
その時に、ファイル変更のSaved =False は、初めて通用するはずです。
後は、CheckText の内容ですが、CheckTextの戻り値が、
strText に入っているかの確認はしていません。

できれば、On Error Resume Next を入れておいたほうが無難だと
は思いますが……。

一例:
'-------------------------------------
Set oApp = CreateObject("Excel.Application")
Set xlWb =oApp.Workbooks.Open(WScript.Arguments(0))
strText = oApp.Run("CheckText")
xlWb.Close False
Set oApp = Nothing
WScript.echo(strText)
'-------------------------------------

こんばんは。

単体でファイルを開けたら、単体でファイルを閉じればいいのでは?
その時に、ファイル変更のSaved =False は、初めて通用するはずです。
後は、CheckText の内容ですが、CheckTextの戻り値が、
strText に入っているかの確認はしていません。

できれば、On Error Resume Next を入れておいたほうが無難だと
は思いますが……。

一例:
'-------------------------------------
Set oApp = CreateObject("Excel.Application")
Set xlWb =oApp.Workbooks.Open(WScript.Arguments(0))
s...続きを読む

Qvbsのセル値の取得について

Excelシートからセルに入力された値を取得するプログラムを作成しています。しかし、セルに計算式が記入されたいる場合のみ値を取得している以下の部分で型が一致しないというエラーが発生してしまいます。対処方法を知っている方がおりましたら教えてください。

※計算式でなく文字列が入力されている場合は正常に取得できます。

Dim str
・・・
str=obj.Worksheets("AAA").Range("A1").Value

Aベストアンサー

str=obj.Worksheets("AAA").Range("A1")
str=obj.Worksheets("AAA").Range("A1").Text

とかではどうですか?

QvbsでExcelのシートをコピーするには

vbsでExcelのシートをコピーすることができず、困っています。

雛形のAファイル(Excel)のシートを別のBファイル(Excel)にコピーしたいのですが、
下記コーディングでは、「実行時エラー この変数は宣言されていません。: 'before'」となります。

xlsSheet.Copy before:=xlsBook2.Worksheets("Sheet1")

Excelのマクロに記載して、Excelのコマンドボタンから呼び出すなどすれば動くのですが、
ハンディ端末のサーバ側アプリがvbsで、vbsから行いたいのです。

vbsでExcelファイルのシートをコピーすることはできないのでしょうか。

ご存知の方、ご教授いただければ幸いです。

Aベストアンサー

>xlsSheet.Copy before:=xlsBook2.Worksheets("Sheet1")

VBScriptでは、名前付き引数の指定はできないので、代わりに不要な引数を省略します。

コピーメソッドの仕様は

Copy(Before, After)

ですから

xlsheet.Copy(xlsBook2.Worksheets("Sheet1"))

とやれば、Beforeのみ指定した事になります。

xlsheet.Copy(,xlsBook2.Worksheets("Sheet2"))

とやれば、Afterのみ指定した事になります(カンマがある事に注目)

xlsheet.Copy(xlsBook2.Worksheets("Sheet1"),xlsBook2.Worksheets("Sheet2"))

とやれば、BeforeとAfterの両方を指定した事になります。

xlsheet.Copy()

とやれば、BeforeとAfterの両方を省略した事になります。

このようにVBSでは

Before:=~~~

After:=~~~

のような名前付き引数は指定できません。

>xlsSheet.Copy before:=xlsBook2.Worksheets("Sheet1")

VBScriptでは、名前付き引数の指定はできないので、代わりに不要な引数を省略します。

コピーメソッドの仕様は

Copy(Before, After)

ですから

xlsheet.Copy(xlsBook2.Worksheets("Sheet1"))

とやれば、Beforeのみ指定した事になります。

xlsheet.Copy(,xlsBook2.Worksheets("Sheet2"))

とやれば、Afterのみ指定した事になります(カンマがある事に注目)

xlsheet.Copy(xlsBook2.Worksheets("Sheet1"),xlsBook2.Worksheets("Sheet2"))

とやれば、Be...続きを読む

QVBScriptでfindを使うには??

ExcelのA列に日付がずらずらと入っているのですがその中から「今日」に該当する部分を探したいと思っています。
findを使うことが出来ないでいます。
Const xlValues = -4163
Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.Visible = True
objExcelApp.Workbooks.Open("C:\Book1.xls")
strLastDay = Cstr(Date - 1)
With objExcelApp.WorkSheets("Sheet1").Rangge("A8:A65535")
Set objClm = .Find(Trim(strLastDay),,xlValues)
If Not objClm Is Nothing Then
intCol = objClm.Column
intRow = objClm.Row

このあとどうしたらいいかわかりません・・・お願いします。

Aベストアンサー

なぜFindが使えないのか詳しいことは分かりませんでしたがとりあえず動くようにはしました。
シートのB列とC列を書き換えているので注意してください。

Const xlValues = -4163
Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.Visible = True
objExcelApp.Workbooks.Open ("C:\Book1.xls")

Set ExcelSheet = objExcelApp.Worksheets("Sheet1")
With ExcelSheet

'Cells(1, 2)に検索する日付を入力(Date?)
.Cells(1, 2).Value = Date - 1

'Cells(1, 2)の値をTextプロパティで取得するので見た目を整えておく
.Columns("A:A").EntireColumn.AutoFit
.Columns("B:B").EntireColumn.AutoFit

i = 8 '検索開始行
j = 1 'Cells(j, 3)に見つかった行を入力する
On Error Resume Next

Do
Set rng = .Range("A" & i & ":A65535").Find(.Cells(1, 2).Text, , xlValues)
.Cells(j, 3).Value = rng.Row
j = j + 1
i = rng.Row + 1
Loop Until rng Is Nothing Or i > 65535

On Error GoTo 0
End With

なぜFindが使えないのか詳しいことは分かりませんでしたがとりあえず動くようにはしました。
シートのB列とC列を書き換えているので注意してください。

Const xlValues = -4163
Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.Visible = True
objExcelApp.Workbooks.Open ("C:\Book1.xls")

Set ExcelSheet = objExcelApp.Worksheets("Sheet1")
With ExcelSheet

'Cells(1, 2)に検索する日付を入力(Date?)
.Cells(1, 2).Value = Date - 1

'Cells(1, 2)の値をTextプロパティ...続きを読む

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QVBA オブジェクトが空かどうか判定する

皆様のお知恵を拝借させてください。

エクセルVBAでオブジェクトを入れる変数を定義し、その変数にオブジェクト
が入っているかどうか検査したいのですがどうしたらいいでしょうか。

例えば---
Dim a As Workbook
If a <> nothing then ←この部分が分からない。このままだとエラー。
処理
End if
---------
環境
エクセル2003
WinXPsp1

Aベストアンサー

もし、aが空だったら
If a Is Nothing Then 

もし、aが空じゃなかったら
If Not a Is Nothing Then

QVBSでADOを使ってaccessのテーブルに接続

VBSでADOを使ってaccessのテーブルに接続する方法は?

Sub ADO_test()

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & "D:\【Access】サンプル.mdb"
rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic

MsgBox "test成功です"

rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing

End Sub

をACCESSVBAで実行すると成功しますが
全く同じコードをメモ帳に貼り付けてtest.vbsで保存し、ダブルクリックすると、

行:3
文字:11
エラー:ステートメントの末尾が不正です。
コード:800A0401

のエラーになります。

VBAは少しわかるのですが、VBSに関しては初心者です。
どこを修正すればコードが通るのか教えてください。

VBSでADOを使ってaccessのテーブルに接続する方法は?

Sub ADO_test()

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & "D:\【Access】サンプル.mdb"
rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic

MsgBox "test成功です"

rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing

End Sub

をACCESSVBAで実行すると成功しますが
全く同じコードをメモ帳に貼り付けてtest.vbsで保存...続きを読む

Aベストアンサー

Dim cn 'データ型の指定は出来ません。VBSにお任せになります
Dim rs
const adOpenKeyset = 1
const adLockOptimistic = 3
set cn=createobject("adodb.connection") 'Accessのように参照設定は出来ないので此処で
set rs=createobject("adodb.recordset")

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & "D:\【Access】サンプル.mdb"
rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic 'Accessの定数名では指示できないので実数で
'rs.Open "テーブル1", cn, 1, 3 'これだと後で見ても分からないので、Const で宣言
MsgBox "test成功です"
msgbox rs(0)
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing

かな?
定数の実際の値はイミディエイトウィンドウで
?adOpenStatic とかで返ってくる値を確認してください。

Dim cn 'データ型の指定は出来ません。VBSにお任せになります
Dim rs
const adOpenKeyset = 1
const adLockOptimistic = 3
set cn=createobject("adodb.connection") 'Accessのように参照設定は出来ないので此処で
set rs=createobject("adodb.recordset")

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & "D:\【Access】サンプル.mdb"
rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic 'Accessの定数名では指示できないので実数で
'rs.Open "テーブル1", cn, 1, 3 'これだと後で見...続きを読む

QVBSでExcelシートのコピー

VBSである決まったExcelシートを別なExcelファイルにシートコピーできる方法はないですか?

やりたいことは、Excelファイル「A.xls」内の「Sheet1」というシートをExcelファイル「B.xls」の一番末尾に「Sheet1」をコピーする、です。
(Excelのシート名上で右クリック→「移動またはコピー」→移動先ブック名を選択→「末尾へ移動」、「コピーを作成」にチェック、と同じことをVBS上で行いたいのですが。)

Aベストアンサー

こんな感じでしょうか?

Dim strFileDst
Dim strFileSrc
Dim strCopySheet


strFileDst = "C:\book1.xls" 'コピーする方
strFileSrc = "C:\book2.xls" 'コピーされる方

strCopySheet = "Sheet1" 'コピーする方のシート名


Call CopyExec



Sub CopyExec()
Dim objXls
Dim objBookDst
Dim objBookSrc

Set objXls = CreateObject("Excel.Application")

Set objBookDst = objXls.Workbooks.Open(strFileDst)
Set objBookSrc = objXls.Workbooks.Open(strFileSrc)

Call objBookDst.Sheets(strCopySheet).Copy(,objBookSrc.Sheets(objBookSrc.Sheets.Count))

objBookDst.Close False
objBookSrc.Close True
objBookDst.Close
objBookSrc.Close

objXls.Quit

Set objXls = Nothing


End Sub

こんな感じでしょうか?

Dim strFileDst
Dim strFileSrc
Dim strCopySheet


strFileDst = "C:\book1.xls" 'コピーする方
strFileSrc = "C:\book2.xls" 'コピーされる方

strCopySheet = "Sheet1" 'コピーする方のシート名


Call CopyExec



Sub CopyExec()
Dim objXls
Dim objBookDst
Dim objBookSrc

Set objXls = CreateObject("Excel.Application")

Set objBookDst = objXls.Workbooks.Open(strFileDst)
Set objBookSrc = objXls.Workbooks.Open(strFileSrc)

...続きを読む


人気Q&Aランキング

おすすめ情報