advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 71 for ExecuteExcel4Macro 閉じた|開いて|開かず (0.012 sec.)
executeexcel4macro (140), 閉じた (629), 開いて (4904), 開かず (263)
[[20111205114113]]
#score: 14119
@digest: 46050a3b2ec55e6e3515a926abfcae8b
@id: 56870
@mdate: 2011-12-05T10:02:25Z
@size: 5461
@type: text/plain
#keywords: getoutrng (40061), radd (11037), ado (3748), executeexcel4macro (3583), module3 (3145), sql (3010), fullname (2476), typename (2253), sample (1931), 接続 (1456), 変有 (1285), ブッ (1246), ・、 (1245), function (1241), 取得 (1224), error (1180), close (1154), ans (1122), address (1054), 開か (880), resume (868), thisworkbook (852), 紹介 (768), 準モ (764), false (716), 、ms (668), path (627), ック (583), xls (576), モジ (569), explicit (543), msgbox (543)
『ブックを開かずにセルが日付であるかを判定する。』(setcom)
ブックを開かずに、c:¥[test.xls]sheet1'!R1C1のセルの値は、 MsgBox Application.ExecuteExcel4Macro("'c:¥[test.xls]sheet1'!R1C1") これで取得出来ましたが、 IsDate関数で、このセルか日付であるかを知りたいので、 MsgBox Application.ExecuteExcel4Macro("IsDate('c:¥[test.xls]sheet1'!R1C1)") こうしてみましたが、型が一致しないと言われます。 方法はあるでしょうか? ---- ExecuteExcel4Macro は値しか取得できず、書式は参照できないようです。 http://www.moug.net/tech/exvba/0060037.html (Mook) ---- 「ブックを開かず」という要望はしゅっちゅう目にするけど、なぜかな? かっこいいから?それとも、「きっと処理スピードが早いだろう」? 後者は、ケースによっては、(Mookさんが紹介されたページにも説明があるように)逆に遅くなることもある。 普通に Application.ScreenUpdating = False ブックを開く セルから値を取得する ブックを閉じる Application.ScreenUpdating = True これで、全く問題が無いと思うけどね。 ただ、どうしてもということなら、いったんVariant型変数に値を取り込んで その値を評価するということはできる。ただ、紹介ページにもあるように 日付であればDouble型のシリアル値、つまり、通常の数値と区別がつかない形。 これをどう扱うか、ここは悩むところだね。そこが「日付」だったか「数値」だったかは 「神のみぞ知る」なので。 (ぶらっと) ---- 「下手な考え休むに似たり」かな。 ぶらっとさん案に一票。 (Mook) ---- なるほどです。 そうです、処理がさぞかし早いだろうと思うわけです。 欲しい場所が決まってるので、開いたり閉じたりと やらなくていいので、便利に感じました。 大変有り難う御座いました。 (setcom) ---- 解決後ですが・・・、私も原則として、 ブックをOpen---->取得したいセルの取得---->ブックのCloseで殆ど 事足りると思っています。が、情報として・・・、ADOを使えば・・・。 新規ブックにて・・・、 標準モジュール(Module1)にExcel_Ado関連プロシジャー '================================================================ Option Explicit '================================================================ Private cn As Object '================================================================ Function open_ado_excel(book_fullname As String) As Long 'ADOでExcelブックに接続 Dim link_opt As String On Error Resume Next link_opt = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & book_fullname & ";" & _ "Extended Properties='Excel 8.0; HDR=No'" Set cn = CreateObject("ADODB.Connection") cn.Open link_opt open_ado_excel = Err.Number On Error GoTo 0 End Function '=========================================================== Sub close_ado() 'ADOでの接続解除 On Error Resume Next cn.Close Set cn = Nothing On Error GoTo 0 End Sub '=========================================================== Function get_exec_sql(sql_str, rs As Object) As Long 'SQLでレコードセット取得 On Error Resume Next Set rs = cn.Execute(sql_str) get_exec_sql = Err.Number On Error GoTo 0 End Function 別の標準モジュール(Module2)に '============================================================ Function getoutrng(ByVal bkpath As String, ByVal shtnm As String, ByVal rng As Range) As Variant '指定されたブックから単一セルの内容を取得する Dim sql As String Dim radd As String Dim rs As Object getoutrng = [na()] If open_ado_excel(bkpath) = 0 Then If InStr(rng.Address(False, False), ":") = 0 Then radd = rng.Address(False, False) & ":" & rng.Address(False, False) Else radd = rng.Cells(1).Address(False, False) & ":" & rng.Cells(1).Address(False, False) End If sql = "SELECT * FROM [" & shtnm & "$" & radd & "]" If get_exec_sql(sql, rs) = 0 Then getoutrng = rs.fields(0).Value On Error Resume Next rs.Close On Error GoTo 0 Call close_ado Set rs = Nothing End If End If End Function 別の標準モジュール(Module3)に '========================================================== Option Explicit Sub mk_sample_bk() With Workbooks.Add.Worksheets(1) .Range("a1").Value = Now() .Range("a2").Value = CDbl(Now()) .Range("a3").Value = "'" & CStr(Now()) With .Parent .SaveAs ThisWorkbook.Path & "¥sample.xls" .Close False End With End With End Sub '================================================================= Sub chk_range() Dim ans As Variant ans = getoutrng(ThisWorkbook.Path & "¥sample.xls", "Sheet1", Range("a1")) MsgBox TypeName(ans) ans = getoutrng(ThisWorkbook.Path & "¥sample.xls", "Sheet1", Range("a2")) MsgBox TypeName(ans) ans = getoutrng(ThisWorkbook.Path & "¥sample.xls", "Sheet1", Range("a3")) MsgBox TypeName(ans) End Sub *コードは以上です。コードの実行は必ず、適当な名前で保存してから行ってください。 まず、mk_sample_bkを実行してサンプルブックを作成してください。 Sheet1のA1には、日付 A2には、Double型の数値、A3には、日付の形をした文字列 が、入力された sample.xlsが作成されます。 chk_rangeを実行してください。sample.xlsをブックとしてExcelでは、開かずに Sheet1のセルA1,A2,A3のデータの型を表示しています。 このようにADOを使うと型の取得も可能ですが・・・、 ADOにも問題点がないわけではありません。 それは、色々試してみるとわかりますから、興味があるなら、試してみてください ichinose ...
https://www.excel.studio-kazu.jp/wiki/kazuwiki/201112/20111205114113.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97056 documents and 608292 words.

訪問者:カウンタValid HTML 4.01 Transitional