web-dev-qa-db-ja.com

VBA 6.0とVBA 7.0の違いは何ですか?

Office 2010にはVisual Basic for Applications 7.0が付属していることに気付きました。ただし、どのような変更が行われたかについてのドキュメントはあまり見つけられないようです。誰かが変更の要約を持っていますか、または違いを説明するリソースがありますか?

43
romandas

VBA6とVBA7の間で大きな変化はありません。 VBA7は、OfficeとWindowsの両方の64ビットバージョンをサポートするために導入されました(これらの違いについては以下を参照してください)。主な変更点は次のとおりです。

  1. 64ビットサポート、主にAPI呼び出し用。これは、コードをOS/Officeバージョンと他のユーザー(つまり、Office 2003/WinXPの誰か)で動作させるために使用されます

    • 64ビットバージョンのWindowsを使用しているが、32ビットバージョンのOfficeを使用している場合、以下のようなAPI呼び出しを宣言できます。 。

      #If Win64 Then 
       PtrSafe関数GetTickCount64 Lib "kernel32"()をLongLong 
      #Else 
      として宣言PtrSafe関数GetTickCount Lib "kernel32"()をLong 
      として宣言#End If
    • 64ビットバージョンのWindowsを使用している場合、andは64ビットバージョンのOfficeを使用している場合、次のようなAPI呼び出しを宣言できます。

      #If VBA7 Then 
       PtrSafe関数FindWindow Lib "user32"エイリアス "FindWindowA"(_ 
       ByVal lpClassName As String、_ 
       ByVal lpWindowName As String)As LongPtr 
       #Else 
      関数FindWindow Lib "user32"エイリアス "FindWindowA"を宣言(ByVal _ 
       lpClassName As String、ByVal lpWindowName As String)As Long 
      #End If
  2. これをサポートするために、次のものがあります。

    • 3つの新しいキーワード(2つのデータ型と1つの修飾子):LongPtrLongLongおよびPtrSafe

    • 1つの新しい関数CLngLng()(つまりInt64)

    • 上記で使用した新しいコンパイル定数VBA7およびWin64

44
Todd Main

MSDNのこの記事には、Office 2010のVBA 7の変更に関する詳細が記載されています。

http://msdn.Microsoft.com/en-us/library/ee691831(loband).aspx#odc_office2010_Compatibility32bit64bit_IntroducingVBA7CodeBase

10
Lunatik

VBA7は、64ビットバージョンのOfficeと互換性があります。

7
buckbova

他にも変更があります...フィールドのユーザーに、2007年に正常に機能したコードが機能しなくなり、エラーが表示されることを報告しています。

例、これはVBA6で動作します(Excel 2007

PRINT STRING$(80,"=")
mynewdata = MID$(mydata, 15,4)

=」文字で構成される行を視覚的な区切りとして出力し、mydataを見て、15文字を飛び越えて-を取得します4の場合、結果はmynewdataに保存されます。 VBA7で失敗します(Excel 2010)。

私は潜在的な回避策を見つけました...

PRINT VBA.STRING$(80,"=")
mynewdata = VBA.MID$(mydata, 15,4)

OR

PRINT VBA.STRING(80,"=")
mynewdata = VBA.MID(mydata, 15,4)

変更の完全なリストはまだ役立ちます...および/またはファイルコンバータ。

0
Askjerry