Integrated Microsoft Visual Basic for Applications (VBA)を使用する

  • マクロを作成/実行する
  • マクロのプログラミング
  • プログラム入力/出力用のフォームを使用する
  • VbaViewウィンドウのプログラミング
  • VBAコードを配布する
  • MacrosウィンドウとVbaViewウィンドウ間の違い
  • Visual Basicプログラミングのヒント

関連項目

  • サンプル・ロジック・アナライザVBAプログラム - http://www.agilent.com/find/16900_SW_Download

© Agilent Technologies, Inc. 2001-2004


マクロを作成/実行する

Microsoft Visual Basic for Applications (VBA)では、マクロは、アプリケーションを自動化するためユーザ・インタフェースから実行できるSubプロシージャ（パラメータなし）です。

マクロは、アプリケーションの機能を拡張します。マクロを使用して、アプリケーション内、あるいはアプリケーションにまたがる機能を実行できます。例えば、ロジック・アナライザのマクロによってMicrosoft Excelのインスタンスを開き、ロジック・アナライザからデータをコピーすることができます。

ロジック・アナライザでは、マクロは通常、次のいずれかのカテゴリに含まれます。

  • 制御：マクロは、ロジック・アナライザをスタートし、結果を保存して、ロジック・アナライザを再スタートできます。

  • 解析：マクロは、ロジック・アナライザをスタートし、捕捉したデータでトリガするには複雑すぎるイベントの発生を検索できます。イベントが検出されない場合、イベントが検出されるまでロジック・アナライザを再スタートできます。

  • エクスポート：マクロは、ロジック・アナライザのデータをExcel、Access、MathWorks MATLAB、Agilentベクトル・シグナル・アナライザ、National Instruments LabVIEW、Agilent VEE、SysStatへエクスポートできます。マクロは、データをロジック・アナライザからパターン・ジェネレータ・モジュールへ直接コピーできます。

マクロとは異なる別のカテゴリのVBAプログラムがあります。

  • グラフ：追加VBA機能の一部として、VbaViewウィンドウでXY散布図、棒グラフ、線グラフ、円グラフなどのグラフ機能を使用できます。VbaViewウィンドウのプログラミングを参照してください。

マクロを作成するには

  1. Agilent Logic Analyzerアプリケーションを実行します。

  2. Tools>Macro>Macros...を選択するか、ALT+F8キーボード・ショートカットを押します。

  3. Macrosダイアログで、Macros inドロップ・ダウンを使用して、マクロを作成するプロジェクトを選択します。

    どちらかを選択します。

    • MyConfigMacros－マクロが、ALAフォーマット・ロジック・アナライザ構成ファイルと一緒に保存されます。

    • MyGlobalMacros－マクロが、Agilent Logic Analyzerアプリケーションを終了するときに"My Documents\Agilent Technologies\Logic Analyzer\Vba Files\MyGlobalMacros.alv"に保存され、次回アプリケーションを起動したときに自動的にロードされます。

  4. Macrosダイアログで、希望のマクロ名を入力し、Createをクリックします。

  5. Visual Basic Editorで、プログラムを入力します（マクロのプログラミングを参照してください）。

  6. Visual Basic Editorウィンドウを閉じます。

マクロを実行するには

  • Agilent Logic Analyzerアプリケーションで、Tools>Run Macro>(マクロの名前)を選択します。

または:

  1. Agilent Logic Analyzerアプリケーションで、Tools>Macro>Macros...を選択するか、ALT+F8キーボード・ショートカットを押します。

  2. Macrosダイアログで、実行するマクロを選択し、Runをクリックします。

関連項目

  • MacrosウィンドウとVbaViewウィンドウ間の違い


マクロのプログラミング

  • Tools>Macros>メニューからマクロを利用できるようにするには、マクロが（非公開ではなく）公開されており、パラメータなしである必要があります。

  • ロジック・アナライザ測定器全体のルート・オブジェクトはAgtLAです。このオブジェクトは、ロジック・アナライザの両サブオブジェクト（Modules、Windowsなど）へのアクセスと、ロジック・アナライザ固有のデータ型に使用されます。

  • 例えば、ロジック・アナライザをスタートするには:

    AgtLA.Run
AgtLA.WaitComplete(999)

    注記:

    測定器オブジェクトへのこのアクセス方法は、COMオートメーションを使ってロジック・アナライザをリモートで制御するときとは異なります。COMオートメーション・オンライン・ヘルプの例を参照するときには、この点に留意してください。

  • ロジック・アナライザからデータを抽出するには、GetDataBySampleメソッドを参照してください。

  • ユーザ入力または結果表示用のフォームを作成するには、プログラム入力/出力用のフォームを使用するを参照してください。

  • VbaViewとMacroとの違いについての簡単な説明について、およびそれぞれを使用するときには、MacrosウィンドウとVbaViewウィンドウ間の違いを参照してください。

  • Visual Basic構文については、Visual Basicの構文を参照してください。

  • 簡単なマクロの例については、以下を参照してください。

    • 制御マクロの例
    • 解析マクロの例
    • エクスポート・マクロの例

    詳細なマクロの例については、Agilent Logic Analyzerアプリケーションに付属のFindEdgesサンプル・マクロとRepetitiveSaveToFileサンプル・マクロを参照してください。


制御マクロの例

Option Explicit   ' Must define all variables.

Sub RunNTimes()

  Dim nCompletedRuns As Integer
  Dim i As Integer
  Dim strFile As String

  ' Use a loop to go through each of the runs.
  nCompletedRuns = 0
  For i = 1 To 5

    AgtLA.Run
    AgtLA.WaitComplete (999)

    'Given a file type, do the requested save
    strFile = "c:\LA\Data\RunNTimes" + VBA.LTrim(VBA.Str(i)) + ".ala"
    Call AgtLA.Save(strFile)   ' This tells the logic analyzer to save.
    AgtLA.Modules(0).WaitComplete (99)

    nCompletedRuns = nCompletedRuns + 1
    MsgBox (VBA.Str(nCompletedRuns) + " run(s) completed.")
  Next i

End Sub


解析マクロの例

Option Explicit   ' Must define all variables.

' This finds the first occurrence of a rising edge on bit 0
' of My Bus 1 from the beginning of the data.

Public Sub SimpleFind()

  Dim myWindow As AgtLA.Window
  Dim theFindResult As AgtLA.FindResult
  Dim strEvent As String
  Dim dTimeFound As Double

  ' Set the window object.
  Set myWindow = AgtLA.Windows("Waveform-1")

  ' Get the XML based string representing the edge.
  strEvent = "<Event>" + _
             "<BusSignal Name='My Bus 1' Bit='0' Operator='Rising Edge' />" + _
             "</Event>"

  ' Invoke the find command.
  Set theFindResult = myWindow.Find(strEvent, _
                                    1, _
                                    "F", _
                                    "Beginning Of Data", _
                                    "Present")

  ' Get the time where the result was found.
  If (theFindResult.Found) Then dTimeFound = theFindResult.TimeFound

End Sub


エクスポート・マクロの例

データを別のアプリケーションへエクスポートするとき、VBAプロジェクトが、そのアプリケーションのオブジェクト・ライブラリを参照することを確認する必要があります。

  1. Visual Basic EditorのProject Explorerウィンドウで、マクロが存在するVBAプロジェクトを選択します（またはプロジェクトのFormまたはModuleを選択します）。

  2. Tools>References...を選択します。

  3. Referencesダイアログで、データをエクスポートするアプリケーションのオブジェクト・ライブラリをチェックします。

    例えば、Internet Explorerのオブジェクト・ライブラリは、"Microsoft Internet Controls"です。

  4. OKをクリックします。

例

Option Explicit   ' Must define all variables.

Public myIEApp As SHDocVw.InternetExplorer   ' This is the IE application.
Public myModule As AgtLA.Module
Public nExportToIEStartSample As Long        ' Starting sample.
Public nExportToIEEndSample As Long          ' Ending sample.
Public ExportToIELogicAnalyzerData As Collection   ' Data collected from the logic analyzer.

Sub ExportDataToIE()

  Dim strHTML As String
  Dim nSample As Long
  Dim myData As AgtLA.SampleBusSignalData

  On Error GoTo noData

  nExportToIEStartSample = -10
  nExportToIEEndSample = 10
  Set myModule = AgtLA.Modules(0)
  Set myData = myModule.BusSignals(0).BusSignalData
  nSample = myData.StartSample   ' If error, there is no data.

  Call CreateIEObject         ' Create the new IE object if one isn't already available.
  Call GetLogicAnalyzerData   ' Get the data from the logic analyzer.

  strHTML = "<HTML><TITLE>Exporting Data to IE</TITLE><H1>Exporting Data to External Applications</H1>"
  strHTML = strHTML + "<P>The data below was exported from the logic analyzer to Windows Internet "
  strHTML = strHTML + "Explorer using the Advanced Customization Environment.  This example "
  strHTML = strHTML + "demonstrates how to easily launch and export data to other PC "
  strHTML = strHTML + "applications from within the logic analyzer application."
  strHTML = strHTML + "<P>"
  strHTML = strHTML + "Here's the requested data from your last run."
  strHTML = strHTML + "<P>"
  strHTML = strHTML + "<TABLE BORDER>"
  strHTML = strHTML + GetHeaderString

  'Go through the data we acquired from the logic analyzer and display it
  'We obtain the data row by row
  For nSample = nExportToIEStartSample To nExportToIEEndSample
    strHTML = strHTML + GetRowString(nSample)
  Next nSample
  strHTML = strHTML + "</TABLE>"
  strHTML = strHTML + "</HTML>"

  myIEApp.Document.Body.innerHTML = strHTML

  Exit Sub

noData:
  MsgBox ("There is no data.  Press Run button; then, run macro again.")

End Sub

' This subroutine creates a new IE object, but only if one is needed.
' The IE object is a new instance of the Internet Explorer application.
Private Sub CreateIEObject()
  If (IsIEAlreadyRunning() = False) Then
    Set myIEApp = CreateObject("InternetExplorer.Application")
    myIEApp.GoHome

    ' Wait until page loading complete before continuing.
    While myIEApp.ReadyState <> READYSTATE_COMPLETE
      DoEvents
    Wend
      myIEApp.Visible = True
  End If
End Sub

Private Function IsIEAlreadyRunning() As Boolean
  On Error GoTo invalidIE

  ' First, check to see if the IE app variable is empty.
  If (IsEmpty(myIEApp)) Then
    IsIEAlreadyRunning = False
    Exit Function
  End If

  ' Now, see if it is nothing.
  If (myIEApp Is Nothing) Then
    IsIEAlreadyRunning = False
    Exit Function
  End If

  If (myIEApp.Visible = False) Then
    IsIEAlreadyRunning = False
    Exit Function
  End If
  IsIEAlreadyRunning = True
  Exit Function

invalidIE:
  IsIEAlreadyRunning = False

End Function

' We need to keep all of the logic analyzer data in memory at one time,
' so we store it to a collection called ExportToIELogicAnalyzerData.
' This collection contains arrays of strings; one array for each Bus
' or Signal in this window.
Private Sub GetLogicAnalyzerData()
  Dim myBusSignal As AgtLA.BusSignal
  Dim strArray() As String

  ' Clear out the old data (if any).
  Set ExportToIELogicAnalyzerData = New Collection

  For Each myBusSignal In myModule.BusSignals
    ' This is the call where we get the data and save it to a collection.
    Call GetStringDataArray(myBusSignal, strArray)   ' Get the data.
    ExportToIELogicAnalyzerData.Add (strArray)   ' Save to collection of strings.
  Next
End Sub

' This is where we get the data for a specific bus or signal and
' place it into a a string array so that we can add it to our web
' page later.
Private Sub GetStringDataArray(ByVal myBusSignal As AgtLA.BusSignal, _
                               ByRef strArray() As String)
   Dim i As Integer
   Dim myData As AgtLA.SampleBusSignalData
   Dim nArray() As Double
   Dim nDataRowCount As Long
   Dim nBitWidth As Integer

   nBitWidth = myBusSignal.BitSize

   Set myData = myBusSignal.BusSignalData

   ' Make sure that the nExportToIEStartSample and nExportToIEEndSample are within bounds.
   If (nExportToIEStartSample < myData.StartSample) Then
     nExportToIEStartSample = myData.StartSample
   End If
   If (nExportToIEEndSample > myData.EndSample) Then
     nExportToIEEndSample = myData.EndSample
   End If

   ' Extract the bus/signal data.
   ' In this case, we extract all data as a string.
   strArray = myData.GetDataBySample(nExportToIEStartSample, nExportToIEEndSample, AgtDataStringHex, nDataRowCount)
End Sub

' This gets the list of bus and signal names formated as an HTML
' table header.
Private Function GetHeaderString() As String
  Dim strHeader As String
  Dim myBusSignal As AgtLA.BusSignal

  ' Get the names of each of the buses and signals.
  strHeader = "<TR>"
  For Each myBusSignal In myModule.BusSignals
    strHeader = strHeader + "<TH>" + myBusSignal.Name + "</TH>"
  Next
  strHeader = strHeader + "</TR>"
  GetHeaderString = strHeader
End Function

' Given a sample number, get the HTML formatted string corresponding
' to that row.
Private Function GetRowString(ByVal nSampleNumber As Long) As String
  Dim strArray() As String
  Dim nRow As Long
  Dim i As Integer
  Dim strRow As String

  nRow = nSampleNumber - nExportToIEStartSample

  strRow = "<TR>"
  For i = 1 To ExportToIELogicAnalyzerData.Count
    strArray = ExportToIELogicAnalyzerData(i)
    strRow = strRow + "<TD>" + strArray(nRow) + "</TD>"
  Next i
  strRow = strRow + "</TR>"
  GetRowString = strRow
End Function


プログラム入力/出力用のフォームを使用する

  1. 通常どおりにマクロを作成します（マクロを作成/実行するを参照してください）。

  2. Visual Basic Editorで、Insert>UserFormを選択します。

  3. Propertiesウィンドウで、UserFormの名前を"UserForm1"から希望のフォーム名に変更し、Captionプロパティを希望のフォーム・ダイアログ・タイトルに変更します。

  4. フォーム内をクリックして、Toolboxを開きます。

  5. Toolboxからフォームへコントロールをドラッグします。コントロールを配置し、名前を付け、Captionやその他の希望のプロパティを変更します。

  6. Projectウィンドウで、フォームを右クリックし、View Codeを選択します。

  7. Codeウィンドウの"(General)"の下で、コードを追加したいコントロールを選択し、フォームのコードを入力します。

    フォーム制御の例を参照してください。

  8. Projectウィンドウで、モジュールを右クリックし、View Codeを選択します。

  9. 入力したフォーム値に機能するモジュール・コードを入力します。

関連項目

  • マクロを作成/実行する
  • マクロのプログラミング
  • Visual Basic Editorのオンライン・ヘルプ


フォーム制御の例

  • バス/信号をコンボ・ボックスに配置するには
  • コンボ・ボックスから選択した文字列を取得するには
  • 文字列を基にコンボ・ボックスのアイテムを選択するには
  • テキスト・ボックスで数値入力だけを許可するには

バス/信号をコンボ・ボックスに配置するには

Dim i As Integer
Me.cmbXAxisBusSignal.Clear

For i = 0 To myWindow.BusSignals.Count - 1
  Me.cmbXAxisBusSignal.AddItem myWindow.BusSignals(i).Name
Next i
Me.cmbYAxisBusSignal.ListIndex = 0

コンボ・ボックスから選択した文字列を取得するには

strXAxisBusSignal = Me.cmbXAxisBusSignal.List(Me.cmbXAxisBusSignal.ListIndex)

文字列を基にコンボ・ボックスのアイテムを選択するには

Private Sub SetComboBoxValue(ByRef cmbControl As ComboBox, ByVal strValue As String)
  Dim i As Integer
  Dim bFound As Boolean

  i = 0
  Do While Not (cmbControl.List(i) <> strValue)
    i = i + 1
  Loop

  If (cmbControl.List(i) = strValue) Then
    cmbControl.ListIndex = i
  Else
    'A ListIndex of -1 means no item is selected
    cmbControl.ListIndex = -1
  End If
End Sub

テキスト・ボックスで数値入力だけを許可するには

Private Sub txtEndSample_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  ' Cancel any non-numeric keys.
  If KeyAscii < vbKey0 Or KeyAscii > vbKey9 Then
    KeyAscii = 0
  End If
End Sub


バス/信号が有効であるか調べる方法

Private Function IsBusSignalValid(ByVal strBuSignal As String) As Boolean
  Dim myData As AgtLA.SampleBusSignalData

  On Error GoTo busSignalNotValid

  IsBusSignalValid = True
  Set myData = myWindow.BusSignals(strXAxisBusSignal).BusSignalData
  Exit Function

busSignalNotValid:
  IsBusSignalValid = False
End Function


VbaViewウィンドウのプログラミング

VbaViewウィンドウは、integrated Microsoft Visual Basic for Applications (VBA)と一緒に動作し、カスタム・データ・ビジュアリゼーション・チャートを提供します。VbaViewウィンドウは、WaveformやListingのようなデータ・ウィンドウですが、データの表示にVBAコードを必要とする点が異なります。

Agilent Logic Analyzerユーザ・インタフェースに、（多くの場合）VbaViewウィンドウが応答すべきイベントがあります。こうしたイベントには、ロジック・アナライザの実行、画面の更新、VbaViewメニューの項目のクリックが含まれます。VbaViewウィンドウをプログラムするには、これらのイベントに応答するVBAコードを記述します。このコードは、"Notify"モジュール内の"Notify"関数に所属します（VbaViewウィンドウをプログラムするときにマクロを作成する必要はありません）。

VbaViewウィンドウをプログラムするには:

  1. Agilent Logic Analyzerアプリケーションを実行します。

  2. （メイン・メニューから）Window>New VbaView>と、次のいずれかを選択して、サンプルVbaViewウィンドウの1つを起動します。

    • Bus vs Bus...（XY散布図の単純な例）
    • Distribution...（データ分布棒グラフの単純な例）
    • Export to IE...（別のアプリケーションへのデータのエクスポートの単純な例）
    • Hello World...（テキスト出力の単純な例）

  3. Tools>Macro>Visual Basic Editorを選択するか、ALT+F11キーボード・ショートカットを押して、Visual Basic Editorを開きます。

  4. Visual Basic Editorで、希望に応じてVbaViewウィンドウ・プログラムを編集します。以下を参照してください。

    • AgtVbaViewモジュールでNotify関数を使用する
    • XY散布図を作図する
    • 線グラフを作図する
    • 棒グラフを作図する
      • 横棒グラフを作図する
      • 積み上げ横棒グラフを作図する
      • 縦棒グラフを作図する
      • 積み上げ縦棒グラフを作図する
    • 円グラフを作図する

  5. Visual Basic Editorウィンドウを閉じます。

  6. Agilent Logic Analyzerアプリケーションに戻り、Run/Stop>Runを選択して（またはF5キーボード・ショートカットを押して）VbaViewウィンドウを更新します。

  7. ロジック・アナライザ構成をALAフォーマット・ファイルに保存します。

    VbaViewウィンドウのVBAプロジェクトが、ロジック・アナライザ構成と一緒に保存されます。

関連項目

  • MacrosウィンドウとVbaViewウィンドウ間の違い


AgtVbaViewモジュールでNotify関数を使用する

VbaViewウィンドウをプログラミングするとき、"AgtVbaView"モジュールに"Notify"関数を実装して、Agilent Logic Analyzerユーザ・インタフェースの以下のイベントに応答する必要があります。

  • New ： これは、VbaViewウィンドウを作成したときに発生します。

  • Show ： これは、別のウィンドウからVbaViewへ切り替えるときを含め、VbaViewウィンドウが表示されるときに発生します。

  • Delete ： これは、VbaViewを削除するときに発生します。通常、これを無視できます。

  • Redraw ： これは、メニューからVbaView>Redrawを選択するときに発生します。

  • Update ： これは、ウィンドウの更新が必要であるとシステムが判断したときに発生します。

  • Properties ： これは、メニューからVbaView>Propertiesを選択するときに発生します。通常、ユーザがVbaViewのプロパティを変更できるよう、Propertiesダイアログを開きます。

"Notify"関数は、VbaViewウィンドウがない場合には使用されません。

例

' Declare global variables for chart and window objects.
Public myChart As AgtLA.VbaViewChart
Public myWindow As AgtLA.VbaViewWindow

' Declare global variables for form values.
' Public FormFieldValue As Type

Function Notify(strWindowName As String, strCommand As String, varCommandParm As Variant) As Variant

  ' Always trap errors and return as an error string so the
  ' application can display the error.  Never let VBA display
  ' the error.
  On Error GoTo ErrorHandler

  ' Get the window object.
  Set myWindow = AgtLA.GetWindowByName(strWindowName)

  ' Get the chart object.
  Set myChart = myWindow.Chart()

  ' Write the notify message to the output window (for debug purposes).
  Dim strWindow As String
  strWindow = strWindowName + ": Notify called with command '" + strCommand + "'"
  myWindow.WriteOutput (strWindow)

  ' Handle the command.
  Select Case strCommand:

    Case "New": myWindow.WriteOutput ("VbaView window created.")

    Case "Show": myWindow.WriteOutput ("Choose VbaView>Properties... to change this graph.")

    Case "Delete":

    Case "Redraw", "Update": Call DrawChart

    Case "Properties": frmProperties.Show vbModal

  End Select
Exit Function

ErrorHandler:
  ' The instrument returned an error message.
  Notify = Err.Description

End Function

Private Sub DrawChart()
  ' See:
  '   Drawing an XY Scattergram
  '   Drawing a Line Chart
  '   Drawing a Horizontal Bar Chart
  '   Drawing a Horizontal Stacked Bar Chart
  '   Drawing a Vertical Bar Chart
  '   Drawing a Vertical Stacked Bar Chart
  '   Drawing a Pie Chart
End Sub


XY散布図を作図する

この例では、生成された点を使用しますが、GetDataBySampleを介してロジック・アナライザから取得したdouble型配列がよく使用されます。

Private Sub DrawXYScattergram()
  Dim xValueArray(50) As Double
  Dim yValueArray(50) As Double
  Dim i As Integer
  myChart.Data.Clear
  myChart.ChartType = AgtChartTypeXYScatter
  myChart.HasTitle = True
  myChart.Title = "XY Scattergram"
  myChart.HasLegend = False
  myChart.Axis(AgtChartAxisTypeX).HasTitle = True
  myChart.Axis(AgtChartAxisTypeY).HasTitle = True
  myChart.Axis(AgtChartAxisTypeX).Title = "X Axis"
  myChart.Axis(AgtChartAxisTypeY).Title = "Y Axis"

  For i = 0 To 50
    xValueArray(i) = i
    yValueArray(i) = i
  Next i

  Call myChart.Data.AddPointArrays(xValueArray, yValueArray, AgtDataPointTypeCircle, AgtDataPointSizeSmall)
  myChart.Draw
End Sub


線グラフを作図する

この例では、生成された点を使用しますが、GetDataBySampleを介してロジック・アナライザから取得したdouble型配列がよく使用されます。点付き、または点なしの線グラフを作図することもできます。点を作図しない場合、ChartTypeにAgtChartTypeLineOnlyを使用します。

Private Sub DrawLineChart()
  Dim xValueArray(50) As Double
  Dim yValueArray(50) As Double
  myChart.Data.Clear
  myChart.ChartType = AgtChartTypeLine
  myChart.HasTitle = True
  myChart.Title = "Line Chart"
  myChart.HasLegend = False
  myChart.Axis(AgtChartAxisTypeX).HasTitle = True
  myChart.Axis(AgtChartAxisTypeX).Title = "X Axis"
  myChart.Axis(AgtChartAxisTypeY).HasTitle = True
  myChart.Axis(AgtChartAxisTypeY).Title = "Y Axis"

  Dim i As Long
  For i = 0 To 50
    xValueArray(i) = i
    yValueArray(i) = i
  Next i
  Call myChart.Data.AddPointArrays(xValueArray, yValueArray, AgtDataPointTypeCircle, AgtDataPointSizeSmall)
  myChart.Draw
End Sub


棒グラフを作図する

縦棒グラフと横棒グラフがあります。標準棒グラフと積み上げ棒グラフもあります。VbaViewウィンドウには、"Values"と"Groups"の概念があります。積み上げ棒グラフの処理には、グループと値の両方を使用します。標準棒グラフの場合、値だけが必要です。

  • 横棒グラフを作図する
  • 積み上げ横棒グラフを作図する
  • 縦棒グラフを作図する
  • 積み上げ縦棒グラフを作図する


横棒グラフを作図する

Private Sub DrawHorizontalBarChart()
  myChart.Data.Clear
  myChart.ChartType = AgtChartTypeHorizontalBar
  myChart.HasTitle = True
  myChart.Title = "Horizontal Bar Chart"
  myChart.HasLegend = False

  myChart.Axis(AgtChartAxisTypeX).HasTitle = False
  myChart.Axis(AgtChartAxisTypeY).HasTitle = False

  Call myChart.Data.SetValueCaption(0, "Read")
  Call myChart.Data.SetValueCaption(1, "Write")
  Call myChart.Data.SetValueCaption(2, "Idle")
  Call myChart.Data.SetValue(0, 0, 10)
  Call myChart.Data.SetValue(0, 1, 20)
  Call myChart.Data.SetValue(0, 2, 530)
  myChart.Draw
End Sub


積み上げ横棒グラフを作図する

Private Sub DrawHorizontalStackedBarChart()
  myChart.Data.Clear
  myChart.ChartType = AgtChartTypeStackedHorizontalBar
  myChart.HasTitle = True
  myChart.Title = "Horizontal Stacked Bar Chart"
  myChart.HasLegend = True

  myChart.Axis(AgtChartAxisTypeX).HasTitle = False
  myChart.Axis(AgtChartAxisTypeY).HasTitle = False

  Call myChart.Data.SetValueCaption(0, "Read")
  Call myChart.Data.SetValueCaption(1, "Write")
  Call myChart.Data.SetGroupCaption(0, "I/O")
  Call myChart.Data.SetGroupCaption(1, "Memory")
  Call myChart.Data.SetValue(0, 0, 10)
  Call myChart.Data.SetValue(0, 1, 20)
  Call myChart.Data.SetValue(1, 0, 33)
  Call myChart.Data.SetValue(1, 1, 45)
  myChart.Draw
End Sub


縦棒グラフを作図する

Private Sub DrawVerticalBarChart()
  myChart.Data.Clear
  myChart.ChartType = AgtChartTypeVerticalBar
  myChart.HasTitle = True
  myChart.Title = "Vertical Bar Chart"
  myChart.HasLegend = False

  myChart.Axis(AgtChartAxisTypeX).HasTitle = False
  myChart.Axis(AgtChartAxisTypeY).HasTitle = False

  Call myChart.Data.SetValueCaption(0, "Read")
  Call myChart.Data.SetValueCaption(1, "Write")
  Call myChart.Data.SetValueCaption(2, "Idle")
  Call myChart.Data.SetValue(0, 0, 10)
  Call myChart.Data.SetValue(0, 1, 20)
  Call myChart.Data.SetValue(0, 2, 530)
  myChart.Draw
End Sub


積み上げ縦棒グラフを作図する

Private Sub DrawVerticalStackedBarChart()
  myChart.Data.Clear
  myChart.ChartType = AgtChartTypeStackedVerticalBar
  myChart.HasTitle = True
  myChart.Title = "Vertical Stacked Bar Chart"
  myChart.HasLegend = True

  myChart.Axis(AgtChartAxisTypeX).HasTitle = False
  myChart.Axis(AgtChartAxisTypeY).HasTitle = False

  Call myChart.Data.SetValueCaption(0, "Read")
  Call myChart.Data.SetValueCaption(1, "Write")
  Call myChart.Data.SetGroupCaption(0, "I/O")
  Call myChart.Data.SetGroupCaption(1, "Memory")
  Call myChart.Data.SetValue(0, 0, 10)
  Call myChart.Data.SetValue(0, 1, 20)
  Call myChart.Data.SetValue(1, 0, 33)
  Call myChart.Data.SetValue(1, 1, 45)
  myChart.Draw
End Sub


円グラフを作図する

Private Sub DrawPieChart()
  myChart.Data.Clear
  myChart.ChartType = AgtChartTypePie
  myChart.HasTitle = True
  myChart.Title = "Pie Chart"
  myChart.HasLegend = True

  myChart.Axis(AgtChartAxisTypeX).HasTitle = False
  myChart.Axis(AgtChartAxisTypeY).HasTitle = False

  Call myChart.Data.SetValueCaption(0, "Read")
  Call myChart.Data.SetValueCaption(1, "Write")
  Call myChart.Data.SetValueCaption(2, "Idle")
  Call myChart.Data.SetValue(0, 0, 10)
  Call myChart.Data.SetValue(0, 1, 20)
  Call myChart.Data.SetValue(0, 2, 530)
  myChart.Draw
End Sub


VBAコードを配布する

VBAマクロ・コードの配布には複数の方法があります。ALAフォーマット構成ファイルを介した方法（ロジック・アナライザが互換性のある場合）、個別ModuleまたはFormファイルのエクスポート/インポートによる方法、VBAプロジェクト.zipファイルのエクスポート/インポートによる方法です。VBAプロジェクト.zipファイルを"<Install>\VBA\"ディレクトリに配置することにより、Agilent Logic Analyzerアプリケーションが起動したときにVBAコードをロードできます。

VbaViewウィンドウ・コードを配布するとき、ウィンドウがWindow>New VbaView>メニューに表示されるように、コードをアプリケーションの起動時にロードする必要があります。このため、VBAプロジェクト.zipファイルが必要となります。

  • ALAフォーマット構成ファイルを介してVBAコードを配布するには
  • 個別ファイル（VBA Modules/Forms用）を配布するには
  • .zipファイルを介してVBAプロジェクト・コードを配布するには
    • VBAプロジェクト・コードを.zipファイルへエクスポートするには
    • agZip.exeでVBAプロジェクト・コード.zipファイルを作成するには
    • .zipファイルからVBAプロジェクト・コードをインポートするには
    • アプリケーション起動時にVBAプロジェクト・コードをロードするには


ALAフォーマット構成ファイルを介してVBAコードを配布するには

VBAコードは、ALAフォーマット構成ファイルの一部として保存できます。

VBAマクロを、互換ロジック・アナライザを持つ別のユーザと共有する場合、必要な操作は、ALAフォーマット構成ファイルを渡すことだけです。

ただし、他のユーザが非互換のロジック・アナライザを持つ場合、VBAコードの配布には別の方法を使用する必要があります。

関連項目

  • 個別ファイル（VBA Modules/Forms用）を配布するには
  • .zipファイルを介してVBAプロジェクト・コードを配布するには


個別ファイル（VBA Modules/Forms用）を配布するには

この手順では、Visual Basic Editorを使って、ModuleおよびForm VBAコードを1つのALAフォーマット構成ファイルから個別ファイルへエクスポートし、これらのファイルを別の構成へインポートする方法について説明します。

  1. エクスポートするVBAコードを含むALAフォーマット構成ファイルを開きます。

  2. 非互換モジュールについて知らせるInformationダイアログで、Load Offlineをクリックします。

  3. Tools>Macro>Visual Basic Editorを選択して、Visual Basic Editorを開きます。

  4. Visual Basic Editorで、各ModuleおよびFormをVisual Basic Editorから.basファイルと.frmファイルへそれぞれエクスポートします。これには、Project Browser（左上隅）でModuleまたはFormを右クリックし、Export>File...を選択します。

  5. ここで、オフラインの場合、File>Go Onlineを選択します。それ以外の場合、File>Newを選択して新しい構成を作成します。

  6. Tools>Macro>Visual Basic Editorを選択して、Visual Basic Editorを開きます。

  7. Visual Basic EditorのProject Browserで、ファイルをインポートする構成を選択します。

  8. File>Import...を選択して、前にエクスポートしたファイルをインポートします。

関連項目

  • ALAフォーマット構成ファイルを介してVBAコードを配布するには
  • .zipファイルを介してVBAプロジェクト・コードを配布するには


.zipファイルを介してVBAプロジェクト・コードを配布するには

この手順では、プロジェクトのすべてのVBAコードを、1つのALAフォーマット構成ファイルからエクスポートし、それを別の構成へインポートする方法について説明します。

  1. エクスポートするVBAコードを含むALAフォーマット構成ファイルを開きます。

  2. 非互換モジュールについて知らせるInformationダイアログで、Load Offlineをクリックします。

  3. Tools>Macro>Export Zip File...を選択します（Visual Basic Editor内からFile>Export Zip Fileを選択することもできます）。

  4. Export Macrosダイアログで、VBAコードをエクスポートするプロジェクトを選択し、OKをクリックします。

  5. "Export macros in project"ダイアログで、プロジェクトのVBAコードを含める.zipファイルの名前を入力し、Saveをクリックします。

    ロジック・アナライザ構成も転送したい場合、それをXMLフォーマット・ファイルに保存します。

  6. ここで、オフラインの場合、File>Go Onlineを選択します。それ以外の場合、File>Newを選択して新しい構成を作成します。

    前のステップでロジック・アナライザ構成をXMLフォーマット・ファイルに保存した場合は、それを開きます。

  7. VbaViewウィンドウ・プロジェクトのコードをインポートする場合（そして、VbaViewウィンドウを、XMLフォーマット・ロジック・アナライザ構成ファイルを開くことによって作成しなかった場合）、Window>New VbaView...を選択します。

  8. Tools>Macro>Import Zip File...を選択します（Visual Basic Editor内からFile>Import Zip Fileを選択することもできます）。

  9. Import Macrosダイアログで、VBAコードをインポートするプロジェクトを選択し、OKをクリックします。

  10. 次の"Select file to import"ダイアログで、プロジェクトのVBAコードを含む.zipファイルを選択し、Openをクリックします。

    .zipファイルからVBAコードをインポートするとき、以下の拡張子を持つファイルだけが直接インポートされます。

    • .bas－Module
    • .cls－Class Module
    • .frm－Form


VBAプロジェクト・コードを.zipファイルへエクスポートするには

この手順では、VBAプロジェクトのコードを.zipファイルへエクスポートする方法について説明します。

  1. エクスポートするVBAプロジェクト・コードを含むALAフォーマット構成ファイルを開きます。

  2. Tools>Macro>Export Zip File...を選択します（Visual Basic Editor内からFile>Export Zip Fileを選択することもできます）。

  3. Export Macrosダイアログで、VBAコードをエクスポートするプロジェクトを選択し、OKをクリックします。

  4. "Export macros in project"ダイアログで、プロジェクトのVBAコードを含める.zipファイルの名前を入力し、Saveをクリックします。

関連項目

  • agZip.exeでVBAプロジェクト・コード.zipファイルを作成するには
  • .zipファイルからVBAプロジェクト・コードをインポートするには
  • アプリケーション起動時にVBAプロジェクト・コードをロードするには


agZip.exeでVBAプロジェクト・コード.zipファイルを作成するには

この手順では、agZip.exeプログラムを使ってVBAプロジェクト.zipファイルを作成する方法について説明します。

  1. すべてのVBAプロジェクト・ソース・ファイルをディレクトリに配置します。

  2. Project.xmlファイルをディレクトリに追加します（Project.xmlファイル・フォーマットを参照してください）。

  3. Command Promptウィンドウを開き、コマンドを実行します。

    agZip.exe <directory>

    agZip.exeプログラムは、以下のディレクトリにあります。

    <Install directory>\

    例:

    C:\Program Files\Agilent Technologies\Logic Analyzer\

VBAプロジェクトZipファイルのパスワード保護

agZip.exe実行可能ファイルは、Agilent Logic Analyzerアプリケーションだけが解読できる、暗号化され、パスワード保護されたzipを生成します。スタンドアロンのunzip実行可能ファイルは存在しません。

パスワード保護されたzipは一方通行であるため、zipファイルへは、アプリケーション、またはベンダが直接送信するソースを介してのみアクセスできます。パスワード保護されたVBAプロジェクトZipファイルは、バイナリ・ファイルとして考えてください。

VBAプロジェクトがパスワード保護されているとき

Visual Basic Editorでプロジェクトがパスワード保護されている場合、またはzipファイルがパスワード保護されている場合、プロジェクトをTools>Macro>Export Zip File...を介してzipファイルにエクスポートすることはできません。

Visual Basic Editorのパスワードを持たない、パスワード保護されたzipファイルの場合（例えば、AgtRPICmdsなど）、Visual Basic EditorでExport File...コマンドを介して個別にのみファイルをエクスポートできます。

関連項目

  • VBAプロジェクト・コードを.zipファイルへエクスポートするには
  • .zipファイルからVBAプロジェクト・コードをインポートするには
  • アプリケーション起動時にVBAプロジェクト・コードをロードするには


Project.xmlファイル・フォーマット

Project.xmlファイルは、.zipファイルに含まれるVBAプロジェクトのタイプを識別します。XMLフォーマットの要素と属性は、パスワード保護、ライセンス取得や、VBA知的所有権の配布などの複雑な作業用に提供されています。Project.xmlファイルのXML要素には、次の階層があります。


<Reference>要素

<Reference>要素は、型ライブラリ情報を含みます。

属性

名前 | 説明
Guid | '文字列'。型ライブラリGUID
Major | '文字列'。型ライブラリのメジャー・バージョン
Minor | '文字列'。型ライブラリのマイナー・バージョン
Description | '文字列'。説明は、単にXMLを読みやすくするためのもので、必須ではありません。

親

この要素は、次の親を持つことができます。<References>

例

<Reference Description='Microsoft Internet Controls' Guid='{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}' Major='1' Minor='1' />


<References>要素

<References>要素は、型ライブラリに対する参照を含みます。参照は、外部参照によって構文エラーが起こらないように、プロジェクトをロードするときに追加されます。これらの参照は、 Visual Basic EditorでTools>References...を選択することにより、手動で追加されます。<References>要素は、複数の参照を含むことができます。

子

この要素は、次の子を持つことができます。<Reference>

親

この要素は、次の親を持つことができます。<VbaProject>

例

<References>
   <Reference Description='Microsoft Internet Controls' Guid='{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}' Major='1' Minor='1' />
   <Reference Description='Microsoft Forms 2.0 Object Library' Guid='{0D452EE1-E08F-101A-852E-02608C4D0BB4}' Major='2' Minor='0' />
</References>


<VbaProject>要素

<VbaProject>要素を使用すると、Agilent Logic Analyzerアプリケーションにこれが有効なProject.xmlファイルであることを知らせることができます。この要素が存在しない場合、その他の情報はすべて無視されます。<VbaProject>要素は、Project.xmlファイルの最上位の要素です。

属性

名前 | 説明
Type | 'VbaView'または''。'VbaView'の場合、アプリケーション起動時にこのプロジェクトがロードされません。既存の"VbaView"プロジェクトにロードする必要があるからです。すべての"VbaView"プロジェクトが、メニューWindow>New VbaView>に配置されます。
Name | '文字列'。通常、この属性は設定されません。名前は、プロジェクトzipファイルのベース名です。この属性は、デフォルト動作をオーバライドします。
Action

'Recall'（デフォルト）または'Create'。このプロジェクトに対する処理を含みます。

'Recall'-zipコンテンツが、すでに存在するプロジェクトにインポートされます。プロジェクトにName属性が設定されている場合、Import Zip File project selectionダイアログでそのプロジェクトが強調表示されます。この属性は、Export Zip File...メニューからzipファイルを作成したときに設定されます。

'Create'-zipコンテンツが、新しく作成されたプロジェクトにロードされます。新しいプロジェクト名については、Name属性を参照してください。これは、非"VbaView"型プロジェクトの場合にのみ有効です。"VbaView"型プロジェクトは、直接作成することができず、ビューと関連付ける必要があるからです。この属性は通常、Agilentまたはサード・パーティによって作成されたzipファイルで使用され、起動時に自動的にロードできるよう、<Install directory>/VBAディレクトリにインストールされます。このタイプのプロジェクトは、アプリケーション起動時にロードしたくない場合、Import Zip File..メニューから直接ロードすることもできます。プロジェクトがすでにロードされている場合、エラーが返ります。
Description | '文字列'。説明は、エラー・メッセージを表示するときに使用されます。例えば、ライセンスを取得できないときにこれが使用されます。設定しないと、説明としてフルのzipファイル名が使用されます。
UseDefaultPassword | 'F'、Falseまたは'T'、True。これを設定しないか、あるいは'False'または'F'に設定したときに、zipファイルにパスワードが含まれる場合、プロジェクトは、zipで使用されているパスワードでパスワード保護されます。Password属性を設定した場合、この属性が、デフォルト・パスワードにしか機能しないUseDefaultPassword属性をオーバライドします。UseDefaultPassword属性は、zipがパスワード保護されているものの、ユーザがソースを表示できなくてもよい、"AgtRPICmds"などのプロジェクトをサポートするために使用します。
Password | '文字列'。これは、Visual Basic EditorでVBAプロジェクトのパスワード保護に使用する、パスワード文字列です。設定しないと、UseDefaultPasswordがTrueでない場合、zipファイルの暗号化に使ったパスワードが使用されます。zipで使用する暗号化されたパスワードは一方通行なので（VBAプロジェクトZipファイルのパスワード保護を参照してください）、ベンダは、カスタマ・サイトでのマクロのデバッグのためVBAプロジェクトにアクセスする必要がある場合に制御する、パスワードを設定できます。
LicenseName | '文字列'。LicenseNameを指定すると、アプリケーションがこのライセンスを検索します（このライセンスは、VBA Runtimeライセンスとは異なります）。ライセンスが存在しない場合、プロジェクトはロードされません。エラーは表示されません。
LicenseVersion | '文字列'。LicenseName属性を指定した場合、これは設定されません。"1.0"が使用されます。
LicenseVendor | '文字列'。LicenseName属性を指定した場合、これは設定されません。"Agilent Technologies"が使用されます。

子

この要素は、次の子を持つことができます。<References>

親

ありません。

例

<VbaProject Type='VbaView' Name='Export to IE Sample' HelpFile='VBA_View_Export_to_IE.chm'>
   <References>
      <Reference Description='Microsoft Internet Controls' Guid='{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}' Major='1' Minor='1' />
      <Reference Description='Microsoft Forms 2.0 Object Library' Guid='{0D452EE1-E08F-101A-852E-02608C4D0BB4}' Major='2' Minor='0' />
   </References>
</VbaProject>


.zipファイルからVBAプロジェクト・コードをインポートするには

この手順では、VBAプロジェクトのVBAコードを.zipファイルからインポートする方法について説明します。

  1. Agilent Logic Analyzerアプリケーションで、Tools>Macro>Import Zip File...を選択します（Visual Basic Editor内からFile>Import Zip Fileを選択することもできます）。

  2. Import Macrosダイアログで、VBAコードをインポートするプロジェクトを選択し、OKをクリックします。

  3. 次の"Select file to import"ダイアログで、プロジェクトのVBAコードを含む.zipファイルを選択し、Openをクリックします。

    .zipファイルからVBAコードをインポートするとき、以下の拡張子を持つファイルだけが直接インポートされます。

    • .bas－Module
    • .cls－Class Module
    • .frm－Form

関連項目

  • VBAプロジェクト・コードを.zipファイルへエクスポートするには
  • agZip.exeでVBAプロジェクト・コード.zipファイルを作成するには
  • アプリケーション起動時にVBAプロジェクト・コードをロードするには


アプリケーション起動時にVBAプロジェクト・コードをロードするには

  1. VBAプロジェクトzipファイルを以下のディレクトリに配置します。

    <Install directory>\VBA\

    例:

    C:\Program Files\Agilent Technologies\Logic Analyzer\VBA\

    プロジェクトがVBAインストール・ディレクトリに存在する場合、プロジェクトは、起動時に自動的にロードされます。

アプリケーション起動時

Agilent Logic Analyzerアプリケーションに少なくともRuntime VBAライセンスがある場合、インストールされたzipプロジェクトを自動的にロードするための試みがなされます。アプリケーションは、Runtime VBAライセンスを検索しますが、見つからない場合にそれを要求しません。起動時にlicenseダイアログを表示させることは混乱を招くからです。

Tools>Macro>Import Zip File...では、VBAプロジェクトzipファイルを処理するための以下のアルゴリズムも使用されます。いつでもプロジェクトを呼び出せるときには、起動時にプロジェクトをロードしたくない可能性があるからです。

Agilent Logic Analyzerアプリケーションは、VBAディレクトリのすべてのzipファイルを調べます。各zipファイルに対して:

  1. Project.xmlファイルを検索します。ファイルが存在しない場合、プロジェクトが直接ロードされます。詳細については、下のプロジェクトをロードするときを参照してください。Project.xmlファイルの主な目的は、パスワード保護、ライセンス取得、VBA知的所有権の配布という複雑な作業を処理することです。

  2. Project.xmlファイルが存在する場合、アプリケーションは有効なXML要素を検索します（Project.xmｌファイル・フォーマットを参照してください）。

    ライセンス情報またはパスワードがProject.xmlファイルに設定されている場合、zipファイルをパスワード保護することを強く推奨します。VBAプロジェクトZipファイルのパスワード保護を参照してください。

プロジェクトをロードするとき

アプリケーション起動時にVBAプロジェクトがロードされるとき、VBAプロジェクトは、ALAフォーマット構成ファイルと一緒に保存されないプロジェクトに配置されます。


MacrosウィンドウとVbaViewウィンドウ間の違い

Macros

マクロは、Tools>Macro>Macros...から（Macrosダイアログの）マクロを選択し、Runをクリックすることにより実行される関数です（このRunボタンは、ロジック・アナライザを実行しません）。マクロは通常、一度だけのデータ解析またはデータ・エクスポートの開始に使用します。マクロは、データをグラフにする必要がないか、またはロジック解析システムのイベントに応答する必要がないときに使用できます（例えば、測定するときなど）。マクロが、解析またはエクスポートの実行前に、ユーザ選択可能なオプションまたはパラメータを求めるダイアログ（「ユーザ・フォーム」とも呼ばれます）を開くのが一般的です。マクロの例としては、Microsoft Excelへのデータのエクスポート、繰り返し実行および保存があります。

マクロは、1つ以上のモジュールを含む必要があります。モジュールの名前は、特定の名前である必要はありません。パラメータのないすべてのサブルーチンが、Macrosダイアログ（Tools>Macro>Macros...を選択したときに表示されます）に現われます。非公開であるか、パラメータを持つサブルーチンは、Macrosダイアログに現われません。通常、MacrosダイアログからVbaViewウィンドウ機能にアクセスすることはできません（パラメータのない公開関数は、希望に応じてNotifyモジュールに入れることができますが、通常、これを行う必要はありません）。

VbaViewウィンドウ

VbaViewウィンドウには、グラフ作成機能とテキスト表示機能があります。ロジック解析システムのイベントに応答する機能もあります（例えば、測定を実行するとき、またはVbaView>Properties...コマンドを選択したときなど）。VbaViewウィンドウは基本的に、マクロ機能とグラフ作成機能、およびイベントに応答する機能のスーパーセットを提供します。データをグラフにするときやテキストを表示するときには、VbaViewウィンドウを使用します。VbaViewウィンドウは通常、ウィンドウ・オプションを選択できるpropertiesダイアログを備えています。VbaViewウィンドウの例が、バス対バス・グラフです。

VbaViewウィンドウは、AgtVbaViewモジュールにNotify関数を含む必要があります。名前"Notify"は、関数に使用する必要があり、"AgtVbaView"は、モジュールに使用する必要があります。Notify関数は、ロジック解析システムがVbaViewウィンドウに、実行やVbaView>Properties...コマンドを選択するときなどのイベントについて指示する方法です。VbaViewウィンドウでは、ユーザ・フォームに任意の名前を使用できますが、agtPropertiesというユーザ・フォームを持つのが一般的です。


Visual Basicプログラミングのヒント

  • Visual Basicの構文
  • C++プログラマに対する指針
  • 一般的なVBAエラー・メッセージ


Visual Basicの構文

  • VBAは、コードをモジュールとフォームに分割します。モジュールはコードのみで、フォームはGUIコントロールとコードの両方です。通常、モジュールは、プロジェクトにグローバルなコード、または複数のフォームにまたがるコードを含めるために使用します。

  • すべてのコードは、サブルーチンまたは関数に存在する必要があります。サブルーチンは値を返しませんが、関数は値を返します。

    Public Sub MySubroutine(Byval i as integer, ByRef retVal as boolean)
    • これは公開されているので、このモジュールまたはフォームの外側から呼び出すことができます。もう1つの選択肢はPrivateです。
    • ByValは、このパラメータが値によって渡されることを意味します。すなわち、MySubroutineがiの値を変更しないようにしたい場合、"ByVal"にします。
    • ByRefは、このパラメータが参照によって渡されることを意味します。この場合、MySubroutineは、retValの値を変更できます。
    • このサブルーチンを呼び出すには、Call MySubroutine(i, retVal)を使用します。

    Private Function MyFunction(ByVal i as integer) as boolean
    • 関数宣言の最後に"as boolean"があります。これは、この関数が論理値を返すことを意味します。
    • 戻り値を設定するには、"MyFunction"が変数であるふりをして、"MyFunction = true"などのように、それを値として渡します。VBAは、"Return true"を使用しません。
    • この関数を呼び出すには、myBool = MyFunction(i)を使用します。

  • 変数は、以下の方法で定義されます。

    • サブルーチンまたは関数内のローカル変数。 Dim myVal as long.
    • モジュールまたはフォーム内の非公開変数。 Private myVal as integer.
    • モジュールまたはフォーム内の公開変数。 Public myVal as string.

  • 一般的なデータ型は次のとおりです。

    • Integer（no signedまたはunsigned。論理値と文字列以外はすべて、符号付きです）
    • Long
    • String
    • Boolean
    • Double（実数に使用。VbaViewグラフ・ツールによっても使用されます）

  • 配列の定義と使用:
    • 配列の次元がわかっている場合。 Dim myArray(5, 5) as boolean
    • 自分で、または別の関数が配列の次元を後から変更する場合（GetDataBySampleがこれを実行します）。 Dim myArray() as boolean
    • 配列を使用するには、 myArray(x,y)

  • 一般的な制御構造:

    If (bEntering) Then
  strEnteringExiting = "Entering"
Else
  strEnteringExiting = "Exiting"
End If

For i = 0 To myNumDataRows - 2
  If (OEArray(i) = 0 And WEArray(i) = 1) Then
    dReadTime = dReadTime + TimeArray(i + 1) - TimeArray(i)
  End If
Next i

Do While (bFound)
  bFound = FindTransition(bRead, True, True, dEnteringTime)
Loop

Select Case Command:
  Case "Show"
  Case "Delete"
  Case "Update" : Call DrawChart
End Select


C++プログラマに対する指針

  • Visual Basicは、元のBASICとは大分異なりますが、C++でもありません。

  • VBAは、VB.NETではなくVB6に基づいています。VB.NETは、VB6とは非常に異なります。したがって、本やWebサイトを参照する場合、.NETではなく、VB6やVBAに関するものであることを確認してください。

  • サブルーチン内に変数のスコープはありません。

  • ポインタはまったくありません（しかしVBAの場合、ポインタがなくて困ることはないはずです）。

  • リソース・ファイルの概念はありません。ダイアログの定義に使用するフォームがありますが、フォームにはコードを含みます。Visual C++のリソース・ファイルとは異なります。

  • 通常、モジュールはコードのみで、フォームはGUIとコードの両方です。

  • 変数は、使用する前に定義する必要がありません。このため、スペルミスのある変数が、コンパイラによって検出されません。ただし、"Option Explicit"コンパイラ・オプションを使用して、変数を使用前に定義するよう、VBAに指示することができます。

  • シングル"="が、代入演算子と比較演算子の両方に使用されます。VBは、"=="をサポートしません。このため、"if(myVal = 1)"と "myVal=1"があります。システムは、"If"によって違いを知ります。

  • VBは、"!"を使用しません。通常、"not"を使用します。ただし、"not equals"は"<>"です。

  • VBでは、コードを次の行にラップするには、" _"で終了する必要があります。アンダスコアの前にスペースが1つあります。

  • VBでは、"Call UpdateWindow(true)"のように、サブルーチンを呼び出す前に"Call"を使用します。

  • VBは、CやC++のように大文字小文字を区別しません。

  • VBは、オブジェクト指向ではありません。継承はありません。

  • VBは、{または}を使用しません。"then"と"end if"を使用します。


一般的なVBAエラー・メッセージ

2つの一般的なVBAエラーがあります。

  • 一般的なエラーの1つは、オブジェクトを返す関数の前に"Set"を置かないという失敗です。例:

    Dim myFindResult as AgtLA.FindResult
myFindResult = AgtLA.Windows(0).Find(strEvent)

    このコードによって、エラー・メッセージ"Object Variable or With block variable not set（オブジェクト変数またはWithブロック変数が設定されていません）"が表示されます。このコードは、次のように使用する必要があります。

    Dim myFindResult as AgtLA.FindResult
Set myFindResult = AgtLA.Windows(0).Find(strEvent)

  • VBAをAgilent Logic Analyzerアプリケーションと一緒に使用するときには、"New"キーワードを使って新しいオブジェクトを作成することは稀です。下の例での問題は、新しいFindResultオブジェクトを作成しようとしているのに、Find関数がすでにFindResultオブジェクトを返していることです。

    Dim myFindResult as New AgtLA.FindResult
Set myFindResult = AgtLA.Windows(0).Find(strEvent)

    このコードによって、エラー・メッセージ"ActiveX Component is unable to create object（ActiveXコンポーネントがオブジェクトを作成できません）"が表示されます。この問題を修正するには、"New"を削除する必要があります。