非常に長くて厄介なコードがありますが、しばしばクラッシュし、No Responseメッセージが表示されます。これを回避する方法の1つは、32,767を超えないことがわかっている場合、Long IntegersではなくIntegersとして変数を宣言することです。ワークシートのサイズに基づいて変数が宣言される方法を変更しますか?
後で問題が発生しないようにするために、ワークシートのサイズに応じて変数を整数または長整数型にするスクリプトの先頭に1行のコードを挿入します。私が今までに持っているものは次のとおりです:
If Library.Range("A1").SpecialCells(xlCellTypeLastCell).row > 30000 Then
Dim i As Long
Dim LastRow As Long
ElseIf Library.Range("A1").SpecialCells(xlCellTypeLastCell).row <= 30000 Then
Dim i As Integer
Dim LastRow As Integer
しかしこれは、宣言文が重複しているために私にエラーを与えています。これに別のアプローチがありますか?または私は何か間違っているのですか?代わりに、バリアントを使用しないのはなぜ
紹介します!いくつかの変数のビットを少なくしてメモリを使用していると、反応が無くなってしまって、根本的に何かが間違っています! –
また、[VBAはすべての整数を長整数に変換します](https://msdn.microsoft.com/en-us/library/aa164754.aspx) - これで実際にはパフォーマンス上のメリットはありません。何かあれば、値がキャストされていないので、 'Long'を使うことはより効率的です。 –
ああ、良い点。一連のIF THEN文に基づいて多くの情報をコピーアンドペーストして再配置します。それは小さなデータセットではうまく動作しますが、大きなデータセットでは時折停止します(ただし、しばしば動作します)。 – user1996971