Office2010にはVisualBasicforApplications7.0が付属していることに気づきました。しかし、どのような変更が加えられたかについてのドキュメントがあまり見つからないようです。誰かが変更の要約、または違いを説明するリソースを持っていますか?
4 に答える
VBA6とVBA7の間で変更されたものはそれほど多くありません。VBA7は、OfficeとWindowsの両方の64ビットバージョンをサポートするために導入されました(これらの違いについては、以下を参照してください)。主な変更点は次のとおりです。
主にAPI呼び出しの64ビットサポート。これは、コードをOS / Officeバージョンだけでなく他のバージョン(つまり、Office 2003 / WinXPの誰か)でも機能させるために使用されます。
64ビットバージョンのWindowsを使用しているが、32ビットバージョンのOfficeを使用している場合は、次のようにAPI呼び出しを宣言できます。。
#If Win64 Then PtrSafe関数GetTickCount64Lib"kernel32"()をLongLongとして宣言します #そうしないと PtrSafe関数GetTickCountLib"kernel32"()をできるだけ長く宣言します #End If
64ビットバージョンのWindowsを使用していて、64ビットバージョンのOfficeを使用している場合は、次のようにAPI呼び出しを宣言できます。
#If VBA7 Then PtrSafe関数FindWindowLib"user32"エイリアス"FindWindowA"(_ ByVal lpClassName As String、_ ByVal lpWindowName As String)As LongPtr #そうしないと 関数FindWindowLib"user32"エイリアス"FindWindowA"(ByVal _ lpClassName As String、ByVal lpWindowName As String)As Long #End If
これをサポートするために、次のものがあります。
3つの新しいキーワード
LongPtr
(2つのデータ型と1つの修飾子):、LongLong
およびPtrSafe
1つの新しい関数:(
CLngLng()
つまりInt64)上記で使用された新しいコンパイル定数:
VBA7
およびWin64
MSDNのこの記事では、Office2010のVBA7での変更点について詳しく説明しています。
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)
また
PRINT VBA.STRING(80,"=")
mynewdata = VBA.MID(mydata, 15,4)
変更の完全なリストはまだ役に立ちます...および/またはファイルコンバーター。