半角チルダ

ExcelVBA、その他。
覚え書きや、補足資料などのスクラップブック。
end-u(1037781)

■VBA VBProject.References

2010-11-30 21:30:00 | scrap
#ゃ、全部scrapじゃん、という意見もあるかもしれないですけれどもXD


'ActiveWorkbookの参照設定済みライブラリ列挙
Sub try()
  Const x As Long = 4
  Dim cnt As Long
  Dim i  As Long
  Dim v
  Dim ret() As String

  On Error GoTo extLine
  With ActiveWorkbook.VBProject.References
    cnt = .Count
    ReDim ret(0 To cnt, 1 To x)
    For Each v In Array("Name", "Description", "FullPath", "GUID")
      i = i + 1
      ret(0, i) = v
    Next
    For i = 1 To cnt
      With .Item(i)
        ret(i, 1) = .Name
        ret(i, 2) = .Description
        ret(i, 3) = .FullPath
        ret(i, 4) = .GUID
        'Debug.Print ret(i, 1), ret(i, 2), ret(i, 3), ret(i, 4)
      End With
    Next
  End With
  '新規Book追加して列挙
  With Workbooks.Add(xlWBATWorksheet).Sheets(1).Range("A1").Resize(cnt + 1, x)
    .Value = ret
    .Columns.AutoFit
  End With

extLine:
  With Err()
    If .Number <> 0 Then
      MsgBox .Number & "::" & .Description
    End If
  End With
End Sub

※Excelメニュー[Alt][t][m][s]で

#2002/2003
[信頼できる発行元]..[□ VisualBasicプロジェクトへのアクセスを信頼する]
#Excel2007/2010
[開発者向けのマクロ設定]..[□ VBAプロジェクトオブジェクトモデルへのアクセスを信頼する]

チェックが必要。
Comment
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

■VBA QueryTable.Parameters

2010-11-29 21:00:00 | scrap
この期に及んで新カテゴリ追加してみました。
単なる『ガラクタ置き場』です。
ネタが枯渇してきたこともあり、サンプルコードを簡易的にアップしてみようかな、程度の試みです。
基本的に、画像や解説文はありません。..色もありません。
#不親切の度合いがますます...orz



'Excel。パラメータクエリを設定したSampleBookそのものを作成するコード。
Sub try()
  Dim ws  As Worksheet
  Dim fName As String

  'カレントフォルダに新規Book作成保存。既存ファイルの上書きに注意。
  fName = Application.DefaultFilePath & "\TMP" & Format$(Date, "yyyymmdd")
  With Workbooks.Add(xlWBATWorksheet)
    With .Sheets(1).Range("A1:C6")
      .Rows(1).Value = [{"日付","担当者","訪問先"}]
      .Rows(2).Value = [{"4月1日","佐藤","A"}]
      .Rows(3).Value = [{"4月2日","鈴木","B"}]
      .Rows(4).Value = [{"4月2日","加藤","C"}]
      .Rows(5).Value = [{"4月3日","佐藤","D"}]
      .Rows(6).Value = [{"4月3日","鈴木","E"}]
    End With
    .SaveAs fName
    'パラメータクエリ例。
    'B1セル変更時更新。基本的には手作業で設定できるのでマクロ不要。
    Set ws = .Sheets.Add
    ws.Name = "QueryTable例"
    ws.Range("A1:B1").Value = [{"日付","4月1日"}]
    With ws.QueryTables.Add(Connection:="ODBC;DSN=Excel Files;DBQ=" & fName, _
                Destination:=ws.Range("A3"))
      .CommandText = "SELECT [担当者], [訪問先] FROM [Sheet1$] WHERE ([日付]=?)"
      .FieldNames = False
      .RefreshStyle = xlOverwriteCells
      .AdjustColumnWidth = False
      With .Parameters.Add("日付", xlParamTypeDate)
        .SetParam xlRange, ws.Range("B1")
        .RefreshOnChange = True
      End With
      .Refresh False
    End With
  End With

  Set ws = Nothing
End Sub

パラメータクエリの設定操作についてはこちらがおすすめ。
『Excel豆知識』
[41-1 外部データの取り込み(パラメータークエリの利用)]
Comment
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする