Office 2010にはVisual Basic for Applications 7.0が付属していることに気付きました。ただし、どのような変更が行われたかについてのドキュメントはあまり見つけられないようです。誰かが変更の要約を持っていますか、または違いを説明するリソースがありますか?
VBA6とVBA7の間で大きな変化はありません。 VBA7は、OfficeとWindowsの両方の64ビットバージョンをサポートするために導入されました(これらの違いについては以下を参照してください)。主な変更点は次のとおりです。
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
これをサポートするために、次のものがあります。
3つの新しいキーワード(2つのデータ型と1つの修飾子):LongPtr
、LongLong
およびPtrSafe
1つの新しい関数:CLngLng()
(つまりInt64)
上記で使用した新しいコンパイル定数:VBA7
およびWin64
MSDNのこの記事には、Office 2010のVBA 7の変更に関する詳細が記載されています。
VBA7は、64ビットバージョンのOfficeと互換性があります。
他にも変更があります...フィールドのユーザーに、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)
変更の完全なリストはまだ役立ちます...および/またはファイルコンバータ。